เซ็กเตอร์ที่ไม่ดีบ่งบอกถึงดิสก์ที่ล้มเหลวหรือไม่?


16

ระบบ Ubuntu 13.10 ของฉันทำงานได้ไม่ดีในวันสุดท้าย ดูบันทึกของเคอร์เนลปรากฏว่าดิสก์ SATA 3TB อายุน้อยกว่า 1 ปีมีปัญหากับเซกเตอร์เฉพาะ:

Nov  4 20:54:04 mediaserver kernel: [10893.039180] ata4.01: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
Nov  4 20:54:04 mediaserver kernel: [10893.039187] ata4.01: BMDMA stat 0x65
Nov  4 20:54:04 mediaserver kernel: [10893.039193] ata4.01: failed command: READ DMA EXT
Nov  4 20:54:04 mediaserver kernel: [10893.039202] ata4.01: cmd 25/00:08:f8:3f:83/00:00:af:00:00/f0 tag 0 dma 4096 in
Nov  4 20:54:04 mediaserver kernel: [10893.039202]          res 51/40:00:f8:3f:83/40:00:af:00:00/10 Emask 0x9 (media error)
Nov  4 20:54:04 mediaserver kernel: [10893.039207] ata4.01: status: { DRDY ERR }
Nov  4 20:54:04 mediaserver kernel: [10893.039211] ata4.01: error: { UNC }
Nov  4 20:54:04 mediaserver kernel: [10893.148527] ata4.00: configured for UDMA/133
Nov  4 20:54:04 mediaserver kernel: [10893.180322] ata4.01: configured for UDMA/133
Nov  4 20:54:04 mediaserver kernel: [10893.180345] sd 3:0:1:0: [sdc] Unhandled sense code
Nov  4 20:54:04 mediaserver kernel: [10893.180349] sd 3:0:1:0: [sdc]
Nov  4 20:54:04 mediaserver kernel: [10893.180353] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
Nov  4 20:54:04 mediaserver kernel: [10893.180356] sd 3:0:1:0: [sdc]
Nov  4 20:54:04 mediaserver kernel: [10893.180359] Sense Key : Medium Error [current] [descriptor]
Nov  4 20:54:04 mediaserver kernel: [10893.180371] Descriptor sense data with sense descriptors (in hex):
Nov  4 20:54:04 mediaserver kernel: [10893.180373]         72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00
Nov  4 20:54:04 mediaserver kernel: [10893.180384]         af 83 3f f8
Nov  4 20:54:04 mediaserver kernel: [10893.180389] sd 3:0:1:0: [sdc]
Nov  4 20:54:04 mediaserver kernel: [10893.180393] Add. Sense: Unrecovered read error - auto reallocate failed
Nov  4 20:54:04 mediaserver kernel: [10893.180396] sd 3:0:1:0: [sdc] CDB:
Nov  4 20:54:04 mediaserver kernel: [10893.180398] Read(16): 88 00 00 00 00 00 af 83 3f f8 00 00 00 08 00 00
Nov  4 20:54:04 mediaserver kernel: [10893.180412] end_request: I/O error, dev sdc, sector 2944614392
Nov  4 20:54:04 mediaserver kernel: [10893.180431] ata4: EH complete

kern.logไฟล์อยู่ที่ประมาณ 33MB ส่วนใหญ่เต็มไปด้วยความผิดพลาดดังกล่าวซ้ำและภาคไม่ปรากฏที่จะแตกต่างใด ๆ ในข้อความซ้ำ

ขณะนี้ฉันกำลังใช้คำสั่งต่อไปนี้บนดิสก์ที่ไม่ได้ประกอบเข้าไปเพื่อทดสอบและพยายามแยกแยะปัญหาใด ๆ ที่ดิสก์อาจมี ฉันอยู่ประมาณ 12 ชั่วโมงและคาดว่าจะใช้เวลาอีก 24/48 ชั่วโมงเนื่องจากดิสก์มีขนาดใหญ่มาก:

