เรากำลังทำงานบนระบบลินุกซ์ขนาดเล็กที่ฝังตัว (2.6.35-ish) กับอุปกรณ์ NAND ภายในขนาดเล็กสำหรับระบบปฏิบัติการและแอปพลิเคชัน (250-500Meg) และการ์ด SD ที่มีการ์ด SDHC SDHC ขนาด 8Gb สำหรับข้อมูล
สามารถตัดไฟของยูนิตได้ตลอดเวลา
ระบบจะต้องจัดเก็บข้อมูลลงในการ์ด SD ข้อมูลนี้สำคัญมาก ... เป็นจุดประสงค์ทั้งหมดของระบบ ระบบมักจะถูกตัดการเชื่อมต่อจากเครือข่ายใด ๆ ในสถานที่ห่างไกลและข้อมูลจะถูกดึงผ่าน sneakernet ทุก 4-8 สัปดาห์
ปัจจุบันเราเพิ่งได้รับ VFAT บนการ์ด SD นั่นเป็นหลักเพื่อให้ลูกค้าทดสอบครั้งแรกสามารถคัดลอกข้อมูลออกได้อย่างง่ายดายด้วยตนเองบนแล็ปท็อป Win7 ของพวกเขา
อย่างไรก็ตามตอนนี้ฉันกังวลว่าเป็นเรื่องของเวลาจนกว่าไฟฟ้าดับในเวลาที่ผิดทำให้ข้อมูลสูญหาย
วิธีที่ดีที่สุดในการกำหนดค่าระบบดังกล่าวเพื่อป้องกันข้อมูลสูญหายคืออะไร JFFS2 ดูเหมือนสิ่งที่ฉันต้องการในแง่ของวิธีการเขียนข้อมูล (และความต้องการด้านประสิทธิภาพไม่สูงเลย) แต่มันฟังดูค่อนข้างคึกคักที่จะใช้ block2mtd ฯลฯ ฉันยังไม่แน่ใจว่าการปรับระดับการสึกหรอของการ์ดจะมีปฏิกิริยาอย่างไร กับมัน
วิธีที่ดีที่สุดในการทำเช่นนี้คืออะไร?
แก้ไข
ตอนนี้ฉันกำลังคิดที่จะออกจากระบบไฟล์ VFAT และจัดสรรไฟล์ขนาดวันต่อครั้งที่เต็มไปด้วย 0xFF ซึ่งควรจำกัดความเสี่ยงต่อความล้มเหลวของวงจรไฟฟ้าเป็นอย่างมาก จากนั้นฉันก็สามารถผนวกระเบียนภายในบล็อกที่ถูกสร้างล่วงหน้าเท่านั้นและหวังว่าการ์ด SD จะไม่ได้โง่อย่างที่พวกเขาต้องการลบ / สวมระดับการเขียนไปยังภูมิภาค 0xFF
ฉันสามารถใช้เวลากลางคืน แต่มี VFAT Nomtime ที่เทียบเท่าเพื่อป้องกันการเขียนลงในเขตเวลาที่ปรับเปลี่ยนหรือไม่? ฉันต้องการวิธีป้องกันการปรับปรุงข้อมูลเมตาเลยจนกว่าจะมีการสร้างไฟล์วันใหม่
แก้ไข 2
มีคนในการแลกเปลี่ยนสแต็คทางอิเล็กทรอนิกส์เตือนฉันว่ายังมีข้อมูล ECC ใน NAND ดังนั้นจึงไม่มีวิธีใดที่จะป้องกันความจำเป็นในการลบ
ดังนั้น JFFS2 ผ่าน block2mtd จะเหมาะสมในสถานการณ์นี้หรือไม่?
แก้ไข 3
มันแย่กว่าที่ฉันคิด การ์ด SD ที่ฉันมีจะลบบล็อคข้อมูลแม้ว่าคุณจะเขียนเนื้อหาเดียวกันลงในดิสก์ บล็อกการลบคือ 64KB และใหญ่เกินไปที่จะเขียนล่าช้า ฉันจะเก็บข้อมูลได้มากถึง 128KB ในแฟลช NAND (ซึ่งฉันสามารถควบคุมพฤติกรรมการเขียนของ) ในรูปแบบของวารสารแล้วเขียนบล็อก 128KB ไปยังไฟล์ที่จัดแนว 128KB ในพาร์ติชัน VFAT บนการ์ด SD (ใน กรณีการ์ด SD อื่น ๆ มีการลบบล็อก 128KB)
sync
คำสั่งหลังจากเขียนไปยังการ์ด SD แต่ละครั้งมันจะเขียนบิตต่าง ๆ หลังจากที่คุณเปลี่ยน / สร้างโดยไม่เก็บไว้ใน RAM เพื่อให้การเปลี่ยนแปลงของคุณอยู่ในการ์ด และจะไม่หายไปจากการสูญเสียพลังงาน
sync
อาจทำให้เรื่องแย่ลงเนื่องจากมันจะเพิ่มเวลาของข้อมูลเมตาที่กำลังอัปเดตในช่วงกลาง