понедельник, 7 февраля 2011 г.

Перенос системы на бОльший жесткий диск.

Ничего нового не опишу, только грабли, на которые встал. Сервер используется под почту - smtp+imap, настроен программынй raid с помощью mdadm (заметка по настройке проскакивала ранее). Размер жесткого диска в 120G стал заканчиваться спустя 2 года.
Цель: перенести систему на диск 400G, создать программный raid.
Теперь, собственно, как все происходило. Во-первых, хочется заметить, что я нахожусь от сервера за 500 км, так что пришлось воспользоваться услугами местного админа (сервер не имеет ни IP-kvm, ни power-on-net). Вечером в пятницу админ выключил сервер, подкинул новый жесткий диск. Сервер загрузился со старого винчестера, затем я удаленно разбил с помощью fdisk новый жесткий диск, создал файловые системы (mkfs.ext3 -L LABELX /dev/sdbY), добавил сигнатуру на раздел со swap (mkswap /dev/sdb9), создал точки монтирования (mkdir -p /mnt/sdb{1,...10}), подмонтировал разделы (mount /dev/sdbY /mnt/sdbY), скопировал данные со старых разделов на новые, предварительно остановив некоторые сервисы, (cp -dpRx . /mnt/sdbY). Прописал загрузчик grub в mbr.
Тут, как говорится, я дал маху. Сначала скопировал, потом поменял строки в /etc/fstab и /boot/grub/grub.conf. Это да, промах.
Перезагрузка без старого винта и сервер счастливо не смог загрузить ядро. Ничего страшного - объясняем админу по телефону. что прописать в меню grub (хорошо, что админ вполне адекватный работает). Ядро загрузилось, но не смогло найти корневую файловую систему. Супер! Возвращаемся назад к меню grub (конечно, передернув сервер по питанию) и правим не только параметр root (hd0,0), но и kernel /vmlinuz*** ro root=/dev/sda2. Вроде все должно быть в порядке, НО НЕ ГРУЗИТСЯ с ошибкой "mkrootdev: label / not found" 
Тут до меня доходит, что initrd сохранил запись о том, что корневая файловая системы находится на /dev/md6 (старая информация), и соот. не может найти устройство. Что делать? Грузиться с live-cd или режиме rescue. Не вопрос, админ предварительно по моему указанию выкачал по корпоративному каналу образ RHEL5.6 (как будто я предчувствовал такие проблемы :)) и записал на DVD.
Загрузка, linux rescue, включить поддержку сети (предполагал, что зайду по сети и сам дальше сделаю), настроить нужный IP, gateway. Теперь самое главное, chroot сделать, но тут очередная засада - предыдущая инсталляция НЕ найдена и автоматически не поднялись необходимые устройства. Ладно, объясняем по телефону что надо сделать (распаковать initrd, изменить init, запаковать initrd):
mount /dev/sda2 /mnt/sysimage
mount /dev/sda1 /mnt/sysimage/boot
chroot /mnt/sysimage
mkdir -p /tt
cd /tt
cp /boot/initrd-2.6.18-194.11.3.img .
cat initrd-2.6.18-194.11.3.img | gunzip | cpio -i
правим init - убираем все, что касается старых устройств, меняем /dev/md6 на /dev/sda2, убираем resume /dev/md6, сохраняем изменения
rm -f initrd-2.6.18-194.11.3.img
find . -print | cpio -H newc -o | gzip -9 -c ../initrd_new.img
cp ../initrd_new.img /boot
Отлично.
Грузимся с жесткого диска, правим меню grub (на предыдущем этапе благополучно забыли сразу поменять). Оно грузится!!! Но опять лажа - записи в /etc/fstab старые и как дошло до проверки файловых систем - тут же выкинуло предложение ввести пароль root и занятся проверкой/монированием файловых систем самостоятельно.
Опять грузимся с диска в linux rescue, меняем записи в /etc/fstab на правильные, заодно и grub.conf. Теперь система нормально загрузилась.
Вообщем, пример довольно поучительный, правильное планирование переноса никто не отменяет + надо думать за какое-то удаленное управление системой.

Комментариев нет:

Отправить комментарий