ฉันจะซ่อมแซมบล็อกที่ไม่สามารถอ่านได้อย่างง่ายดายบนดิสก์ Linux ได้อย่างไร


22

ระบบ Linux ของฉันเริ่มโยนข้อผิดพลาด SMART ใน syslog ฉันติดตามมันและเชื่อว่าปัญหาเป็นบล็อกเดียวบนดิสก์ ฉันจะทำให้การจัดสรรดิสก์ใหม่นั้นง่ายขึ้นได้อย่างไร ฉันต้องการทราบว่าไฟล์ใดถูกทำลายในกระบวนการ (ฉันทราบว่าหากบล็อกหนึ่งล้มเหลวในดิสก์อื่น ๆ มีแนวโน้มที่จะติดตาม; ฉันมีการสำรองข้อมูลอย่างต่อเนื่องที่ดีและเพียงต้องการพยายามที่จะทำให้ดิสก์นี้ทำงานได้)

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

ดิสก์ที่มีปัญหาคือพาร์ติชันระบบหลัก ใช้ ext3fs และ LVM นี่คือบันทึกข้อผิดพลาดจาก syslog และบิตที่เกี่ยวข้องจาก smartctl

smartd[5226]: Device: /dev/hda, 1 Currently unreadable (pending) sectors

Error 1 occurred at disk power-on lifetime: 17449 hours (727 days + 1 hours)
... Error: UNC at LBA = 0x00d39eee = 13868782

มีการถ่ายโอนข้อมูล smartctl เต็มบน Pastebin


ฉันคิดว่าดิสก์เฟิร์มแวร์จะทำการแมปบล็อกที่ไม่ดีอีกครั้งโดยอัตโนมัติดังนั้นในทางทฤษฎีมันได้ทำไปแล้ว ตามที่ระบุไว้ด้านล่างให้เรียกใช้ fsck (หรือ equiv ที่ถูกต้องสำหรับ FS ของคุณ) เพื่อให้แน่ใจว่า FS ที่ซ้อนทับยังคงมีเสถียรภาพ
BuildTheRobots

2
ความเข้าใจของฉันเป็นเฟิร์มแวดิสก์จะทำการแมปบล็อกในการเขียนไม่ได้อยู่ในการอ่าน ดังนั้นฉันต้องบังคับให้เขียนถึงบล็อกที่เป็นปัญหา
เนลสัน

1
ในที่สุดฉันก็ยกเลิกดิสก์นี้ มันทำงานได้ดีเป็นเวลาหลายเดือน แต่หลังจากเกิดข้อผิดพลาดในการอ่านครั้งที่ 5 ฉันก็ยอมแพ้
เนลสัน

คำตอบ:


12

hdparm --write-sector <LBA> /dev/iceคุณอาจจะลอง

ฉันไม่ทราบวิธีอื่นในการทำเช่นนี้ - คุณต้องแปลง LBA ด้วยตนเองเป็นบล็อกของระบบไฟล์ (ตามที่คุณพบแล้ว)


โอ้โหนั่นเป็นธงใหม่! แน่นอนว่าจะดูแลการจัดสรรบล็อกที่ไม่ดีอีกครั้ง ตอนนี้สิ่งที่ฉันต้องการคือวิธีที่ง่ายในการค้นหาสิ่งที่จะปิดบัง
เนลสัน

3
เมื่อใช้วิธีนี้เพื่อแก้ไขดิสก์ฉันสามารถพูดได้ว่านี่เป็นวิธีที่ถูกต้อง การบังคับให้เขียนไปยังเซกเตอร์ที่มีปัญหาจะบังคับให้ไดรฟ์เผชิญหน้ากับเซกเตอร์และ (a) รับการเขียนที่ประสบความสำเร็จหรือ (b) จบด้วยวินาทีที่ไม่ดีถาวรพร้อมกับทำการแมปใหม่
Avery Payne

ที่ดี! และง่ายกว่าsmartmontools.sourceforge.net/badblockhowto.html
Janning

มันแปลกที่ว่านี้กระบวนการซ้ำ (ของการมองหาภาคที่ไม่ดีต่อไปผ่านสมาร์ทและบังคับให้มันจัดสรรใหม่) ไม่ได้โดยอัตโนมัติด้วยสาธารณูปโภคที่ง่าย .. !
Imz - อีวาน Zakharyaschev

32

ฉันเคยเขียนดิสก์เฟิร์มแวร์สำหรับ WD และฉันเคยเขียนเฟิร์มแวร์ซึ่งกำหนดบล็อกเสีย

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

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

