ระบบไฟล์ที่ไม่มีวันหยุด (ยอมรับการสูญหายของข้อมูล)


9

มีหัวข้อที่มีอยู่หลายฉบับที่หมุนรอบปัญหานี้ แต่สิ่งที่ฉันค้นหาแตกต่างกันเล็กน้อย ฉันมีการ์ด SD บน Linux ในตัวและทนต่อการสูญเสียพลังงาน ฉันอาจจะสามารถปรับเปลี่ยนฮาร์ดแวร์ในบางจุดปิดอย่างถูกต้องและอื่น ๆ ฯลฯ แต่ตอนนี้ฉันแค่อยากจะหาระบบไฟล์ที่รอดพ้นจากการสูญเสียพลังงานโดยไม่ต้องยุ่งยาก การสูญเสียข้อมูลเป็นที่ยอมรับ ฉันไม่ต้องการเสียมากกว่าไฟล์ที่ฉันกำลังเขียนอยู่ แต่ฉันก็ยังอยากจะเสียมากกว่าการเผชิญหน้ากับ 'ไม่สามารถเมานได้', 'รอ 10 นาทีนี้ fsck' หรือ 'ไม่สามารถสร้างใหม่ ไฟล์เนื่องจาก inode นี้มีข้อผิดพลาดบางอย่างเกิดขึ้น ' โปรแกรมต้องดำเนินต่อไป!

ฉันใช้ความพยายามอย่างมากในการทำให้มั่นใจในสิ่งนี้ ฉันใช้ส่วนประกอบระดับอุตสาหกรรมฉันได้รับการตรวจสอบฮาร์ดแวร์, ซอฟต์แวร์เฝ้าดู, ภายใน, ภายนอก, เริ่มต้นโปรแกรมใหม่, daemons ทำการตรวจสอบหน่วยความจำอย่างต่อเนื่อง, ตัวอธิบายไฟล์และอะไรก็ตามฉันได้รับการเฝ้าดูสุนัขเฝ้าบ้านของฉัน ... แต่ฉันไม่สามารถรับประกันได้ว่าการ์ด SD สามารถติดตั้งและใช้งานได้หรือไม่

ทางออกที่ดีที่สุดของฉันตอนนี้คือการใช้ JFS บนการ์ด SD รวมถึง fsck และ fsck.jfs ในการติดตั้งของฉัน (การเพิ่ม 600kb + กิน ram และแฟลชของฉันซึ่งไม่ดี) และเรียกใช้ fsck ทุกครั้งที่เริ่มต้น (อาจเพิ่มเวลาบู๊ตมากซึ่งค่อนข้างแย่) ดูเหมือนว่าจะเศร้าเล็กน้อย

ไม่มีใครรู้วิธีที่ดีกว่าหรือระบบไฟล์ที่ดีกว่า?

อัปเดต: e2fsprogs-libs (การพึ่งพา jfsutils) ดูเหมือนจะยากที่จะรวบรวมในการแจกจ่ายของฉัน ฉันจะตรวจสอบ ZFS (มันไม่ได้มีถิ่นกำเนิดในการเผยแพร่ของฉันและดูเหมือนว่าจะทำอะไรมากมายที่ฉันไม่ต้องการ)

UPDATE2: ข้อมูลเพิ่มเติมเกี่ยวกับระบบและการทดสอบของฉัน: ที่เก็บข้อมูล SD การ์ดเป็นที่เก็บข้อมูลสำรองที่เป็นตัวเลือก การ์ด SD เป็น microSD เกรดอุตสาหกรรม 2Gb-8Gb การ์ด SD ติดตั้งผ่าน rc ของฉันด้วยคำสั่ง mount -t ตัวเลือก "noatime" แต่ไม่ใช่ "sync" การแจกจ่ายของฉันคืออุปกรณ์อะนาล็อกที่กำหนดเองปรุงแต่ง uClinux ด้วยเคอร์เนล 3.10 และ 1.21 busybox ที่เก็บข้อมูลหลักของฉันคือแฟลช spi พร้อม jffs2 ฉันไม่เคยมีปัญหาใด ๆ กับสิ่งนั้น ฉันไม่รู้ด้วยซ้ำว่ามี fsck.jffs2 หรือไม่ Nand แฟลชบนมืออื่น ๆ ... แต่นั่นเป็นเรื่องที่แตกต่าง วัตถุประสงค์ของการ์ด SD คือเพื่อเก็บข้อมูลการวัด โปรแกรม 'มอนิเตอร์' จะผนวกผลลัพธ์ไปยังไฟล์และมีตำแหน่งการซิงค์เชิงกลยุทธ์ เมื่อไฟล์มีขนาดใหญ่กว่าที่กำหนดจะมีการสร้างใหม่ เมื่อถึงจำนวนไฟล์ที่กำหนดไฟล์ที่เก่าที่สุดจะถูกลบ หากไฟล์การวัดปัจจุบันสูญหายไปเนื่องจากการสูญเสียพลังงานแสดงว่าไม่มีความเสียหาย ไฟล์มักอยู่ที่ 50-100kb และ 1 ผลลัพธ์มักจะเป็น 1kb นี่เป็นเพียงช่วงเริ่มต้นของการพัฒนา ไม่มีอะไรได้รับการแก้ไข นี่เป็นครั้งแรกที่ฉันติดต่อกับระบบไฟล์ที่ไม่ใช่แฟลชในระบบฝังตัว (ฉันได้รับ ext4 ที่เซิร์ฟเวอร์ x86 ของฉัน)

