fsck: ตัวเลือกสำหรับการตรวจสอบดิสก์อย่างละเอียดที่สุด


12

ฉันมีดิสก์ที่มีปัญหาที่ทราบ (ฉันรู้เพราะ dd gags เมื่อฉันพยายามโคลนมัน) แต่เมื่อฉันบูตด้วยซีดีสดและเรียกใช้ fsck บนพาร์ติชันที่ไม่ได้ต่อเชื่อมฉันได้รับสิ่งนี้:

ubuntu@ubuntu:~$ sudo fsck /dev/sdf1
fsck 1.41.4 (27-Jan-2009)
e2fsck 1.41.4 (27-Jan-2009)
/dev/sdf1: clean, 227091/9625600 files, 12789815/38497756 blocks

มิลลิวินาทีในภายหลัง เป็นการยากที่จะเชื่อว่าได้ทำการตรวจสอบฮาร์ดไดรฟ์ทั้งหมดในหน่วยมิลลิวินาที

ฉันยังไม่แน่ใจด้วยว่าฉันควรจะเป็น fsck'ing sdf1 หรือดิสก์ทางกายภาพทั้งหมดหรือไม่ เมื่อฉันลองขับทั้งหมด:

ubuntu@ubuntu:~$ sudo fsck /dev/sdf
fsck 1.41.4 (27-Jan-2009)
e2fsck 1.41.4 (27-Jan-2009)
fsck.ext2: Device or resource busy while trying to open /dev/sdf
Filesystem mounted or opened exclusively by another program?

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

ดังนั้นคำถามพื้นฐานของฉันคือฉันจะรับ fsck (หรือเครื่องมืออื่นที่อาจทำงานได้ดีขึ้น) เพื่อใช้เวลามากกว่ามิลลิวินาทีในการวิเคราะห์ดิสก์ปัญหาของฉันได้อย่างไร

คำตอบ:


14

ก่อนอื่นคุณพูดถูกเกี่ยวกับการเรียกใช้ fsck บนพาร์ติชั่น - fsck ใช้ได้กับระบบไฟล์เท่านั้นไม่ใช่ดิสก์ทั้งหมด คุณสามารถรับรายการพาร์ติชั่นทั้งหมดบนดิสก์fdisk -l /dev/sddได้

คุณเป็นประเภทระบบไฟล์อาจจะเป็น ext3 (ค่าเริ่มต้นใน distros Linux ส่วนใหญ่) ซึ่งหมายความว่ามันมักจะผ่าน fsck ตราบเท่าที่เจอร์นัลสะอาด fsck -fจะดังกล่าวข้างต้นบังคับให้ตรวจสอบอย่างเต็มรูปแบบ

อย่างไรก็ตามหากคุณอ่านข้อผิดพลาดบนดิสก์จำนวน fsck จะไม่ช่วย dd - เนื่องจาก dd ไม่สนใจเนื้อหาของดิสก์จริงๆ

ในการรับ dd เพื่ออ่านดิสก์และดำเนินการกับข้อผิดพลาดการอ่านให้ใช้dd conv=noerror,syncซึ่งจะดำเนินการกับข้อผิดพลาดการอ่านและผนวก null null ไว้ในบล็อกใด ๆ เมื่อมีข้อผิดพลาดในการอ่าน

หลังจากเสร็จสิ้นการสำรองข้อมูลคุณควรเรียกใช้fsck -fบนโคลนเพื่อเรียกคืนและเรียกใช้อีกครั้ง

เคล็ดลับอื่น: mount -o loop filename.ext3 /mountpointถ้าคุณสำรองพาร์ทิชันไปยังไฟล์ที่คุณสามารถย้อนกลับติดมันด้วย นอกจากนี้สมมติว่าคุณกำลังโคลนพาร์ติชัน 200G ไปยังไดรฟ์ 500G จากนั้นคุณสามารถเรียกใช้resize2fs /dev/sdx1(โดยที่ sdx เป็นไดรฟ์ใหม่ของคุณแบ่งพาร์ติชันด้วยพาร์ติชัน 500G เดียว) และระบบไฟล์จะถูกปรับขนาดเป็น 500G

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


ฉันลอง "dd conv = noerror, sync" แต่ดิสก์ที่โคลนผลลัพธ์เป็น unbootable ซึ่งน่าผิดหวังเนื่องจากดิสก์สำหรับบูตทำงานได้ดี fscks ดี แต่ฉันไม่สามารถโคลนไปยังดิสก์อื่นได้เนื่องจากดิสก์มี 1 บล็อกที่ไม่ดี (ซึ่งดูเหมือนว่าไม่มีข้อมูล) ฉันดูเหมือนจะติดอยู่ ...
เฟร็ดแฮมิลตัน

อย่าลืมว่าอาจมีสาเหตุอื่น ๆ ที่ทำให้ดิสก์ไม่สามารถบูตได้ (รูปทรงของดิสก์ที่แตกต่างกันและปัญหา MBR / บูตโหลดเดอร์) หากคุณสามารถยืนยันได้ว่าระบบไฟล์ในดิสก์ใหม่นั้นเป็น OK คุณสามารถบู๊ตเข้าสู่ระบบโดยใช้โหมดช่วยเหลือจากซีดีการติดตั้งการอัพเดต GRUB bootloader เป็นต้นเช่น ก่อนอื่นให้รัน fsck -f / dev / sdx1 จากนั้นลองเมานต์ระบบไฟล์ด้วย mount / dev / sdx1 / mnt - แทนที่ x ด้วยอักษรชื่อไดรฟ์ที่เหมาะสม
Kristian

