FastNetMon

Thursday 6 May 2010

Что делать если в dmesg - reallocate failed? НЕ ПОВТОРЯТЬ ОПАСНО ДЛЯ ЖИЗНИ!

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 номера битых секторов, как я показывал выше и перетираем их.

2 comments :

  1. данные не уплыли ? =)

    ReplyDelete
  2. Лишь 4 сектора по 512к пришлось стереть, но fsck все пофиксил :)

    ReplyDelete

Note: only a member of this blog may post a comment.