ป้องกันความเสียหายของข้อมูลบน ext4 / Linux drive เมื่อไฟฟ้าดับ


9

ฉันมีบอร์ดฝังตัวบางตัวที่ใช้ American Megatrends BIOS พร้อมลินุกซ์ฝังตัวเป็นระบบปฏิบัติการ ปัญหาที่ฉันมีคือ IDE แฟลชอุตสาหกรรมจะเสียหายจากการสูญเสียพลังงาน ฉันมีรูปแบบเป็น ext4 เมื่อใดก็ตามที่เกิดเหตุการณ์นี้ขึ้นฉันสามารถแก้ไขแฟลชด้วย fsck ได้ แต่จะไม่สามารถทำได้ในการปรับใช้ของเรา ฉันได้ยินมาว่าการปิดใช้งานการเขียนแคชควรช่วยได้ แต่ฉันไม่สามารถหาวิธีทำได้ นอกจากนี้ฉันควรทำอย่างอื่นอีกไหม?

ข้อมูลเพิ่มเติม

ไดรฟ์เป็นโมดูลแฟลช 4gb ide ฉันมีหนึ่งพาร์ติชันซึ่งเป็น ext4 ระบบปฏิบัติการได้รับการติดตั้งบนพาร์ติชั่นนั้นและด้วงคือ bootloader ของฉัน

fdisk -l แสดง / dev / sda เป็นโมดูลแฟลชที่มี / dev / sda1 เป็นพาร์ติชันหลักของฉัน

หลังจากการสูญเสียพลังงานฉันมักจะไม่สามารถทำผ่านสคริปต์เริ่มต้นระบบได้ทั้งหมด

เมื่อฉันติดตั้งไดรฟ์บนพีซีเครื่องอื่นฉันเรียกใช้ fsck / dev / sda1 มันมักจะแสดงข้อความเช่น

"zero datetime on node 1553 ... fix (y)?"

ฉันแก้ไขพวกเขาและมันบูทได้ดีจนกระทั่งไฟดับต่อไป

เมื่อฉันไปถึงสำนักงานพรุ่งนี้ฉันจะโพสต์เอาต์พุตจริงของ fdisk -l

นี่คือทั้งหมดที่ฉันรู้เกี่ยวกับวิธีการทำงานของระบบ ฉันไม่ใช่คนระบบฉันเป็นวิศวกรซอฟต์แวร์ที่มีนิสัยชอบพูดจาดื้อดึงที่อยู่นอกรายละเอียดงานของเขา ฉันรู้วิธีจัดรูปแบบไดรฟ์ติดตั้ง bootloader เขียนซอฟต์แวร์และแฮ็คบนระบบปฏิบัติการ

นี่คือผลลัพธ์จาก dumpe2fs

#sudo dumpe2fs /dev/sda1
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name:   VideoServer
Last mounted on:          /
Filesystem UUID:          9cba62b0-8038-4913-be30-8eb211b23d78
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    (none)
Filesystem state:         not clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              245760
Block count:              977949
Reserved block count:     48896
Free blocks:              158584
Free inodes:              102920
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      239
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Flex block group size:    16
Filesystem created:       Fri Feb  4 15:12:00 2011
Last mount time:          Sun Oct  2 23:48:37 2011
Last write time:          Mon Oct  3 16:34:01 2011
Mount count:              2
Maximum mount count:      26
Last checked:             Tue Oct  4 07:44:50 2011
Check interval:           15552000 (6 months)
Next check after:         Sun Apr  1 07:44:50 2012
Lifetime writes:          21 GB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:           256
Required extra isize:     28
Desired extra isize:      28
Default directory hash:   half_md4
Directory Hash Seed:      249d2b79-1e20-49a3-b324-6cb631294a63
Journal backup:           inode blocks

คำตอบ:


6

แคชการเขียนมักจะไม่เกี่ยวข้องกับ BIOS ส่วนใหญ่ไม่มีตัวเลือกสำหรับการเปลี่ยนการตั้งค่าแคชดิสก์ ด้วย linux การใช้น่าhdparm -W 0จะช่วยได้

การตั้งค่าเป็นแบบถาวรดังนั้นหากคุณไม่มี hdparm ที่จะเล่นด้วยในระบบการผลิตของคุณคุณควรจะสามารถปิดการใช้งานแคชเขียนดิสก์ในระบบอื่นและถอดดิสก์ออก