ฉันเริ่มต้นด้วย vfat ระบบไฟล์เริ่มต้น (ฉันคิดว่าโรงงานอาจมีเหตุผลในการเลือกและถ้าสิ่งที่ทำงานฉันไม่สนใจมากที่) ฉันไม่เคยเห็นปัญหาการสูญเสียพลังงานในอุปกรณ์ vfat ฝังตัวของฉัน ฉันเคยประสบปัญหากับ FAT ใน WinCE แล้ว อย่างไรก็ตามเมื่อโปรแกรม 'monitor' ของฉันถึง 100-200 ไฟล์มันก็ไม่ยอมสร้างอีกต่อไป ดูเหมือนว่า FAT จะมีปัญหาการ จำกัด ไฟล์พิเศษในรูทและไฟล์ที่ใหญ่กว่าเล็กน้อยใน dirs ย่อย ฉันต้องสามารถสร้างไฟล์ 500-1,000 ไฟล์ใน 1 dir ดังนั้น vfat จะไม่ทำ

จากนั้นฉันเปลี่ยนเป็น ext2 ฉันไม่ได้ใส่ fsck เมื่อเริ่มต้น (ไม่รู้ว่าต้องทำเช่นนั้น) ภายในหนึ่งวันโปรแกรมตรวจสอบ 'ของฉันไม่สามารถสร้างไฟล์เพิ่มเติมได้เนื่องจากข้อผิดพลาด' inode something something ' ภัยพิบัติ!

โซลูชันปัจจุบันของฉันคือ ext2 ด้วย "e2fsck -y" เมื่อเริ่มต้น จนถึงตอนนี้ดูเหมือนว่าจะมีแนวโน้ม แต่ e2fsck และแนวคิดทั้งหมดของ 'fsck เมื่อเริ่มต้น' กำลังจู้จี้กับฉัน e2fsck โดยตัวมันเองใช้จ่ายมากกว่า 350kb ของแฟลชหลักและ ram ของฉัน (เมื่อมันไม่ทำงาน) ซึ่งหมายความว่าเป็นโปรแกรมที่ยิ่งใหญ่ที่สุดของฉัน มันใหญ่กว่า busybox เกือบจะเป็นคู่แข่งของฉันเคอร์เนล

ฉันกำลังพิจารณา ext3 มีข้อมูลเมตาที่บันทึกไว้แล้วซึ่งจะไม่เจ็บ ฉันสงสัยว่ามันจะช่วยได้มากแค่ไหน ด้วยไฟล์ขนาดเล็กและการซิงค์ที่ควบคุมฉันควรจะครอบคลุมฉันคิดอย่างไร มันมีลำดับเขียนสั่ง ความหมายที่ว่าข้อมูลก็ค่อนข้างถูกบันทึกไว้ อย่างไรก็ตามสิ่งนี้สามารถนำไปสู่ความล่าช้าที่ไม่ได้กำหนดไว้ได้ ซึ่งเป็นสิ่งที่ไม่ดีในสถานการณ์ของฉัน (อาจไม่ใช่ปัญหา) นอกจากนี้ยังมีคุณสมบัติการซิงค์ตามกำหนดเวลา เช่น. กระทำทุก ๆ 5 วินาที ซึ่งฉันคิดว่าเป็นสิ่งที่รบกวนการซิงค์ของฉัน มีการเขียนมากเกินไปสำหรับการ์ด SD แม้แต่อุตสาหกรรม ฉันไม่พบเอกสารใด ๆ เกี่ยวกับวิธีปิดใช้งานสิ่งนี้ และ ext3 ยังคงต้องใช้ fsck เพื่อให้ทำงานได้ทุกการเริ่มต้น! แต่ ext3 ยังคงเป็นไปได้

