https://guust.tuxes.nl/~bas/wordpress/?p=12
Имеем: диск /dev/sda и раздел /dev/sda3, входящий в degraded RAID-1 массив /dev/md2. Проблема заключается в том, что на 49% сборки массива, вылетает ошибка ввода-вывода:
ata1.00: exception Emask 0x0 SAct 0x7fffffff SErr 0x0 action 0x0
ata1.00: irq_stat 0x40000008
ata1.00: cmd 60/80:58:d1:6a:08/00:00:2d:00:00/40 tag 11 ncq 65536 in
res 51/40:00:01:6b:08/bc:00:2d:00:00/40 Emask 0x409 (media error)
ata1.00: status: { DRDY ERR }
ata1.00: error: { UNC }
ata1.00: configured for UDMA/133
ata1: EH complete
ata1.00: exception Emask 0x0 SAct 0x7fffffff SErr 0x0 action 0x0
ata1.00: irq_stat 0x40000008
ata1.00: cmd 60/80:98:d1:6a:08/00:00:2d:00:00/40 tag 19 ncq 65536 in
res 41/40:00:01:6b:08/bc:00:2d:00:00/40 Emask 0x409 (media error)
ata1.00: status: { DRDY ERR }
ata1.00: error: { UNC }
ata1.00: configured for UDMA/133
ata1: EH complete
ata1.00: exception Emask 0x0 SAct 0x7fffffff SErr 0x0 action 0x0
ata1.00: irq_stat 0x40000008
ata1.00: cmd 60/80:58:d1:6a:08/00:00:2d:00:00/40 tag 11 ncq 65536 in
res 41/40:00:01:6b:08/bc:00:2d:00:00/40 Emask 0x409 (media error)
ata1.00: status: { DRDY ERR }
ata1.00: error: { UNC }
ata1.00: configured for UDMA/133
ata1: EH complete
ata1.00: exception Emask 0x0 SAct 0x7fffffff SErr 0x0 action 0x0
ata1.00: irq_stat 0x40000008
ata1.00: cmd 60/80:98:d1:6a:08/00:00:2d:00:00/40 tag 19 ncq 65536 in
res 41/40:00:01:6b:08/bc:00:2d:00:00/40 Emask 0x409 (media error)
ata1.00: status: { DRDY ERR }
ata1.00: error: { UNC }
ata1.00: configured for UDMA/133
ata1: EH complete
ata1.00: exception Emask 0x0 SAct 0x7fffffff SErr 0x0 action 0x0
ata1.00: irq_stat 0x40000008
ata1.00: cmd 60/80:58:d1:6a:08/00:00:2d:00:00/40 tag 11 ncq 65536 in
res 41/40:00:01:6b:08/bc:00:2d:00:00/40 Emask 0x409 (media error)
ata1.00: status: { DRDY ERR }
ata1.00: error: { UNC }
ata1.00: configured for UDMA/133
ata1: EH complete
ata1.00: exception Emask 0x0 SAct 0x7fffffff SErr 0x0 action 0x0
ata1.00: irq_stat 0x40000008
ata1.00: cmd 60/80:98:d1:6a:08/00:00:2d:00:00/40 tag 19 ncq 65536 in
res 41/40:00:01:6b:08/bc:00:2d:00:00/40 Emask 0x409 (media error)
ata1.00: status: { DRDY ERR }
ata1.00: error: { UNC }
ata1.00: configured for UDMA/133
sd 0:0:0:0: SCSI error: return code = 0x08000002
sda: Current [descriptor]: sense key: Medium Error
Add. Sense: Unrecovered read error - auto reallocate failed
Descriptor sense data with sense descriptors (in hex):
72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00
2d 08 6b 01
end_request: I/O error, dev sda, sector 755526401
ata1: EH complete
SCSI device sda: 1465149168 512-byte hdwr sectors (750156 MB)
sda: Write Protect is off
sda: Mode Sense: 00 3a 00 00
SCSI device sda: drive cache: write back
SCSI device sda: 1465149168 512-byte hdwr sectors (750156 MB)
sda: Write Protect is off
sda: Mode Sense: 00 3a 00 00
SCSI device sda: drive cache: write back
ata1.00: exception Emask 0x0 SAct 0x1 SErr 0x0 action 0x0
ata1.00: irq_stat 0x40000008
ata1.00: cmd 60/08:00:01:6b:08/00:00:2d:00:00/40 tag 0 ncq 4096 in
res 41/40:00:01:6b:08/bc:00:2d:00:00/40 Emask 0x409 (media error)
ata1.00: status: { DRDY ERR }
ata1.00: error: { UNC }
ata1.00: configured for UDMA/133
ata1: EH complete
SCSI device sda: 1465149168 512-byte hdwr sectors (750156 MB)
sda: Write Protect is off
sda: Mode Sense: 00 3a 00 00
SCSI device sda: drive cache: write back
ata1.00: exception Emask 0x0 SAct 0x1 SErr 0x0 action 0x0
ata1.00: irq_stat 0x40000008
ata1.00: cmd 60/08:00:01:6b:08/00:00:2d:00:00/40 tag 0 ncq 4096 in
res 41/40:00:01:6b:08/bc:00:2d:00:00/40 Emask 0x409 (media error)
ata1.00: status: { DRDY ERR }
ata1.00: error: { UNC }
ata1.00: configured for UDMA/133
ata1: EH complete
SCSI device sda: 1465149168 512-byte hdwr sectors (750156 MB)
sda: Write Protect is off
sda: Mode Sense: 00 3a 00 00
SCSI device sda: drive cache: write back
ata1.00: exception Emask 0x0 SAct 0x1 SErr 0x0 action 0x0
ata1.00: irq_stat 0x40000008
ata1.00: cmd 60/08:00:01:6b:08/00:00:2d:00:00/40 tag 0 ncq 4096 in
res 41/40:00:01:6b:08/bc:00:2d:00:00/40 Emask 0x409 (media error)
ata1.00: status: { DRDY ERR }
ata1.00: error: { UNC }
ata1.00: configured for UDMA/133
ata1: EH complete
SCSI device sda: 1465149168 512-byte hdwr sectors (750156 MB)
sda: Write Protect is off
sda: Mode Sense: 00 3a 00 00
SCSI device sda: drive cache: write back
ata1.00: exception Emask 0x0 SAct 0x1 SErr 0x0 action 0x0
ata1.00: irq_stat 0x40000008
ata1.00: cmd 60/08:00:01:6b:08/00:00:2d:00:00/40 tag 0 ncq 4096 in
res 41/40:00:01:6b:08/bc:00:2d:00:00/40 Emask 0x409 (media error)
ata1.00: status: { DRDY ERR }
ata1.00: error: { UNC }
ata1.00: configured for UDMA/133
ata1: EH complete
SCSI device sda: 1465149168 512-byte hdwr sectors (750156 MB)
sda: Write Protect is off
sda: Mode Sense: 00 3a 00 00
SCSI device sda: drive cache: write back
ata1.00: exception Emask 0x0 SAct 0x1 SErr 0x0 action 0x0
ata1.00: irq_stat 0x40000008
ata1.00: cmd 60/08:00:01:6b:08/00:00:2d:00:00/40 tag 0 ncq 4096 in
res 41/40:00:01:6b:08/bc:00:2d:00:00/40 Emask 0x409 (media error)
ata1.00: status: { DRDY ERR }
ata1.00: error: { UNC }
ata1.00: configured for UDMA/133
ata1: EH complete
SCSI device sda: 1465149168 512-byte hdwr sectors (750156 MB)
sda: Write Protect is off
sda: Mode Sense: 00 3a 00 00
SCSI device sda: drive cache: write back
ata1.00: exception Emask 0x0 SAct 0x1 SErr 0x0 action 0x0
ata1.00: irq_stat 0x40000008
ata1.00: cmd 60/08:00:01:6b:08/00:00:2d:00:00/40 tag 0 ncq 4096 in
res 41/40:00:01:6b:08/bc:00:2d:00:00/40 Emask 0x409 (media error)
ata1.00: status: { DRDY ERR }
ata1.00: error: { UNC }
ata1.00: configured for UDMA/133
sd 0:0:0:0: SCSI error: return code = 0x08000002
sda: Current [descriptor]: sense key: Medium Error
Add. Sense: Unrecovered read error - auto reallocate failed
Descriptor sense data with sense descriptors (in hex):
72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00
2d 08 6b 01
end_request: I/O error, dev sda, sector 755526401
ata1: EH complete
raid1: sda: unrecoverable I/O read error for block 742915328
SCSI device sda: 1465149168 512-byte hdwr sectors (750156 MB)
sda: Write Protect is off
sda: Mode Sense: 00 3a 00 00
SCSI device sda: drive cache: write back
md: md2: sync done.
В сжатом виде:
dmesg | egrep 'I/O.*sector'
end_request: I/O error, dev sda, sector 755526401
end_request: I/O error, dev sda, sector 755526401
То есть сектор не может быть считан.
Перезагружаемся в LiveCD или FastVPS Rescue и делаем следующее для проверки поднят ли mdraid:
ls -la /dev/md2
brw-rw---- 1 root disk 9, 2 2010-05-07 19:16 /dev/md2
Останавливаем RAID массив, чтобы освободить /dev/sda:
/etc/init.d/mdadm-raid stop
ls -la /dev/md2
ls: cannot access /dev/md2: No such file or directory
Смотрим состояние реаллокетед секторов ДО стирания сектора:
smartctl --all /dev/sda | grep reallo -i
5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 0
196 Reallocated_Event_Count 0x0032 100 100 000 Old_age Always - 0
ВНИМАНИЕ!! СЛЕДУЮЩЕЙ КОМАНДОЙ ВЫ МОЖЕТЕ УНИЧТОЖИТЬ ДИСК НАПРОЧЬ:
hdparm --write-sector 755526401 /dev/sda
После этого пробуем прочесть сектор:
hdparm --read-sector 755526401 /dev/sda
Должно выдать кучу нулей.
Теперь смотрим состояние SMART (у меня оно не изменилось, хотя я ожидал увеличения числа Reallocated_Sector_Ct):
smartctl --all /dev/sda | grep reallo -i
5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 0
196 Reallocated_Event_Count 0x0032 100 100 000 Old_age Always - 0
Запускаем массив:
/etc/init.d/mdadm-raid start
Assembling MD array md0...done (started [2/2]).
Assembling MD array md1...done (started [2/2]).
Assembling MD array md2...done (initialising [1/2)]).
И ждем, пока будет найден стертый напрочь нами сектор.
Собираем RAID повторно:
mdadm /dev/md2 -a /dev/sdb3
Если сборка снова обрывается на каком-то секторе и он отличается от того, что мы стерли на прошлом шаге, то повторяем операцию для него с нуля и продолжаем.
Тестируем результат fsck:
fsck.ext3 -f /dev/md2
У меня в итоге все успешно отзеркалилось и диск получилось заменить :)
Еще один вариант решения
Конечно, синхронизировать снова и снова 1.5 тб массивы для поиска очередного битого сектора крайне накладно (синхронизация в свою очередь сбивается от единственного битого сектора) и долго, поэтому более оптимален вариант найти все битые сектора за раз и перетереть их.
Для этого воспользуемся тулзой
ddrescue:
apt-get install -y ddrescue screen
screen
После этого очищаем dmesg (чтобы потом из него извлечь номера битых секторов) и запускаем копирование с битого диска в /dev/null:
dmesg -c
ddrescue /dev/sda /dev/null
В ответ нам будет показано красивое окошко:
Press Ctrl-C to interrupt
rescued: 6056 MB, errsize: 0 B, current rate: 115 MB/s
ipos: 6056 MB, errors: 0, average rate: 114 MB/s
opos: 6056 MB
Copying data...
Теперь ждем, пока копирование будет закончено и потом выцепляем из dmesg номера битых секторов, как я показывал выше и перетираем их.