e2fsck -c -c -p -v /dev/sdc1

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

อัปเดตด่วน!

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

Nov 11 08:29:05 mediaserver kernel: [211822.287758] EXT4-fs (sdc1): warning: mounting fs with errors, running e2fsck is recommended
Nov 11 08:29:05 mediaserver kernel: [211822.301699] EXT4-fs (sdc1): mounted filesystem with ordered data mode. Opts: errors=remount-ro

กำลังพยายามอ่านเซกเตอร์ด้วยตนเอง:

sudo dd count=1 if=/dev/sdc of=/dev/null skip=2944614392
dd: reading ‘/dev/sdc’: Input/output error
0+0 records in
0+0 records out
0 bytes (0 B) copied, 5.73077 s, 0.0 kB/s

พยายามเขียนถึงมัน:

sudo dd count=1 if=/dev/zero of=/dev/sdc seek=2944614392
dd: writing to ‘/dev/sdc’: Input/output error
1+0 records in
0+0 records out
0 bytes (0 B) copied, 2.87869 s, 0.0 kB/s

ทั้งสองมีค่าเป็นReallocated_Sector_Ct0 ที่เหลืออยู่

ไดรฟ์เข้าสู่สถานะสลีปบ่อยครั้ง ตอนนี้ฉันคิดว่านี่อาจเป็นปัญหาระบบไฟล์หรือไม่ ฉันไม่ได้ 100%


4
เป็นสัญญาณเกือบแน่นอน / / เพื่อให้แน่ใจว่าการสำรองข้อมูลของคุณเป็นไปตามลำดับจากนั้นตรวจสอบฮาร์ดแวร์ของคุณ
Shadur

อืมมม พวกมันล้าสมัยนิดหน่อย แต่พวกมันอยู่ตรงนั้นโดยไม่คำนึงถึง น่าผิดหวังมากเพราะไดรฟ์นี้แทนที่ไดรฟ์หนึ่งที่มีข้อผิดพลาดอื่น
MrNorm

ดิสก์ล้มเหลวโปรดดูคำถามและคำตอบที่ฉันได้กล่าวถึงวิธีดำเนินการต่อ: unix.stackexchange.com/search?q=user%3A7453+hdat
slm

2
... หากไดรฟ์นี้แทนที่ไดรฟ์ที่ชำรุดแสดงว่ามีความเป็นไปได้ที่จะเป็นคอนโทรลเลอร์มากกว่าไดรฟ์
Shadur

คำตอบ:


17

เซ็กเตอร์ที่ไม่ดีมักจะบ่งบอกถึงความล้มเหลวของ HDD ในความเป็นจริงเมื่อคุณเห็นข้อผิดพลาดของ I / O เช่นนี้คุณอาจสูญเสีย / เสียหายบางส่วนของข้อมูล ทำการสำรองข้อมูลถ้าคุณยังไม่ได้ทำการทดสอบด้วยตนเองsmartctl -t long /dev/diskและตรวจสอบข้อมูลสsmartctl -a /dev/diskมาร์ท รับการเปลี่ยนถ้าคุณทำได้

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


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

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

2
ข้อผิดพลาดในการอ่านอาจถูกมองเห็นสำหรับระบบไฟล์ด้วยเหตุผลบางอย่างที่มีขนาดใหญ่กว่าดิสก์จริง
Thorbjørn Ravn Andersen

@ frostschutz ความหมายของGet a replacement if you can.อะไร? คุณหมายถึงแทนที่ดิสก์หรือไม่
เครื่องบิน

10

ในการทำให้ไดรฟ์ทำการจัดสรรเซกเตอร์ใหม่โดยปกติแล้วคุณต้องเขียนอะไรบางอย่างลงไป อย่างไรก็ตามdd( D ISK D estroyer) ไม่ทำงานเสมอและไม่ปลอดภัยมาก: ถ้าคุณสับสนskipและseekตัวเลือกคุณสามารถยิงตัวเองในการเดินเท้าโดยskippingNบล็อกแรกของ/dev/zeroและการเขียนบล็อกจากการที่ "ชดเชย" ซึ่งเป็นมากกว่า 0 ภาคของฮาร์ดดิสก์ของคุณ

