среда, апреля 29, 2009

Как чинить совсем развалившийся mdadm raid5

Недавно приключилась неприятность: в работащем raid5 в процессе rebuild'а после замены диска вылетел второй диск. Rebuild был завершен где-то на 90%. Ценные данные на массиве занимали только первую треть диска, а значит были теоретически спасены. Но raid не запускается, т.к. нет двух дисков. Как быть?

Рецепт спасения следующий:
0. Данные действия могут быть деструктивными для ваших данных. Настоятельно рекомендуется скопировать все диски, и эксперименты по восстановлению проводить на копии.
1. Проверить параметры старого raid. Для этого сделать mdadm -E на любой из имеющихся дисков.
2. Собрать raid в деградировавшем состоянии. Для этого выполнить:
mdadm --create /dev/md0 -n XXX -c YYY -l 5 -p ZZZ --assume-clean /dev/sda1 /dev/sdb1 /dev/sdc1 missing /dev/sde1
Здесь XXX - число дисков в raid, YYY - размер chunk'а, ZZZ - используемая геометрия, все эти параметры от старого raid'а выдает mdadm -E. Важно соблюсти порядок дисков таким же, какой был в оригинальном массиве, и поставить missing на месте именно сбойного диска.
3. Готово. Можно проверить целостность данных, и "доткнуть" оставшийся диск, чтобы запустить repair на восстановленный raid.

пятница, апреля 17, 2009

Как установить CentOS 5.3 на софтверный Partitionable RAID1

  1. Установить CentOS используя стандартный инсталлятор на диск sda. При разбивке диска оставить немного места (хотя бы один юнит) в самом хвосте диска незанятым.
  2. Загрузиться с диска в Rescue режим. Систему не искать и не монтировать.
  3. Собрать рейд:
    mdadm --create --level=1 --raid-devices=2 /dev/md_d0 /dev/sda missing
  4. Воткнуть /dev/sdb в получившийся рейд, чтобы он ребилдился:
    mdadm --add /dev/md_d0 /dev/sdb
    Убедиться, проверив /proc/mdstat, что рейд стал ребилдиться.
  5. Смонтировать руками систему в состояние, пригодное для chroot и сделать chroot:
    mkdir /mnt/sysimage
    mount /dev/md_d0p1 /mnt/sysimage
    mount -o bind /dev /mnt/sysimage/dev
    mount -o bind /selinux /mnt/sysimage/selinux
    mount -t proc none /mnt/sysimage/proc
    mount -t sysfs none /mnt/sysimage/sys
    chroot /mnt/sysimage
  6. Подготовить систему к тому, что она будет жить на рейде.
    Сначала сделать /etc/mdadm.conf:
    mdadm --examine --scan > /etc/mdadm.conf
    В результирующем файле заменить /dev/md0 на /dev/md_d0
    Отредактировать /etc/fstab, заменить там монтирование по LABEL на явное монтирование устройств типа /dev/md_d0p1, ...
    Отредактировать /etc/grub.conf, заменить root=LABEL=... на root=/dev/md_d0p1
  7. Пропатчить mkinitrd, патч взять здесь:
    cd /sbin
    cp mkinitrd mkinitrd.dist
    patch -p0 < /tmp/mkinitrd-md_d0.patch
  8. Запрещаем обновлять mkinitrd, для этого в /etc/yum.conf дописываем exclude=mkinitrd*
  9. Делаем новый initrd:
    cd /boot
    mv initrd-2.6.18-128.el5.img initrd-2.6.18-128.el5.img.bak
    mkinitrd /boot/initrd-2.6.18-128.el5.img 2.6.18-128.el5
  10. Проверяем /proc/mdstat, как только рейд собрался - можно нажимать Ctrl-D до упора, пока система не перезагрузится.
Готово. Теперь система будет грузиться с partitionable RAID1, отремонтировать который гораздо проще, чем обычный не partitionable RAID.

This page is powered by Blogger. Isn't yours?