|
Запишу здесь свои эксперименты с софтверным рейдом - эмуляция сбоя и смена одного из дисков "на лету". Исходные данные:
- относительно старый сервер с набортным SCSI-адаптером LSI Logic / Symbios Logic 53c1010 (1000:0021, subsystem 103c:60a0);
- hot-swap корзина;
- пара винчестеров на 18 гб;
- свежепоставленный и обновлённый Server4.0.1, ядро 2.6.18-ovz-rhel-alt2.M40.5
Винчестеры побиты на 3 раздела, на которых подняты raid1: 1 - под своп, 2 - под корень, 3 - под LVM, там еще три раздела (usr, home, var). Всё настроено, крутится, работает. Итак, эмуляция сбоя: запускаем stress для видимости интенсивной работы (в т.ч. по отжиранию памяти и использованию свопа) и выдёргиваем из корзины один из дисков. Система уходит в ступор на полминуты, пытаясь осознать, что с ней произошло, после чего отвисает и разражается руганью в логах на испорченные рейды и IO errors. Работоспособность системы ничуть не нарушена. В /proc/mdstat исчезнувшие разделы помечены как fault, а устройства в системе остались.
Теперь попробуем вновь ввести этот диск в работу:
удаляем записи об сбойных разделах из рейдов. Если этого не сделать, то вновь подключенный диск сменит своё имя устройства.
mdadm /dev/md0 --remove /dev/sdb1 mdadm /dev/md1 --remove /dev/sdb2 mdadm /dev/md2 --remove /dev/sdb3
удаляем из системы отсутствующее физически устройство: echo "1" > /sys/block/sdb/device/delete
при этом пропадают /dev/sdb*. Если этого не проделать, нижеследующее сканирование не сработает. Втыкаем диск обратно в корзину, прислушиваясь к его раскрутке, просим драйвер пересканировать шину: echo "- - -" > /sys/class/scsi_host/host0/scan
после некоторой задержки на сканирование устройства вновь объявляются, а в логах видим протокол сканирования, как при старте системы. Иногда это сканирование срабатывает не с первого раза, отваливаясь по полуминутному таймауту, и тогда его можно попробовать повторить. Загадочные "- - -" суть: "$channel $id $lun". Прочерки просто означают все_сразу вместо конкретного значения. (тут для надёжности непопадания в рейд кривых данных можно обнулить свежеобъявленные разделы, но вообще не обязательно) (тут в случае нового диска мы должны создать на нём разделы по числу и размеру имеющихся, с типом FD) Добавляем в рейды новые разделы: mdadm /dev/md0 --add /dev/sdb1 mdadm /dev/md1 --add /dev/sdb2 mdadm /dev/md2 --add /dev/sdb3
наблюдаем логи, наблюдаем /proc/mdstat. После возможной синхронизации мы имеем рейды с полностью исправными членами. Источник http://www.altlinux.org/Replace_disk_online
|