Ext4 จะแก้ไขปัญหาเรื่องประสิทธิภาพของ ext3 เป็นจำนวนมาก ฉันไม่ต้องการการแสดงจริงๆ และการกระจายของฉันดูเหมือนจะไม่มี mkfs.ext4 ในตัวและ fsck.ext4 บางทีนั่นอาจไม่ใช่ปัญหา มันอาจแม้ว่า เช่น. e2progs-libs (การพึ่งพา jfsutils) ดูเหมือนว่าจะมีปัญหาในการรวบรวมเป็นจำนวนมาก

JFS, XFS, BRFSS ทั้งหมดได้รับการสนับสนุนโดยเคอร์เนลของฉัน ปัจจุบันไม่รวมอยู่ในกล่องเครื่องมือพื้นที่ผู้ใช้ของฉัน ดูเหมือนว่าทั้งหมดจะเป็นระบบที่ค่อนข้างใหญ่และซับซ้อน และพวกเขาทั้งหมดดูเหมือนจะต้อง 'fsck' ที่เท่าเทียมกันเมื่อเริ่มต้น?

ฉันยังได้พิจารณาการขว้างระบบไฟล์ของตัวเอง: เขียนตารางไฟล์ 2 ชุดเสมอ เมื่อทำการข้ามมันจะเลือก CRC ที่ถูกต้องและหมายเลขลำดับใหม่ล่าสุด สร้างลำดับการเขียนแบบ 2 ขั้นตอน จัดสรรชั่วคราวแก้ไขที่กระทำ ไม่จำเป็นต้องใช้ fsck ฉันกลัวว่ามันอาจจะไร้เดียงสาบ้าง

UPDATE3: BTW, ลักษณะของระบบฝังตัว (อย่างน้อยที่สุดนี้) คือพวกมันเป็นแบบอัตโนมัติ, ไม่ต้องใส่คนอื่น, ไม่ต้องเข้าถึงและจะต้องใช้งานเป็นเวลาหลายปี โปรแกรมเช่น fsck ที่อาจต้องมีปฏิสัมพันธ์กับมนุษย์


1
ทำไมไม่เพียงเมานต์ระบบไฟล์ของคุณเป็นแบบอ่านอย่างเดียวและสร้างระบบไฟล์ขนาดเล็กสำหรับสิ่งที่คุณต้องการเขียน
Chris Down

ZFS อาจเป็นตัวเลือก (การตรวจสอบความสมบูรณ์ของข้อมูลที่ดี)
Ouki

นี่เป็นระบบไฟล์ขนาดเล็กสำหรับเขียน
Illishar

ใช่ฉันเคยดู ZFS ด้วย อย่างไรก็ตามการสนับสนุนมันไม่ได้กระโดดลงบนใบหน้าของฉันอย่างแน่นอนเมื่อฉันดูการกระจายของฉัน และฉันก็ไม่ได้กังวลเกี่ยวกับความถูกต้องของข้อมูล ฉันแค่อยากให้มันเมานต์และทำงาน
Illishar

คุณได้ดูbtrfs.wiki.kernel.org/index.php/Main_Pageคุณควรแก้ไขคำถามของคุณด้วยการวิจัยของคุณเพื่อให้เราสามารถช่วยคุณได้อย่างมีประสิทธิภาพมากขึ้น
Kiwy

คำตอบ:


2

มีเรื่องราวที่ไม่สอดคล้องกันหรืออย่างน้อยก็มีความคลุมเครือในเรื่องราวของคุณที่นี่:

ฉันยังคงสูญเสียมันไปมากกว่าการเผชิญหน้ากับ 'ไม่สามารถเมานได้', 'รอ 10 นาทีนี้ fsck'

นัย - แม้ว่าคุณจะไม่ได้พูดจริง ๆ - นี่เป็นปัญหาที่คุณกำลังประสบอยู่ แต่แล้ว:

e2fsprogs-libs (การพึ่งพา jfsutils) ดูเหมือนจะยากที่จะรวบรวมในการแจกจ่ายของฉัน