BTW: ฉันคิดที่สองเกี่ยวกับระบบไฟล์รูทที่ไม่สามารถเขียนได้ (ดังนั้นระบบของคุณสามารถบูตในรูปแบบ "โหมดการกู้คืน" และอนุญาตให้เข้าถึงจากระยะไกลแม้ว่าระบบไฟล์ที่เขียนได้จะไม่สามารถติดตั้งได้ด้วยเหตุผลบางประการ) และถ้าคุณสามารถเปลี่ยนการออกแบบฮาร์ดแวร์พิจารณาใช้อุปกรณ์ MTDแทนดิสก์ IDE / SATA มีระบบไฟล์แฟลชทราบเหมือนjffs2 เราได้ใช้การรวมกันนี้กับอุปกรณ์ฝังตัวหลายตัว (ส่วนใหญ่เป็นโซลูชันเราเตอร์ VPN ในฟิลด์) เป็นเวลาหลายปีด้วยผลลัพธ์ที่ดี

อัปเดต:รากของปัญหาของคุณดูเหมือนว่าคุณกำลังเรียกใช้ระบบไฟล์ ext4 ที่ปิดใช้งานการทำเจอร์นัล - has_journalหายไปจากFilesystem featuresรายการ เพียงแค่ปิดบริการทั้งหมดตรวจสอบว่าสิ่งที่ยังคงมีไฟล์ที่เปิดใช้lsof +f -- /, remount พาร์ทิชันรากของคุณอ่านอย่างเดียวกับmount -o remount,ro /เปิดใช้งานวารสารด้วยtune2fs -O has_journal /dev/sda1และตั้งค่า "สั่ง" โหมดวารสารเป็นค่าเริ่มต้นตัวเลือกที่ติดตั้งใช้tune2fs -o journal_data_ordered /dev/sda1- คุณจะต้องอีกครั้ง รัน fsck (โดยเฉพาะอย่างยิ่งจากระบบช่วยเหลือ) และติดตั้ง root / reboot ใหม่หลังจากการดำเนินการนี้

เมื่อใช้การตั้งค่าเหล่านี้ข้อมูลเมตาจะได้รับการกู้คืนจากสมุดรายวันแม้ในกรณีที่ไฟฟ้าดับอย่างกะทันหัน ข้อมูลจริงจะถูกเขียนลงในดิสก์อย่างสม่ำเสมอเช่นกันแม้ว่าคุณอาจเห็นข้อมูลเป็นเวลาหลายวินาทีก่อนที่ไฟฟ้าดับในการบูท หากสิ่งนี้ไม่เป็นที่ยอมรับคุณอาจลองใช้tune2fs -o journal_data /dev/sda1ตัวเลือกเมาท์กับระบบไฟล์ของคุณซึ่งจะรวมถึงข้อมูลทั้งหมดที่เขียนไปยังดิสก์ในเจอร์นัล - สิ่งนี้จะช่วยให้คุณมีความสอดคล้องของข้อมูลที่ดีขึ้น บน SSD ของคุณ


ดังนั้นแคชเขียนปัญหาของฉันหรืออย่างอื่นคืออะไร?
Jonathan Henson

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

โอเคขอบคุณ. ฉันเป็นวิศวกรซอฟต์แวร์ทำอะไรไม่ถูกที่คุณรู้จัก :) ฉันจะรับรายละเอียดบางอย่าง ฉันกำลังเพิ่มรายละเอียดภายในไม่กี่นาที
Jonathan Henson

ฉันไม่รู้ว่าขอบเขตคืออะไรและฉันไม่แน่ใจว่าโหมดวารสารคืออะไร
Jonathan Henson

อ่าฉันเข้าใจแล้ว เพียงโพสต์บรรทัดแรกของผลลัพธ์ของdumpe2fs /dev/sda1(หรือชื่ออุปกรณ์ / พาร์ติชันของคุณสำหรับระบบนี้) - พวกเขาควรมีข้อมูลที่เกี่ยวข้องทั้งหมด และตัวเลือกการเมาท์สำหรับระบบไฟล์รูทจาก / etc / fstab ควรช่วยเช่นกัน
the-wabbit

5

