Вот уже несколько лет мы запускаем программный RAID1 на старом Gentoo с пользовательским Linux 2.6.31. RAID состоит из 2 жестких дисков по 4 раздела в каждом. За последние годы случалось, что примерно 3-4 раза диск выбрасывался из массива. Но каждый раз badblocks
не сообщал об ошибке, и я смог повторно активировать диск вот так
mdadm /dev/md3 -r /dev/sda3
mdadm /dev/md3 -a /dev/sda3
На этот раз ситуация иная: mdadm
сообщил о 2 неисправных разделах за последние 24 часа, оба на одном диске sda
. Я снова побежал badblocks
безуспешно: сообщалось о 0 сбойных блоках. Если я попытаюсь добавить неисправный диск обратно в массив, он каждый раз ломается с одной и той же ошибкой:
Mar 25 23:09:10 xen0 kernel: ata1.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
Mar 25 23:09:10 xen0 kernel: ata1.00: irq_stat 0x40000001
Mar 25 23:09:10 xen0 kernel: ata1.00: cmd ea/00:00:00:00:00/00:00:00:00:00/a0 tag 0
Mar 25 23:09:10 xen0 kernel: res 51/04:00:38:df:f7/00:00:00:00:00/a7 Emask 0x1 (device error)
Mar 25 23:09:10 xen0 kernel: ata1.00: status: { DRDY ERR }
Mar 25 23:09:10 xen0 kernel: ata1.00: error: { ABRT }
Mar 25 23:09:10 xen0 kernel: ata1.00: configured for UDMA/133
Mar 25 23:09:10 xen0 kernel: ata1: EH complete
Mar 25 23:09:10 xen0 kernel: end_request: I/O error, dev sda, sector 18297870
Mar 25 23:09:10 xen0 kernel: md: super_written gets error=-5, uptodate=0
Mar 25 23:09:10 xen0 kernel: md: md3: recovery done.
Mar 25 23:09:10 xen0 kernel: RAID1 conf printout:
Mar 25 23:09:10 xen0 kernel: --- wd:1 rd:2
Mar 25 23:09:10 xen0 kernel: disk 0, wo:1, o:0, dev:sda3
Mar 25 23:09:10 xen0 kernel: disk 1, wo:0, o:1, dev:sdb3
Mar 25 23:09:10 xen0 kernel: RAID1 conf printout:
Mar 25 23:09:10 xen0 kernel: --- wd:1 rd:2
Mar 25 23:09:10 xen0 kernel: disk 1, wo:0, o:1, dev:sdb3
Сектор всегда один и тот же: 18297870
. Если я проверю вывод smartctl -a /dev/sda
он не показывает никаких перераспределенных секторов, поэтому я подумал, что мог бы принудительно перераспределить с помощью метода, который я нашел Вот.
hdparm --read-sector 18297870 /dev/sda
hdparm --write-sector 18297870 --yes-i-know-what-i-am-doing /dev/sda
Но с помощью приведенных выше команд диск вообще не сообщает об ошибках и, следовательно, не перераспределяет сектор:
smartctl -a /dev/sda | grep -i reall
5 Reallocated_Sector_Ct 0x0033 200 200 140 Pre-fail Always - 0
196 Reallocated_Event_Count 0x0032 200 200 000 Old_age Always - 0
Я искал в Google status: { DRDY ERR }
сообщение, и некоторые говорят, что это может быть ошибка ядра. Но тогда я удивляюсь, почему это стало происходить именно сейчас. За последние годы в системе не было никаких изменений.
Но есть одна вещь, которая меня все еще беспокоит: smartctl -a /dev/sda
также сообщает о некоторых ошибках в журналах. Всегда одна и та же ошибка:
Error 15 occurred at disk power-on lifetime: 39971 hours (1665 days + 11 hours)
When the command that caused the error occurred, the device was active or idle.
After command completion occurred, registers were:
ER ST SC SN CL CH DH
-- -- -- -- -- -- --
04 51 00 38 df f7 a7
Commands leading to the command that caused the error were:
CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name
-- -- -- -- -- -- -- -- ---------------- --------------------
ea 00 00 00 00 00 00 08 35d+12:17:45.571 FLUSH CACHE EXT
61 80 f0 0e 96 2d 00 08 35d+12:17:44.033 WRITE FPDMA QUEUED
61 80 e8 8e 95 2d 00 08 35d+12:17:44.033 WRITE FPDMA QUEUED
61 80 e0 0e 95 2d 00 08 35d+12:17:44.033 WRITE FPDMA QUEUED
61 80 d8 8e 94 2d 00 08 35d+12:17:44.033 WRITE FPDMA QUEUED
Для меня все это не имеет смысла: если диск действительно неисправен, то почему я могу успешно читать и записывать в сектор, в котором каждый раз происходит сбой ресинхронизации RAID? И почему диск сначала не пытается перераспределить битый сектор, если действительно обнаруживает ошибку?
Если в соответствии с вашим комментарием ошибка возникает все время в одном и том же секторе, чем проблема с диском, по какой-то причине диск прерывается при записи туда (на основе интеллектуального журнала ошибок), и либо он не может перераспределить его, либо для по неизвестным причинам он решает не перераспределять.
На диске SAS вы можете использовать явную команду для перераспределения сектора, хотя я не знаю такой команды в SATA.
Единственный вариант - попробовать явную запись в сектор при установке очень большого тайм-аута на диск. Вы можете контролировать тайм-аут диска, установив / sys / block / sdX / device / eh_timeout на большое значение, вплоть до 600 секунд (5 минут). Это может помочь записать неправильное местоположение и избежать прерывания запроса каждый раз.
У вас есть RAID1, поэтому у вас не будет потери данных. Я бы заменил диск и сделал еще одну ресинхронизацию.