บริษัท ของฉันสร้างอุปกรณ์ Debian Linux ที่บู๊ตจากพาร์ติชัน ext3 บนไดรฟ์ SSD ภายใน เนื่องจากอุปกรณ์ดังกล่าวเป็น "กล่องดำ" ในตัวจึงมักจะปิดวิธีที่หยาบคายโดยเพียงตัดไฟเข้าอุปกรณ์ผ่านสวิตช์ภายนอก
โดยปกติจะไม่เป็นไรเนื่องจากการทำเจอร์นัลของ ext3 จะเก็บสิ่งต่าง ๆ ตามลำดับดังนั้นนอกเหนือจากการสูญเสียบางส่วนของไฟล์บันทึกเป็นครั้งคราว
อย่างไรก็ตามเมื่อเร็ว ๆ นี้เราได้เห็นหน่วยจำนวนหนึ่งซึ่งหลังจากฮาร์ดไดรฟ์พลังรอบจำนวนมากพาร์ติชัน ext3 เริ่มพัฒนาปัญหาเชิงโครงสร้างโดยเฉพาะเราเรียกใช้ e2fsck บนพาร์ติชัน ext3 และพบปัญหาเช่นนั้น แสดงในรายการผลลัพธ์ที่ด้านล่างของคำถามนี้ การรัน e2fsck จนกว่าจะหยุดการรายงานข้อผิดพลาด (หรือการฟอร์แมตพาร์ติชันใหม่) จะเป็นการล้างปัญหา
คำถามของฉันคือ ... อะไรคือความหมายของการเห็นปัญหาเช่นนี้ในระบบ ext3 / SSD ที่ต้องเผชิญกับการปิดเครื่องอย่างกะทันหัน / ไม่คาดคิด?
ความรู้สึกของฉันคือว่านี่อาจเป็นสัญญาณของปัญหาซอฟต์แวร์หรือฮาร์ดแวร์ในระบบของเราเนื่องจากความเข้าใจของฉันคือคุณสมบัติการทำเจอร์นัลของ ext3 (เพื่อป้องกันข้อผิดพลาดหรือปัญหาฮาร์ดแวร์) ของ ext3 ควรจะป้องกันข้อผิดพลาดของระบบไฟล์ (หมายเหตุ: ฉันเข้าใจว่าข้อมูลผู้ใช้ไม่ได้ถูกทำเจอร์นัลและไฟล์ผู้ใช้ที่ถูกบันทึก / หายไป / ถูกตัดทอนสามารถเกิดขึ้นได้ฉันกำลังพูดถึงที่นี่โดยเฉพาะเกี่ยวกับข้อผิดพลาดของระบบแฟ้มเมตาดาต้าที่แสดงด้านล่าง)
ในทางกลับกันเพื่อนร่วมงานของฉันบอกว่าสิ่งนี้เป็นที่รู้จัก / พฤติกรรมที่คาดหวังเพราะบางครั้งคอนโทรลเลอร์ SSD สั่งการเขียนคำสั่งซ้ำและอาจทำให้ ext3 เจอร์นัลสับสน โดยเฉพาะอย่างยิ่งเขาเชื่อว่าแม้จะได้รับตามปกติฮาร์ดแวร์ที่ทำงานและซอฟต์แวร์ที่ปราศจากข้อผิดพลาดวารสาร ext3 เพียงทำให้ความเสียหายของระบบไฟล์มีโอกาสน้อยลงเป็นไปไม่ได้ดังนั้นเราจึงไม่แปลกใจที่จะเห็นปัญหาเช่นนี้เป็นครั้งคราว
พวกเราคนไหนถูก
Embedded-PC-failsafe:~# ls
Embedded-PC-failsafe:~# umount /mnt/unionfs
Embedded-PC-failsafe:~# e2fsck /dev/sda3
e2fsck 1.41.3 (12-Oct-2008)
embeddedrootwrite contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Invalid inode number for '.' in directory inode 46948.
Fix<y>? yes
Directory inode 46948, block 0, offset 12: directory corrupted
Salvage<y>? yes
Entry 'status_2012-11-26_14h13m41.csv' in /var/log/status_logs (46956) has deleted/unused inode 47075. Clear<y>? yes
Entry 'status_2012-11-26_10h42m58.csv.gz' in /var/log/status_logs (46956) has deleted/unused inode 47076. Clear<y>? yes
Entry 'status_2012-11-26_11h29m41.csv.gz' in /var/log/status_logs (46956) has deleted/unused inode 47080. Clear<y>? yes
Entry 'status_2012-11-26_11h42m13.csv.gz' in /var/log/status_logs (46956) has deleted/unused inode 47081. Clear<y>? yes
Entry 'status_2012-11-26_12h07m17.csv.gz' in /var/log/status_logs (46956) has deleted/unused inode 47083. Clear<y>? yes
Entry 'status_2012-11-26_12h14m53.csv.gz' in /var/log/status_logs (46956) has deleted/unused inode 47085. Clear<y>? yes
Entry 'status_2012-11-26_15h06m49.csv' in /var/log/status_logs (46956) has deleted/unused inode 47088. Clear<y>? yes
Entry 'status_2012-11-20_14h50m09.csv' in /var/log/status_logs (46956) has deleted/unused inode 47073. Clear<y>? yes
Entry 'status_2012-11-20_14h55m32.csv' in /var/log/status_logs (46956) has deleted/unused inode 47074. Clear<y>? yes
Entry 'status_2012-11-26_11h04m36.csv.gz' in /var/log/status_logs (46956) has deleted/unused inode 47078. Clear<y>? yes
Entry 'status_2012-11-26_11h54m45.csv.gz' in /var/log/status_logs (46956) has deleted/unused inode 47082. Clear<y>? yes
Entry 'status_2012-11-26_12h12m20.csv.gz' in /var/log/status_logs (46956) has deleted/unused inode 47084. Clear<y>? yes
Entry 'status_2012-11-26_12h33m52.csv.gz' in /var/log/status_logs (46956) has deleted/unused inode 47086. Clear<y>? yes
Entry 'status_2012-11-26_10h51m59.csv.gz' in /var/log/status_logs (46956) has deleted/unused inode 47077. Clear<y>? yes
Entry 'status_2012-11-26_11h17m09.csv.gz' in /var/log/status_logs (46956) has deleted/unused inode 47079. Clear<y>? yes
Entry 'status_2012-11-26_12h54m11.csv.gz' in /var/log/status_logs (46956) has deleted/unused inode 47087. Clear<y>? yes
Pass 3: Checking directory connectivity
'..' in /etc/network/run (46948) is <The NULL inode> (0), should be /etc/network (46953).
Fix<y>? yes
Couldn't fix parent of inode 46948: Couldn't find parent directory entry
Pass 4: Checking reference counts
Unattached inode 46945
Connect to /lost+found<y>? yes
Inode 46945 ref count is 2, should be 1. Fix<y>? yes
Inode 46953 ref count is 5, should be 4. Fix<y>? yes
Pass 5: Checking group summary information
Block bitmap differences: -(208264--208266) -(210062--210068) -(211343--211491) -(213241--213250) -(213344--213393) -213397 -(213457--213463) -(213516--213521) -(213628--213655) -(213683--213688) -(213709--213728) -(215265--215300) -(215346--215365) -(221541--221551) -(221696--221704) -227517
Fix<y>? yes
Free blocks count wrong for group #6 (17247, counted=17611).
Fix<y>? yes
Free blocks count wrong (161691, counted=162055).
Fix<y>? yes
Inode bitmap differences: +(47089--47090) +47093 +47095 +(47097--47099) +(47101--47104) -(47219--47220) -47222 -47224 -47228 -47231 -(47347--47348) -47350 -47352 -47356 -47359 -(47457--47488) -47985 -47996 -(47999--48000) -48017 -(48027--48028) -(48030--48032) -48049 -(48059--48060) -(48062--48064) -48081 -(48091--48092) -(48094--48096)
Fix<y>? yes
Free inodes count wrong for group #6 (7608, counted=7624).
Fix<y>? yes
Free inodes count wrong (61919, counted=61935).
Fix<y>? yes
embeddedrootwrite: ***** FILE SYSTEM WAS MODIFIED *****
embeddedrootwrite: ********** WARNING: Filesystem still has errors **********
embeddedrootwrite: 657/62592 files (24.4% non-contiguous), 87882/249937 blocks
Embedded-PC-failsafe:~#
Embedded-PC-failsafe:~# e2fsck /dev/sda3
e2fsck 1.41.3 (12-Oct-2008)
embeddedrootwrite contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Directory entry for '.' in ... (46948) is big.
Split<y>? yes
Missing '..' in directory inode 46948.
Fix<y>? yes
Setting filetype for entry '..' in ... (46948) to 2.
Pass 3: Checking directory connectivity
'..' in /etc/network/run (46948) is <The NULL inode> (0), should be /etc/network (46953).
Fix<y>? yes
Pass 4: Checking reference counts
Inode 2 ref count is 12, should be 13. Fix<y>? yes
Pass 5: Checking group summary information
embeddedrootwrite: ***** FILE SYSTEM WAS MODIFIED *****
embeddedrootwrite: 657/62592 files (24.4% non-contiguous), 87882/249937 blocks
Embedded-PC-failsafe:~#
Embedded-PC-failsafe:~# e2fsck /dev/sda3
e2fsck 1.41.3 (12-Oct-2008)
embeddedrootwrite: clean, 657/62592 files, 87882/249937 blocks