คำแนะนำในการเขียนแคชเป็นการเริ่มต้นที่ดี แต่ฟังดูเหมือนข้อบกพร่องด้านการออกแบบสถาปัตยกรรม ในระบบฝังตัวแฟลชภายในไม่ควรติดตั้ง R / W ยกเว้นในบางกรณี คุณควรทำงานส่วนใหญ่ในระบบไฟล์หน่วยความจำและซิงค์การเปลี่ยนแปลงกลับไปยังแฟลช RW ตามคำสั่งผู้ใช้หรือช่วงเวลาปกติ เป็นเรื่องผิดปกติที่ระบบสมองกลฝังตัวจะใช้ระบบไฟล์ปกติ (เช่น ext4) ในโหมด rw ระหว่างการทำงานปกติ หากมีความต้องการแอปพลิเคชั่นบางตัวที่คุณต้องการพื้นที่เก็บข้อมูลจำนวนมากคุณควรพิจารณาให้พาร์ติชันระบบของคุณแตกต่างกันและออกแบบเพื่อให้พาร์ติชันข้อมูลสามารถ fsck -y'ed เป็นส่วนหนึ่งของการเริ่มต้น

หากคุณต้องการจุดเริ่มต้นฉันจะดูว่าคนติดตั้งระบบ Diskless Linux:

http://frank.harvard.edu/~coldwell/diskless/

และเริ่มจากตรงนั้น แนวคิดทั่วไปคือไบนารีระบบและข้อมูลของคุณสามารถติดตั้งแบบอ่านอย่างเดียวเพื่อให้ระบบไฟล์ของคุณจะไม่เสียหาย อย่างไรก็ตามคุณต้องสามารถเขียนไปยังบางพื้นที่ดังนั้นคุณต้องการบางสิ่งบางอย่างในหน่วยความจำระบบไฟล์ / tmp, / var / tmp แม้ว่าบางสิ่งจำเป็นต้องเขียนได้คุณเพียงแค่สร้างสคริปต์เพื่อติดตั้งพาร์ติชันเป็น r + w จากนั้นส่งการเปลี่ยนแปลงจากนั้นกลับไปอ่านอย่างเดียว

ตัวอย่างที่ดีมากของสิ่งนี้คือฮาร์ดแวร์ Cyclades, ลินุกซ์ฝังตัวและเมื่อใดก็ตามที่คุณทำการเปลี่ยนแปลงการกำหนดค่าคุณจะต้องเรียกใช้สคริปต์บันทึกซึ่งจริง ๆ แล้วจะคืนค่าการกำหนดค่าและเขียนลงในแฟลช


มีไฟล์การกำหนดค่าที่จำเป็นต้องแก้ไขโดยแอปพลิเคชันรวมถึง / etc / Networks และไฟล์ชื่อโฮสต์ คุณสามารถให้คำแนะนำกับฉันเช่นบางสิ่งบางอย่างคุณต้องการพาร์ติชันหนึ่งที่มีประเภทและประเภทดังกล่าวและอีกพาร์ติชันสำหรับไฟล์กำหนดค่าของคุณที่เป็นประเภทอื่นเป็นต้น ฉันไม่รู้เกี่ยวกับสิ่งเหล่านี้จริงๆ ฉันเขียนซอฟต์แวร์และคาดหวังอย่างน่าอัศจรรย์ว่าจะรู้อย่างแน่นอน (ไม่ใช่ว่าฉันไม่รู้ที่จะเขียนซอฟต์แวร์ * ระวัง แต่แน่นอนฉันไม่รู้มากเท่าคนที่ทุ่มเทกับระบบ) ว่าฮาร์ดแวร์ควรทำงานโดยนายจ้างของฉันอย่างไร
Jonathan Henson

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

กรณีที่เลวร้ายที่สุดคุณสามารถใช้พาร์ติชันระบบ (ไม่สามารถเขียนได้) และสองพาร์ติชันการกำหนดค่า หากพาร์ติชันหลักไม่สามารถอ่านได้หรือไม่สมบูรณ์ให้บูตจากตัวที่สองทำการฟอร์แมตพาร์ติชันหลักและคัดลอกพาร์ติชั่นรองลงไป อัปเดตหลักและรองในการดำเนินการที่ไม่ทับซ้อนกัน
David Schwartz

ตกลงฉันอัปเดตคำตอบของฉัน ฉันอาจจะใช้คำแนะนำของคุณและนำสิ่งนี้ไปเป็นศาสตราจารย์เก่าของฉันจากหลักสูตรบัณฑิตศึกษาของฉัน ในระหว่างนี้มีอย่างรวดเร็วและสกปรกที่อย่างน้อยจะได้รับฉันในตำแหน่งที่ดีกว่าที่ไม่รวมตูดของฉันในกระทะ?
Jonathan Henson

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