ดังนั้นจะเกิดอะไรขึ้นถ้าไดรฟ์ทำการอ่านและไม่สามารถกู้คืนข้อมูลได้ ไม่มีอะไร ข้อผิดพลาดถูกรายงานไปยังโฮสต์ แต่ไม่มีการมอบหมายใหม่ ปัญหาคือไดรฟ์สามารถกำหนดเซกเตอร์ใหม่ได้ แต่ไม่มีความคิดเพียงเล็กน้อยว่าข้อมูลใดที่จะเขียนในเซกเตอร์ที่กำหนดใหม่ ถ้ามันเขียนเลขศูนย์จำนวนหนึ่งพูดแล้วก็อ่านเซกเตอร์อีกครั้งมันจะคืนค่าศูนย์ทั้งหมดโดยไม่มีข้อบ่งชี้ว่าข้อมูลไม่ถูกต้อง นี่เป็นสิ่งเดียวกับความเสียหายของข้อมูล ไดรฟ์ไม่สามารถนับบนโฮสต์ที่ติดตามข้อผิดพลาดด้วยเหตุผลหลายประการ (ตัวอย่างเช่นถ้าไดรฟ์ถูกย้ายไปยังโฮสต์ใหม่หรือไม่) ดังนั้นวิธีที่ดีที่สุดคือการไม่ทำอะไรเลยเมื่อข้อมูลสามารถ ' ไม่สามารถกู้คืนได้

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

มีวิธีอื่นในการจัดการกับบล็อกที่ไม่ดีซึ่งไม่สามารถจัดสรรใหม่ได้ หากไดรฟ์เป็นส่วนหนึ่งของการกำหนดค่า RAID ที่ซ้ำซ้อน (เช่นอะไรก็ได้ยกเว้น RAID 0) ซอฟต์แวร์ RAID ควรกู้คืนข้อมูลโดยอัตโนมัติสำหรับเซกเตอร์เสียจากไดรฟ์อื่นและเขียนลงในเซกเตอร์ที่ถูกจัดสรรใหม่ ดิสก์ SCSI มีคำสั่งกำหนดบล็อกใหม่อย่างชัดเจนซึ่งโฮสต์สามารถใช้เพื่อบังคับให้มอบหมายใหม่ได้แม้ว่าจะไม่มีข้อมูลที่ถูกต้องที่จะเขียนไปยังบล็อก แต่การใช้งานนั้นค่อนข้างต่ำ


1
อาจเป็นสิ่งที่ควรค่าแก่การกล่าวถึงเช่นกันว่าอย่างน้อย Seagate HDD บางรุ่นรองรับการเขียน - อ่าน - ตรวจสอบซึ่งสามารถเปิดใช้งานได้hdparm -R(สมมติว่าเป็น hdparm ล่าสุดที่สมเหตุสมผล) นี้มาในการลงโทษการเขียนอย่างมีนัยสำคัญ (โดยประมาณลดลงครึ่งหนึ่งเขียนงานและเขียน IOPS เพราะทุกเขียนตอนนี้ incurrs อ่านในภายหลัง) แต่ถ้าสนับสนุนฮาร์ดแวร์ของคุณมันและภาระงานของคุณเป็นแบบอ่านอย่างหนักแล้วนี้อาจจะเป็นมากที่สามารถทำงานได้มากป้องกันตัวชี้วัด
CVn

2

ฉันคิดว่าสิ่งที่คุณต้องทำคือ:

e2fsck -c /dev/hda1

สมมติว่า / dev / hda1 เป็นพาร์ติชั่น (unmount) หรือ:

e2fsck -c -c /dev/hda1

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


แต่น่าเสียดายที่ดูเหมือนจะไม่ใช้ข้อมูลจาก SMART เกี่ยวกับบล็อกที่ไม่ดี ผมสงสัยว่าทำไมไม่มีเครื่องมือ fsck ที่จะใช้ข้อมูลที่บล็อกเสียจากสมาร์ทและพยายามที่จะหลีกเลี่ยงพวกเขาหรือซ่อมแซมไฟล์ที่ได้รับผลกระทบตามที่อธิบายในsmartmontools.sourceforge.net/badblockhowto.htmlหรือserverfault.com/a/106130/68972 ..
imz - Ivan Zakharyaschev

2

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