หากคุณรู้ว่าคุณต้องการบังคับให้เซกเตอร์ถูกเขียนทับด้วยศูนย์คุณควรใช้hdparm:

% sudo hdparm --read-sector 833192656 /dev/sda
/dev/sda:
reading sector 833192656: FAILED: Input/output error

ใช่ภาค 833192656 ก็ล้มเหลวในการทดสอบด้วยเช่นกัน ในการเขียนเลขศูนย์ให้ใช้--write-sector:

% sudo hdparm --write-sector 833192656 /dev/sda
/dev/sda:
Use of --write-sector is VERY DANGEROUS.
You are trying to deliberately overwrite a low-level sector on the media.
This is a BAD idea, and can easily result in total data loss.
Please supply the --yes-i-know-what-i-am-doing flag if you really want this.
Program aborted.

เป็นป้องกันที่hdparmไม่ได้โดดเขียนอะไรจนกว่าคุณจะผ่านการ--yes-i-know-what-i-am-doingสลับไปที่hdparm:

% sudo hdparm --yes-i-know-what-i-am-doing --write-sector 833192656 /dev/sda
/dev/sda:
re-writing sector 833192656: succeeded
% sudo hdparm --read-sector 833192656 /dev/sda                              

/dev/sda:
reading sector 833192656: succeeded
0000 0000 0000 0000 0000 0000 0000 0000
[      ... more zeroes here...        ]
0000 0000 0000 0000 0000 0000 0000 0000

%

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

7

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

คุณสามารถเรียกใช้badblocks -nบนไดรฟ์เพื่ออ่านและเขียนซ้ำทุกภาคส่วนหรือในกรณีของคุณเนื่องจากคุณทราบจำนวนภาคที่มีปัญหาคุณสามารถใช้ddเพื่อเขียนเลขศูนย์ คุณสามารถตรวจสอบสถิติ SMART smartctl -aได้ คุณควรเห็นจำนวนการจัดสรรใหม่ที่รอดำเนินการระบุจำนวนภาคที่ไม่สามารถอ่านได้และหลังจากพยายามเขียนภาคส่วนจำนวนนี้จะลดลง จำนวนเซกเตอร์ที่จัดสรรใหม่อาจเพิ่มขึ้นซึ่งในกรณีนี้มันไม่ดีทางกายภาพและถูกแมปไปยังพูลสำรองและนี่อาจเป็นสัญญาณว่าไดรฟ์กำลังจะออกไป ถ้าไม่เช่นนั้นมันก็แค่สัญญาณรบกวนและควรจะดีตอนนี้

ลองอ่านภาคก่อน:

dd count=1 if=/dev/sda of=/dev/null skip=nnnn

หากไม่สำเร็จแสดงว่าคุณมีหมายเลขถูกต้องแล้วคุณสามารถลบออกด้วย:

dd count=1 if=/dev/zero of=/dev/sda seek=nnnn

ตรวจสอบอีกครั้งว่าคุณพิมพ์คำสั่งทุกประการก่อนกดปุ่ม Enter


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

ไดรฟ์ของคุณไม่รองรับ SMART ด้วยเหตุผลบางอย่างหรือทำไมถึงยังไม่ได้ตรวจสอบ
frostschutz

1
@frostschutz "ในทั้งสองจำนวน Reallocated_Sector_Ct ยังคงเป็น 0" ดูเหมือนว่า OP ได้ตรวจสอบสมาร์ทแล้ว
CVn

@MrNorm โปรดเพิ่มsmartctl -aผลลัพธ์แบบเต็มให้กับคำถามของคุณ
psusi

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