Жена вчера пожаловалась на то, что комп с убунтой дико тормозит. Причем ладно бы он просто тормозил, так ведь не дает ей нового доктора Хаоса посмотреть. Утилиты top и iotop ничего критичного не показали, пришлось лезть в логи. Попутно обругал старенький бесперебойник, за то что он не выдержал 10-минутного отключения света и «уронил» комп, а заодно и себя за то, что не вырубил комп сам. Но, как бы то ни было, что сделано, то сделано.
В /var/log/messages очень не понравилась строчка
[sdb] Add. Sense: Unrecovered read error - auto reallocate failed
Стало понятно, что винт такого обращения с собой не потерпел и начал «сыпаться».
Более полный лог из /var/log/messages:
kernel: [ 237.553123] ata6.00: configured for UDMA/100
kernel: [ 237.553161] ata6: EH complete
kernel: [ 239.373067] ata6.00: configured for UDMA/100
kernel: [ 239.373102] ata6: EH complete
kernel: [ 241.196966] ata6.00: configured for UDMA/100
kernel: [ 241.197000] ata6: EH complete
kernel: [ 243.005896] ata6.00: configured for UDMA/100
kernel: [ 243.005927] ata6: EH complete
kernel: [ 244.820846] ata6.00: configured for UDMA/100
kernel: [ 244.820878] ata6: EH complete
kernel: [ 246.637758] ata6.00: configured for UDMA/100
kernel: [ 246.637797] sd 5:0:0:0: [sdb] Unhandled sense code
kernel: [ 246.637801] sd 5:0:0:0: [sdb] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
kernel: [ 246.637808] sd 5:0:0:0: [sdb] Sense Key : Medium Error [current] [descriptor]
kernel: [ 246.637817] Descriptor sense data with sense descriptors (in hex):
kernel: [ 246.637821] 72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00.
kernel: [ 246.637842] 0f 9e 54 40.
kernel: [ 246.637850] sd 5:0:0:0: [sdb] Add. Sense: Unrecovered read error - auto reallocate failed
kernel: [ 246.637860] sd 5:0:0:0: [sdb] CDB: Read(10): 28 00 0f 9e 54 3f 00 00 08 00
kernel: [ 246.637918] ata6: EH complete
Чтение dmesq позволило узнать номер сбойного сектора:
[32690.514629] ata6.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
[32690.514639] ata6.00: BMDMA2 stat 0x6c0009
[32690.514648] ata6.00: failed command: READ DMA
[32690.514665] ata6.00: cmd c8/00:08:3f:54:9e/00:00:00:00:00/ef tag 0 dma 4096 in
[32690.514668] res 51/40:00:40:54:9e/00:00:00:00:00/ef Emask 0x9 (media error)
[32690.514676] ata6.00: status: { DRDY ERR }
[32690.514682] ata6.00: error: { UNC }
[32690.528582] ata6.00: configured for UDMA/100
[32690.528620] sd 5:0:0:0: [sdb] Unhandled sense code
[32690.528626] sd 5:0:0:0: [sdb] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[32690.528636] sd 5:0:0:0: [sdb] Sense Key : Medium Error [current] [descriptor]
[32690.528661] Descriptor sense data with sense descriptors (in hex):
[32690.528665] 72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00
[32690.528685] 0f 9e 54 40
[32690.528693] sd 5:0:0:0: [sdb] Add. Sense: Unrecovered read error - auto reallocate failed
[32690.528703] sd 5:0:0:0: [sdb] CDB: Read(10): 28 00 0f 9e 54 3f 00 00 08 00
[32690.528721] end_request: I/O error, dev sdb, sector 262034496
[32690.528765] ata6: EH complete
Проверить, действительно ли этот блок поврежден, можно при помощи hdparm:
# hdparm --read-sector 262034496 /dev/sdb
/dev/sdb:
reading sector 262034496: FAILED: Input/output error
Теперь пробуем перезаписать сбойный блок нулями (hdparm умеет обходить системные механизмы чтения/записи на диск):
# hdparm --write-sector 262034496 /dev/sdb
/dev/sdb:
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.
Утилита нас предупреждает о возможных последствиях и просит подтвердить наши серьезные намерения, запустив ее с параметром «—yes-i-know-what-i-am-doing» («да-я-понимаю-что-делаю«):
# hdparm --write-sector 262034496 --yes-i-know-what-i-am-doing /dev/sdb
/dev/sdb:
re-writing sector 262034496: succeeded
И еще раз проверяем данные в этом секторе:
# hdparm --read-sector 262034496 /dev/sdb
/dev/sdb:
reading sector 262034496: succeeded
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
Как видим, всё забито нулями.
Ну что же, работа компьютера резко ускорилась, теперь осталось провести тест поверхности
# smartctl -t long /dev/sdb
периодически поглядывая в логи выполнения
# smartctl -l selftest /dev/sdb
радуемся статусам
Completed without error
и с чистой совестью идем пить пиво 🙂
Кстати, для любителей графики есть замечательная утилита palimpsest из пакета gnome-disk-utility (в русской локализации Ubuntu называется Дисковая утилита)
В ней тоже видно состояние диска
Если ее нет, устанавливаем как обычно
# apt-get install gnome-disk-utility
Запускаем либо из консоли, набрав там
# sudo palimpsest
либо из меню: Система > Администрирование > Дисковая утилита
Удачи и долгой жизни вам и вашим винтам!