ฉันมีไดรฟ์แล็ปท็อปที่เริ่มทำเสียงไม่กี่ปีที่ผ่านมา Badblocks แสดงให้เห็นว่าไดรฟ์มี 118 หรือมากกว่าบล็อกที่มองเห็นได้โดยผู้ใช้ปลายทาง เนื่องจากฉันมีสำเนาของ SpinRite อยู่แล้วฉันจึงตัดสินใจลองก่อนที่จะซื้อไดรฟ์ใหม่ หลังจากรัน spinrite บนไดรฟ์ badblocks พบว่ามีบล็อค 0 อันและเสียงหยุดลง ไดรฟ์ทำงานมานานกว่าสองปีแล้ว


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

ไม่ฉันลงคะแนนเพียงคำตอบเดียวเพราะมันไม่ได้ตอบคำถามของฉัน คุณแนะนำ Spinrite ขอบคุณ! ความเข้าใจของฉันคือแรงผลักดันที่มีสุขภาพดีจะไม่ทำการแมปเซกเตอร์เสียจนกว่าจะมีการเขียน ฉันพยายามหาวิธีที่ง่ายที่สุดในการบังคับให้เขียน ไปตามคำแนะนำของ Matthew และดูว่า fsck ฉลาดพอที่จะทำหรือไม่
เนลสัน

ขออภัยฉันกระโดดไปสู่ข้อสรุปหลังจากเห็น 2 คำตอบลงคะแนนอย่างรวดเร็วและคุณตอบกลับไปยังคำตอบอื่น ๆ ที่ฉันคิดว่าเป็นคุณ
3dinfluence

2
คุณถูกต้องว่าการแมปเซกเตอร์เสียจะเกิดขึ้นเมื่อการเขียนล้มเหลวในบล็อก หากคุณมีบล็อกที่เสียหายเท่าที่ระบบไฟล์นั้นเกี่ยวข้อง fsck อาจสังคายนาปัญหาของคุณหากบล็อกที่มีปัญหานั้นคือบล็อกเมทาดาทา fsck จริงๆเพียงแค่สแกนและแก้ไขข้อผิดพลาดในข้อมูลเมตา ดังนั้นจึงไม่รับประกันข้อมูลเอง ระบบไฟล์ gen ถัดไปเช่น BTRFS และ ZFS สามารถตรวจจับได้และหากคุณมีข้อผิดพลาดของข้อมูลที่ถูกต้องซ้ำซ้อน Spinrite จะบังคับสิ่งนี้ในขณะที่อ่านแล้วเขียนข้อมูลกลับด้านอ่านซ้ำแล้วย้อนกลับข้อมูลกลับบนทุกบล็อกซึ่งเป็นส่วนหนึ่งของการสแกน
3dinfluence

1

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

ฉันจะใช้ MHDD มันค่อนข้างใช้งานง่ายและตราบใดที่คุณจำตั้ง HDD ของคุณใน Bios เป็น IDE emulation แล้วกลับไปที่ AHCI เมื่องานของคุณเสร็จสิ้นคุณไม่มีอะไรต้องกังวล

เมื่อคุณบู๊ตเป็น MHDD ให้เลือกประเภทไดรฟ์ในคำสั่ง ERASE และยืนยันการเลือกของคุณ

รับกาแฟด้วยตัวคุณเองอาจใช้เวลาสักครู่

หลังจากไดรฟ์ถูก zeroed out ให้สแกน (f4) ด้วยการตั้งค่า remap ใหม่เป็น ON (ค่าเริ่มต้นปิด) หากยังคงมีปัญหากับไดรฟ์ (หมายความว่ามีความเสียหายทางแผ่นดิสก์และไดรฟ์อยู่บนทางลาดชันลง) ตัวเลือกนี้จะ "แก้ไข" โดยการแมปบริเวณที่เสียหายไปยังส่วนที่มีสุขภาพดีของไดรฟ์

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


-1

หากดิสก์ไม่ดีให้แทนที่ มันไม่คุ้มกับความเสี่ยงที่จะทำให้เสียมากกว่า


ฉันชัดเจนเกี่ยวกับการรู้ว่าดิสก์ไม่ดีและมีการสำรองข้อมูลเพื่อหลีกเลี่ยงความเสี่ยง
เนลสัน

2
นั่นหมายความว่าคุณยินดีที่จะเดิมพัน ฉันไม่คิดว่านั่นหมายความว่าไม่ควรเปลี่ยน แต่คุณยินดีที่จะเพิกเฉยต่อคำแนะนำนั้น ฉันสงสัยว่าการสำรองข้อมูลใด ๆ สามารถบันทึกระบบของคุณได้เองเนื่องจากดิสก์แตกและสิ่งต่าง ๆ จะได้รับความเสียหายอย่างมากเมื่อสิ่งต่าง ๆ ลดลง
Michael Graff

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