Archives
среда, апреля 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.
Рецепт спасения следующий:
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
- Установить CentOS используя стандартный инсталлятор на диск sda. При разбивке диска оставить немного места (хотя бы один юнит) в самом хвосте диска незанятым.
- Загрузиться с диска в Rescue режим. Систему не искать и не монтировать.
- Собрать рейд:
mdadm --create --level=1 --raid-devices=2 /dev/md_d0 /dev/sda missing - Воткнуть /dev/sdb в получившийся рейд, чтобы он ребилдился:
mdadm --add /dev/md_d0 /dev/sdb
Убедиться, проверив /proc/mdstat, что рейд стал ребилдиться. - Смонтировать руками систему в состояние, пригодное для 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 - Подготовить систему к тому, что она будет жить на рейде.
Сначала сделать /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 - Пропатчить mkinitrd, патч взять здесь:
cd /sbin
cp mkinitrd mkinitrd.dist
patch -p0 < /tmp/mkinitrd-md_d0.patch - Запрещаем обновлять mkinitrd, для этого в /etc/yum.conf дописываем exclude=mkinitrd*
- Делаем новый 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 - Проверяем /proc/mdstat, как только рейд собрался - можно нажимать Ctrl-D до упора, пока система не перезагрузится.