"Всегда сначала читай маны..."
Незвестный мудрец.
"Никогда не чините то, что ещё не поломано."
Народная мудрость.
Преамбула
Все описанное ниже производилось с: компьютер с 1-м IDE-винчестером 40GB - /dev/sda1 - /boot, /dev/VolGroup00/LogVol00 - /; ОС Fedora 9.
После очередного бездумного апдейта своего домашнего сервера, выяснилось что GRUB перестал работать, а именно после сообщения
Код: Выделить всё
GRUB _
Процесс
Первым делом, загрузившись с LiveUSB Fedora 9 (cdrom на данной машине не установлен) было решено восстановить загрузчик:
Код: Выделить всё
#grub-install /dev/sda1
#reboot
Лучше не стало - вместо зависшего "GRUB_" моему вниманию был представлен не единожды заполненный этими же словами экран. Итого дальше GRUB_ не продвинулись.
Следующим этапом было монтирование из-под LiveDVD раздела /boot (/dev/sda1) и просмотр его содержимого. В ходе осмотра ничего неожиданного не было обнаружено. Я решил что в логах искать не было смысла, так как всё самое интересное зависало до начало их записи.
Далее начинаются не очень обоснованные действия: из раздела /boot всё было удалено и записаны файлы из соотвествующего раздела LiveDVD, а именно каталог /boot/grub и файлы vmlinuz, system.map и initrd. GRUB был снова переустановлен коммандами:
Код: Выделить всё
#grub
grub>root (hd0,0)
*ля-ля-ля всё ок - ext2fs - наше все
grub>setup (hd0,0)
*тра-та-та stage1 ... no
остальное всё ок*
grub>quit
После этого создал свой /boot/grub/grub.conf со следующим текстом:
Код: Выделить всё
title Fedora 9
root (hd0,0)
kernel /vmlinuz root=/dev/VolGroup00/LogVol00 ro
initrd /initrd
После перезагрузки GRUB сработал как надо, пошла загрузка системы, но дальше initrd дело не пошло - вывалилось с Kernel Panic - к сожалению не скажу точно что за ошибка была дословно, но как я понял проблема была с монтированием /
На третьем этапе было принято решение не использовать kernel и initrd из комплекта LiveDVD. Для этого был очищен /boot и выполнены следующие команды:
Код: Выделить всё
# mkdir /media/old
#mount -t ext3 /dev/sda2 /media/old
/dev/sda2 file system is already mounted or /media/old is busy.
#mount -t ext3 /dev/VolGroup00/LogVol00 /media/old
/dev/VolGroup00/LogVol00 file system is already mounted or /media/old is busy.
#vgscan
#vgchange -ay
Phisical volume /dev/VolGroup00 is now active.
#mount -t ext3 /dev/VolGroup00/LogVol00 /media/old
#mount -t ext3 /dev/sda1 /media/old/boot
#chroot /media/old yum remove kernel -y
#chroot /media/old yum install kernel -y
В результате мы получаем в /boot рабочий набор vmlinuz+initrd для нашего текущего ядра.
На всякий пожарный также сделаем собственный initrd
Код: Выделить всё
#cd /media/old/boot
#chroot /media/old mkinitrd --force-lvm-mod initrd-custom 2.6.26.5-45.fc9.i686
После перезагрузки как я ни пытался с различными параметрами и разными initrd запустить систему, ничего не выходило - загрузка продолжалась до момента, когда должен быть смонтирован / и тут выходил конфуз, из под lvm почему-то не получалось смонтировать этот раздел и boot failed.
Развязка
"А теперь, внимание, вопрос."
Проштудировав множество форумов, в которых решалась похожая проблема, удалось выяснить несколько интересных моментов:
1. Такие проблемы как правило возникали на FC3-5.
2. Такие проблемы как правило возникали у людей использующих RAID-массивы.
3. За что эта проблема досталась мне? (см. вступление)
Возможные решения проблемы:
1. Ещё раз посмотреть, быть может я где-нибудь ошибся в индексах
2. Попробовать сделать новый initrd изменив скрипт его создания в /etc/mkinitrd и вручную добавить модули ответственные за работу с LVM.
3. Использовать опцию загрузки ядра break=premount и вручную вводить vgchange -ay.
А теперь, собственно вопрос: как быть и что делать?
PS: тред начат с работы, поэтому могут присутствовать некоторые ошибки, так как написано по памяти.