как заставить mdadm синхронизироваться с устройством после восстановления raid6 и как получить количество ошибок?

979
Max-Julian Pogner

Вопрос

После того, как на компонентном устройстве произошел неожиданный переворот, и после того, как raid6 repairбыл успешно выполнен на raid-устройстве, как заставить mdadm синхронизировать изменения из буфера (?) Обратно на компонентное устройство?

А как следить, когда происходит такой ремонт?

Настройка

Для тестирования я выполнил следующую настройку (используя bash на Debian Jessie):

sudo -i mkdir testbed cd testbed for i in 1 2 3 4; do dd if=/dev/zero of=disk$i bs=1M count=4 losetup loop$i disk$i done mdadm --create /dev/md/test --level=6 --raid-devices=4 /dev/loop mkfs.vfat /dev/md/test # Note: has easier hexdump than ext mkdir mounted mount /dev/md/test mounted echo "Hello World!" > mounted/message 

Неожиданный переворот

Тестовый сценарий предполагает, что некоторые биты на одном из компонентных устройств изменяются, когда устройство raid не работает.

umount mounted mdadm --stop /dev/md/test # Note: does show 'H' from 'Hello World!' at position 0x00107a00 hexdump -C /dev/loop1 # manipulate some bits in first component device at 0x00107a00 dd if=/dev/zero bs=1 count=1 seek=1079808 of=/dev/loop1 # Note: now changed to ".ello World!" at position 0x00107a00 hexdump -C /dev/loop1 

Ремонт

Теперь снова запустите raid-устройство и попытайтесь убедить mdadm обнаружить и исправить неисправные биты на компонентном устройстве.

сборка и монтаж

mdadm --assemble /dev/md/test /dev/loop mount /dev/md/test mounted # dmesg does not show error # hexdump still shows faulty bits 

это ожидается.

чтение неисправных секторов

cat mounted/message # always reads the non-faulty message # nothing in dmesg # no raid6 related message in /var/log/syslog # /sys/block/md127/md/mismatch_cnt == 0 # hexdump still shows faulty bits 

к настоящему времени mdadm должен был обнаружить несоответствующую контрольную сумму, и большинством голосов определил, что / dev / loop1 неисправен. Но нигде нет предупреждений или ошибок об этом.

начать ремонт

echo repair > /sys/block/md127/md/sync_action sync # should be completely unrelated for this question # dmesg reports successful resync # /var/log/syslog replicates the dmesg messages # hexdump -C /dev/loop1 still shows faulty bits as 0x00107a00 

Mdadm наверняка уже заметил дефектные биты, но по какой-то причине не записал восстановленный кусок обратно на диск.

нужно остановить рейд устройства

Кажется необходимым остановить устройство raid (что делает файловую систему временно недоступной!), чтобы принудительно синхронизировать восстановленный кусок.

umount mounted mdadm --stop /dev/md/test 

наконец, hexdump, наконец, снова показывает правильное «H». но нет ни указания на неисправный блок в dmesg или syslog, ни на mismatch_cnt.

1

0 ответов на вопрос

Похожие вопросы