ความหมายที่คุณไม่ต้อง fsck ใด ๆ เลยเนื่องจากe2fsprogs-libsเป็นพึ่งพาสำหรับที่ให้บริการe2fsprogs e2fsckดังนั้นบางทีคุณยังอยู่ในขั้นตอนการวางแผนที่นี่และยังไม่ได้ทดสอบระบบด้วยเช่นext4แต่แทนที่จะข้ามไปสู่ข้อสรุปที่คุณควรเริ่มต้นด้วย JFS มีเหตุผลอะไรเป็นพิเศษบ้างไหม?

ฉันสังเกตเห็นในการแลกเปลี่ยนราสเบอร์รี่ pi (หน่วยเก็บข้อมูลหลักของ pi เป็นการ์ด SD) ที่ผู้ใช้จำนวนมากดูเหมือนจะหงุดหงิดมากกับปัญหาของการเรียงลำดับนี้ถึงแม้ว่าส่วนใหญ่ (รวมถึงตัวเอง) ไม่เคยมี ทั้งหมด ในตอนแรกที่ผมสันนิษฐานว่าคนเหล่านี้เป็นคนที่ไม่รู้ความจริงที่ว่าระบบควรจะเรียบร้อยปิดตัวลง แต่ที่ไม่ได้เป็นจุดที่ยากที่จะเข้าใจเมื่ออธิบายและมีคนที่รายงานถึงแม้ว่าระบบได้รับการปิดตัวลงอย่างถูกต้อง

คุณได้บอกไปแล้วว่าคุณต้องการสิ่งนี้เพื่อให้สามารถทนต่อการตัดไฟ (ซึ่งยุติธรรมพอ) แต่ฉันพูดถึงเรื่องนี้เพราะมันมีนัยว่ามีบางส่วนหรือการ์ด SD บางส่วนหรือทั้งสองอย่างรวมกันที่มีแนวโน้มที่จะ เสียหายระบบไฟล์เนื่องจากเหตุการณ์บางอย่าง (กระชาก?) ที่เกิดขึ้นเป็นประจำทั้งเมื่อดึงปลั๊กหรือเมื่อใส่กลับฉันยังไม่เห็น - และมีเวลาอีกมากที่จะลอง - รายงานของใครบางคนที่บอกว่าพวกเขาเปลี่ยนไปใช้ btrfs หรือ jfs หรืออะไรก็ตามและตอนนี้ปัญหาได้รับการแก้ไขแล้ว

สิ่งที่ลึกลับอีกอย่างเกี่ยวกับเรื่องนี้คือแม้ว่าผู้คนกำลังลากสายไฟนี้ไม่ควรส่งผลให้ระบบไฟล์ใช้ไม่ได้ แน่นอนฉันได้ทำหลายครั้งด้วย w / the pi และให้คะแนนถ้าไม่ใช่ร้อยครั้ง w / กล่อง linux ปกติ (พลังถูกตัดระบบได้กลายเป็นไม่ตอบสนองฉันหมดแรงและโกรธ ฯลฯ ) และในขณะที่ฉันเห็นการสูญหายของข้อมูลเล็กน้อยฉันไม่เคยเห็นระบบไฟล์เสียหายจนถึงจุดที่ใช้ไม่ได้หลังจาก fsck อย่างรวดเร็ว

อีกครั้งสมมติว่ารายงานเหล่านี้เป็นจริง (ฉันไม่เห็นว่าทำไมผู้คนจำนวนมากถึงโกหก) มีบางสิ่งที่เกิดขึ้นมากกว่าไม่ใช่เพียงการถอนการติดตั้งหมดจด แต่ดูเหมือนว่าจะส่งผลกระทบต่อผู้ใช้เพียงเล็กน้อยเท่านั้น ข้อบกพร่องทั่วไปของฮาร์ดแวร์บางชนิด

ใน pi ที่ฉันเขียน-yลง/forcefsckในสคริปต์การบูตดังนั้นในการบู๊ตครั้งถัดไปมันจะถูกเรียกใช้โดยอัตโนมัติและปัญหาใด ๆ ได้รับการแก้ไขไม่ว่าจะเป็นสิ่งที่จำเป็นหรือไม่ก็ตาม บนแกนเดี่ยวขนาด 700 Mhz ใช้เวลาประมาณ 10 วินาทีสำหรับระบบไฟล์ 12 GB ที่มีข้อมูลประมาณ 4 GB ดังนั้น "10 นาที" ฟังดูนานมากโดยเฉพาะอย่างยิ่งเมื่อคุณพูดว่า "นี่คือระบบไฟล์ขนาดเล็กสำหรับเขียน!"

