มีหัวข้อที่มีอยู่หลายฉบับที่หมุนรอบปัญหานี้ แต่สิ่งที่ฉันค้นหาแตกต่างกันเล็กน้อย ฉันมีการ์ด 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 ที่อาจต้องมีปฏิสัมพันธ์กับมนุษย์