ข้อเสนอแนะที่ยอดเยี่ยม แต่เมื่อฉันรัน fsck -f บนพาร์ติชันที่โคลนฉันได้รับข้อผิดพลาดนับร้อย (บล็อกที่ผิดกฎหมายใน inodes, comression บิตตั้งอยู่บนระบบแฟ้มโดยไม่มีการสนับสนุนการบีบอัดบล็อกแอตทริบิวต์ขยายที่ไม่ดี ฯลฯ ) ก่อนที่ฉันจะยอมรับว่า โคลนถูกซ่อนไว้อย่างสมบูรณ์ ... ไม่แน่ใจว่าจะทำอย่างไรต่อไป ... ฉันคิดว่าฉันจะลองคัดลอกไฟล์ทั้งหมดไปยังพาร์ติชั่นใหม่ทั้งหมด ... ขอบคุณ
Fred Hamilton

4
ควรใช้ ddrescue (หรือ dd_rescue + dd_rhelp) ดีกว่า dd; มันฉลาดกว่าเกี่ยวกับการจัดการข้อผิดพลาดลองใหม่ภาคที่มีข้อผิดพลาด gnu.org/software/ddrescue/ddrescue.html kalysto.org/utilities/dd_rhelp/index.en.html garloff.de/kurt/linux/ddrescue
2552

1
การตรวจสอบดิสก์อย่างละเอียดมากที่สุด (ที่มีการแก้ไขทั้งหมดโดยอัตโนมัติถ้าเป็นไปได้) สำหรับ ext2 ราก ext3 หรือพาร์ทิชัน ext4 จะถูกดำเนินการดังต่อไปนี้ (1) การบูตจากสื่อกู้ภัย (พาร์ทิชันรากจะต้องเดินเท้า), (2) e2fsck -f -cc -D -pการทำงาน นั่นเป็นการตรวจสอบที่บังคับด้วยการตรวจสอบการอ่านและเขียนแบบไม่ทำลายสำหรับสื่อบันทึกและซ่อมแซมปัญหาที่พบทั้งหมดที่สามารถแก้ไขได้อย่างปลอดภัย อาจใช้เวลาสองสามวันสำหรับ HDD ขนาด 2TB ...
Mikko Rantalainen

10

สิ่งนี้อาจไม่เกี่ยวข้องในกรณีของคุณ แต่ฉันคิดว่าฉันจะพูดถึงต่อไป:

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

นอกจากนี้ยังe2fsckสามารถใช้badblocksเพื่อหลีกเลี่ยงการบล็อกที่ไม่ดีถูกใช้โดยระบบไฟล์ จากe2fsckคู่มือ:

  -c     This option causes e2fsck to use badblocks(8) program to do a  read-
         only scan of the device in order to find any bad blocks.  If any bad
         blocks are found, they are added to the bad block inode  to  prevent
         them from being allocated to a file or directory.  If this option is
         specified twice, then the bad block scan will be done using  a  non-
         destructive read-write test.

หมายเหตุยังfsck_hfs -sจะสแกนหาบล็อกที่ไม่ดี
awiebe

5

คุณต้องการให้ตัวเลือก -f เป็น fsck (บังคับให้ตรวจสอบแม้ว่าระบบไฟล์จะดูสะอาด)

คุณควรรัน fsck ในโหมดผู้ใช้คนเดียว วิธีง่ายๆในการทำเช่นนี้โดยไม่ต้องบูต cdrom สดคือการรีบูตด้วยตัวเลือก -F

shutdown -rF now 

ขอบคุณ แต่คำถามหนึ่งข้อ: ถ้าฉันรีบูทด้วยตัวเลือก -F โดยใช้ไลฟ์ซีดีซีดีไลฟ์จะรู้ได้อย่างไรว่าควรรันเช็ค? มันเป็นแผ่นซีดีก็มีหน่วยความจำที่ฉันรู้ไม่ ...
เฟร็ดแฮมิลตัน

ฉันไม่คิดว่าคุณต้องทำเช่นนั้นจากซีดีสด เพียงบูตจาก live cd และรัน fsck บนพาร์ติชั่นที่ไม่ได้ประกอบเข้าไปด้วยตัวเลือก -f (บังคับ) หรือคุณสามารถรีบูตจากฮาร์ดดิสก์ด้วยการปิดระบบ -rF สิ่งนี้จะบังคับ fsck ก่อนที่จะติดตั้งระบบไฟล์
ริชาร์ดฮอสกิ้นส์

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

1
-Fธงshutdownมักไม่ได้รับการบันทึกไว้อย่างเป็นทางการ (ดูman shutdownและshutdown --helpและแจ้งให้ทราบว่ามันไม่ได้มี) เพื่อให้คุณไม่สามารถไว้วางใจได้ในการทำงาน บางครั้งมันเป็นแบบไม่มี วิธีเดียวในการสแกนพาร์ติชันรูทอย่างเป็นทางการคือการบูตจากสื่อทางเลือก
Mikko Rantalainen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.