คุณอาจพิจารณาการโทรsyncเป็นระยะ ๆ

ท้ายที่สุดคุณควรอัปเดตคำถามด้วยรายละเอียดที่เป็นจริงมากขึ้นโดยเฉพาะปัญหาที่คุณพบจริงและอติพจน์น้อยลง ไม่เช่นนั้นดูเหมือนว่าจะเป็นปัญหา XYก่อนวัยอันควรมากเกินไปซึ่งผู้คนจะได้รับประสบการณ์และคำแนะนำที่เป็นไปได้อย่างรวดเร็ว


ที่จริงแล้ว e2fsck ของฉันสามารถรวบรวมได้โดยไม่ต้องพึ่งพา e2fsprogs-libs ฉันสงสัยเกี่ยวกับเรื่องนั้นด้วย (ไม่ใช่รุ่นของ busybox) แต่ฉันไม่ต้องการรับเลย ... ฉันจะอัปเดตคำถามด้วยข้อมูลเพิ่มเติม
Illishar

ฉันแค่แปลกใจว่ามันใช้งานได้โดยไม่มี libext2fs (หรือคุณสร้างรุ่นคงที่หรือไม่หรือนี่อาจเป็นเพียงเรื่องของบรรจุภัณฑ์ที่แตกต่างกันใช่ไหม ... ) ฉันจะเลือกใช้ ext4 ส่วนต่อ ext2 เนื่องจากการทำเจอร์นัลที่ปรับปรุงแล้วและการตรวจสอบ fsck ที่เร็วขึ้นหากเป็นไปได้และอาจเป็นsyncตัวเลือกการเมานต์ ในขณะที่การทำเจอร์นัลจะเพิ่มรอบการเขียนของคุณ แต่ก็ยากที่จะเห็นว่าระบบไฟล์ทางเลือก (เช่นทฤษฎีที่ตรวจสอบออนไลน์) สามารถหลีกเลี่ยงการทำสิ่งเดียวกันมากขึ้นหรือน้อยลงหากความแข็งแกร่งเป็นเป้าหมาย ขอให้โชคดีและหากคุณพบทางออกให้เพิ่มคำตอบของคุณ
goldilocks

2

โปรแกรมต้องดำเนินต่อไป!

นี่เป็นข้อกำหนดทั่วไปและระบบ Linux เป็นตัวเลือกที่ดีที่สุดเมื่อเลือกระบบที่เสถียร

ความพยายามของคุณดูเหมือนจะไม่ไปในทิศทางที่ถูกต้อง อย่างไรก็ตามคุณสามารถทำอะไรเพื่อให้ระบบมีเสถียรภาพ

ในระดับแรกคุณสามารถปรับปรุงระบบไฟล์ของคุณ:

  • ใช้yournal_data_orderedในระบบแฟ้มเมื่อสร้างหรือปรับเปลี่ยนด้วยext3/ext4tune2fs
  • พร้อมJFSใช้--replay_journal_onlyเมื่อตรวจสอบ
  • เปิดใช้งาน autorepair โดยการตั้งค่าFSCKFIX=yesใน initscripts

หากยังไม่พอคุณสามารถบูตระบบได้โดยไม่ต้องต่อดิสก์ buggy สร้างใหม่แทนramdiskในขณะที่คุณตรวจสอบและซ่อมแซมดิสก์บั๊กกี้ด้วยตนเอง สิ่งนี้สามารถเป็นไปโดยอัตโนมัติด้วยสคริปต์

ในระดับต่อไปคุณจะต้องปล่อยให้ระบบฝังตัวและอ่านหัวข้อเกี่ยวกับความพร้อมใช้งานสูง


สำหรับ initscript การตรวจสอบอัตโนมัติเป็นสิ่งที่ OP กำลังมองหาเพื่อหลีกเลี่ยง ดังนั้นระบบไฟล์จะต้องสนับสนุนการตรวจสอบระบบไฟล์ออนไลน์
Bratchley

1
ด้วยyournal_data_orderedหรือreplay_journal_onlyใช้เวลาเพียงไม่กี่วินาทีในการตรวจสอบนั่นคือความแตกต่าง

1
ได้โปรด คุณรู้จักระบบไฟล์ที่รองรับการตรวจสอบออนไลน์หรือไม่?
Illishar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.