Как вправить мозги винту
Опубликовано: | Read in English | Leer en español | Больше записей о hardware magic
Я тут на днях спас пару своих винтов в некотором смысле шаманским способом.
Симптомы были практически идентичны: во время загрузки система вываливала в терминал тучу ошибок, и такие же ошибки регулярно сыпались в логи. В общем, наблюдалось что-то подобное:
Mar 31 07:31:31 rohan kernel: [ 1.640757] ata5.00: exception Emask 0x0 SAct 0x1 SErr 0x0 action 0x0 Mar 31 07:31:31 rohan kernel: [ 1.641114] ata5.00: irq_stat 0x40000008 Mar 31 07:31:31 rohan kernel: [ 1.641317] ata5.00: failed command: READ FPDMA QUEUED Mar 31 07:31:31 rohan kernel: [ 1.641582] ata5.00: cmd 60/08:00:50:00:02/00:00:00:00:00/40 tag 0 ncq 4096 in Mar 31 07:31:31 rohan kernel: [ 1.641582] res 41/40:00:52:00:02/00:00:00:00:00/40 Emask 0x409 (media error) <F> Mar 31 07:31:31 rohan kernel: [ 1.642365] ata5.00: status: { DRDY ERR } Mar 31 07:31:31 rohan kernel: [ 1.642570] ata5.00: error: { UNC } Mar 31 07:31:31 rohan kernel: [ 1.650046] ata5.00: configured for UDMA/133 Mar 31 07:31:31 rohan kernel: [ 1.650057] sd 4:0:0:0: [sdb] Unhandled sense code Mar 31 07:31:31 rohan kernel: [ 1.650061] sd 4:0:0:0: [sdb] Mar 31 07:31:31 rohan kernel: [ 1.650064] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE Mar 31 07:31:31 rohan kernel: [ 1.650067] sd 4:0:0:0: [sdb] Mar 31 07:31:31 rohan kernel: [ 1.650069] Sense Key : Medium Error [current] [descriptor] Mar 31 07:31:31 rohan kernel: [ 1.650075] Descriptor sense data with sense descriptors (in hex): Mar 31 07:31:31 rohan kernel: [ 1.650078] 72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00 Mar 31 07:31:31 rohan kernel: [ 1.650094] 00 02 00 52 Mar 31 07:31:31 rohan kernel: [ 1.650101] sd 4:0:0:0: [sdb] Mar 31 07:31:31 rohan kernel: [ 1.650104] Add. Sense: Unrecovered read error - auto reallocate failed Mar 31 07:31:31 rohan kernel: [ 1.650108] sd 4:0:0:0: [sdb] CDB: Mar 31 07:31:31 rohan kernel: [ 1.650110] Read(10): 28 00 00 02 00 50 00 00 08 00 Mar 31 07:31:31 rohan kernel: [ 1.650123] end_request: I/O error, dev sdb, sector 131154 Mar 31 07:31:31 rohan kernel: [ 1.650416] Buffer I/O error on device sdb2, logical block 1 Mar 31 07:31:31 rohan kernel: [ 1.650711] ata5: EH complete
В то же время smartctl не выдавал никаких серьёзных косяков. Единственное, что меня смущало, выглядело как-то так:
197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 1 199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 3
Ненулевые значения в «Pending sectors» означают, что винт не может записать сектор и не может переместить его, поскольку прочитать его тоже по какой-то причине невозможно. Ненулевое значение в «CRC errors» означает, что вероятно что-то не так с каналом связи между собственно винтом и матерью. Ну это одна из возможностей, которая может объясняться, например, глючным кабелем.
Я решил проверить, на самом ли деле винт загнулся, или он всё ещё жив. Самый простой способ сделать это весьма радикален и разрушителен, однако он просто работает. Я имею в виду, что можно перезаписать нафиг весь винт каким-нибудь мусором, например, просто нулями. В случае, если винт мёртв, сделать это не удастся. Ну а поскольку данный конкретный диск пылился уже больше двух лет, и я смирился с потерей данных, я сделал
# dd if=/dev/zero of=/dev/sdb bs=16M
… и через 5 часов мой 2-терабайтный винт был как новенький.
После этой процедуры ядро успокоилось и в логах стало чисто. Пара дней работы с этим винтом показали. что с ним всё в порядке, и я могу сделать такую же подлость с другим диском, который недавно отвалился от зеркального рейда. Сказано–сделано, и на следующее утро я получил ещё один девственно чистый диск и столь же чистые логи. После этого не составило проблемы восстановить на нём таблицу разделов и присобачить его обратно в зеркало. К настоящему моменту он пашет уже больше недели, и я не заметил каких-либо признаков деградации зеркала или нестабильной работы самого винта. Хотя, конечно, слишком рано ещё о чём-то говорить, посмотрим, что случится хотя бы через месяц. Ну и вообще-то, я бы конечно же проверил бы оба винта какой-нибудь шнягой типа whdd или типа того… Ну, когда-нибудь, наверное…