Сегодня произошел один случай, с которым лично мне раньше не приходилось сталкиваться. Возможно, данная выжимка
команд сэкономит кому-то время на поиски информации в интернете и последующее объединение советов из разных
источников в набор команд.
Сервер, где работает сайт denwer.ru, располагается в датацентре ServerLoft. На нем 2 диска (/dev/sda и /dev/sdb) по 250Г, объединенные в программный RAID-1. Все настройки RAID-1 выполнялись самим ServerLoft-ом (там можно при инициализации новой машины выбирать, какую ОС ставить и какой RAID на ней должен быть с самого начала). Конфигурация разделов была следующая:
RAID-массив /dev/md0 объединение /dev/sda1 и /dev/sdb1.
RAID-массив /dev/md1 объединение /dev/sda3 и /dev/sdb3.
Разделы /dev/sda2 и /dev/sdb2 отданы под SWAP.
В один прекрасный момент диск /dev/sda (первый, с которого на самом раннем этапе загружается система) сломался /proc/mdstat
при этом выглядел примерно так:
По запросу в техподдержку диск заменили, однако возникло осложнение: машина не хотела загружаться даже после того, как
RAID синхронизировался. Насколько я понял причину на новом /dev/sda отсутствовал правильный загрузочный сектор.
Вот полный перечень команд, который позволил вернуть машине работоспособность.
# Вначале загружаемся в Recovery Mode из админки ServerLoft. В этом
# режиме сервер загружается с пре-инициализированного RAM-диска, и
# на него можно зайти по SSH.
# Подключаем RAID-массивы (/dev/md0 и /dev/md1), чтобы они были
# видны в Recovery Mode.
mdadm --assemble --run /dev/md0
mdadm --assemble --run /dev/md1
# Делаем новый /dev/sda идентичным по структуре /dev/sdb.
# ВНИМАНИЕ: ЗДЕСЬ КОПИРУЕМ sdb -> sda, не перепутайте!
sfdisk -d /dev/sdb | sfdisk --force /dev/sda
# Или, если диск был разбит при помощи GNU parted:
# sgdisk -R=/dev/sda /dev/sdb
# Добавляем в RAID-массив разделы нового диска.
mdadm --manage /dev/md0 --add /dev/sda1
mdadm --manage /dev/md1 --add /dev/sda3
# Ждем, пока все отсинкается (наверное, можно было и не ждать -
# но я не проверял и честно ждал).
watch cat /proc/mdstat
# Временно подключаем диск сервера, т.к. только на нем есть grub.
mount /dev/md1 /mnt
# Теперь делает новый диск загрузочным (а заодно и старый).
# Без этого ничего не загружалось.
/mnt/usr/sbin/grub
grub> root (hd0,0)
grub> setup (hd0)
grub> root (hd1,0)
grub> setup (hd1)
grub> quit
# Или, если у вас более новая версия ОС:
# mount -t none -o bind /dev /mnt/dev
# mount -t proc -o bind /proc /mnt/pro/perlcomment# mount -t sysfs -o bind /sys /mnt/sys
# chroot /mnt
# grub-install /dev/sda
# grub-install /dev/sdb
# exit
# Больше нам диск не потребуется.
umount /mnt
# В конце - выключаем Recovery Mode в админке ServerLoft.
После данной последовательности команд сервер успешно загрузился.
Нужно заметить, что если бы заменяли второй диск (/dev/sdb), а не первый, то никаких проблем не возникло
бы и это подтверждается моим опытом. Сложность ситуации (если это можно назвать сложностью) была именно в
сбойном первом, загрузочном диске.
автор категорически против копирования и распространения в Интернете всех статей «Куроводства» с возрастом, меньшим 6 месяцев. Печальный опыт «расползания» чрезвычайно устаревших ошибочных версий статьи про Apacheдействительно объясняет такое решение.
Орфография на «Куроводстве»:
если вы заметили орфографическую, стилистическую или другую ошибку на этой странице, просто выделите ошибку мышью и нажмитеCtrl+Enter. Выделенный текст будет немедленно отослан вебмастеру, а Вы даже ничего и не заметите настолько быстро все произойдет.
На заметку:
если вы уже вскипели насчет дизайна этой страницы, то присмотритесь повнимательнее к названию, почитайте FAQ, сходите по лебедевским
местам, как это уже предлагалось выше. Можно ли считать пародию плагиатом? Надеюсь, что нет.