This is an old revision of the document!
Что делать, если вместо загрузки системы вы видите приглашение grub shell или initramfs shell.
GRUB
В командной оболочке grub shell нам нужно сделать три вещи:
- Выбрать раздел откуда будем загружаться
- Выбрать ядро
- Выбрать ram-диск initrd
А потом выполнить команду boot.
grub> set root=(hd1,gpt3) grub> linux /boot/vmlinuz... grub> initrd /boot/initrd... grub> boot
initramfs
Если после этого, система загружается, но не может смонтировать root и вываливается в initramfs shell, то нужно:
- Смонтировать root вручную
- Подмонтиовать (перенести) в смонтированный root директории /dev, /proc и /sys
- Переключиться в смонтированный root и запустить /sbin/init
# First, find and mount the new filesystem. mkdir /newroot mount /dev/whatever /newroot # Unmount everything else you've attached to rootfs. (Moving the filesystems # into newroot is something useful to do with them.) mount --move /sys /newroot/sys mount --move /proc /newroot/proc mount --move /dev /newroot/dev # Now switch to the new filesystem, and run /sbin/init out of it. Don't # forget the "exec" here, because you want the new init program to inherit # PID 1. exec switch_root /newroot /sbin/init
Live-CD
Если есть возможность загрузиться с Live-CD, то починить загрузчик GRUB можно так:
- Смонтировать root (и /boot при необходимости)
- Подмонтировать в смонтированный root директории /dev, /proc и /sys
- Выполнить chroot в смонтированный root
- Починить grub и initramfs
- Отмонтировать все и перезагрузиться
mount /dev/sdb3 /mnt/ -o subvol=@ mount --bind /dev /mnt/dev mount --bind /sys /mnt/sys mount --bind /proc /mnt/proc mount /dev/sdb1 /mnt/boot/efi/ chroot /mnt/ grub-install /dev/sdb update-grub update-initramfs -u exit umount /mnt/boot/efi/ umount /mnt/dev umount /mnt/sys umount /mnt/proc umount /mnt
Fix GRUB MBR -> GPT
Однажды мне понадобилось расширить диск в виртуалке. Объем существующего диска был увеличен, но диск имел таблицу разделов MBR и основных разделов на нем было уже 4. То есть нужно было конвертить таблицу раздело в GPT. Кроме того, все разделы этого диска были в LVM и загрузка происходила непосредственно с LVM-тома (в случае с MBR GRUB такое позволяет).
Конвертация происходила с помощью gdisk. Он ругнулся при запуске на таблицу MBR, а затем - я просто нажал w, подтверждение - и всё - таблица разделов сконвертирована в GPT. Затем - еще раз запустил gdisk, создал новый раздел, на нем создал PhysicalVolume ну и так далее.
При перезагрузке этого сервака выяснилось, что он не грузится.
Оказалось, что в случае, когда таблица разделов GPT, а загрузка происходит с помощью BIOS (не EFI) - grub нуждается в малюсеньком разделе (1-2Мб) BIOS boot partition.
В итоге пришлось:
- рарширить диск еще немного
- загрузиться с LiveCD
- сделать малюсенький раздел (с помощью gdisk), дать ему тип EF02
- перезагрузиться с LiveCD еще раз, чтобы обнаружились партиции (у меня почему-то не сработали ни partprobe, ни kpartx)
- смонтировать корневой раздел (он в LVM и /boot с ядром тоже на нем же), например в /mnt
- переустановить grub:
grub-install /dev/sda --root-directory=/mnt
Всё. В итоге система поднялась.
Discussion