Ноя 05 2011

Восстановление сбойных секторов в UbuntuЖена вчера пожаловалась на то, что комп с убунтой дико тормозит. Причем ладно бы он просто тормозил, так ведь не дает ей нового доктора Хаоса посмотреть. Утилиты 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 называется Дисковая утилита)

Дисковая утилита в Ubuntu

В ней тоже видно состояние диска

Состояние диска в дисковой утилите в Ubuntu

Если ее нет, устанавливаем как обычно
# apt-get install gnome-disk-utility

Запускаем либо из консоли, набрав там

# sudo palimpsest
либо из меню: Система > Администрирование > Дисковая утилита

Запуск дисковой утилиты в Ubuntu

Удачи и долгой жизни вам и вашим винтам!

Поделиться:

Автор: JohnnyТэги: , , , , , , , , ,


One Response to “Восстановление сбойных секторов на диске в Ubuntu”

  1. 1. Denis Mikhlevich Says:

    Отличная статья, которая помогла мне в решении проблемы. Я столкнулся с проблемой, что у меня опять потерялся один диск из рейда mdadm. Причем он перестал добавляться, т.к. на оставшемся диске появились нечитаемые сектора. Как только процесс сборки рейда доходил до сбойного сектора, происходила запись в лог о номере сектора и процесс сборки останавливался. Я забивал сбойный сектор нулями и передобавлял второй жесткий в рейд. Сборка начиналась сначала, до момента пока не встретится следующий нечитаемый сектор. Всего таких секторов оказалось 5 шт.

Оставьте свой комментарий

Нужно войти в систему, чтобы оставлять комментарии.



Блог саратовского админа   

При использовании материалов сайта на других ресурсах прошу оставлять прямую ссылку на оригинал статьи.