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

ИЛИ
В случае с Ubuntu дефолтным рутом является директория /root, поэтому можно делать так:

# Обнаружим тома LVM
vgchamge -ay
mount /dev/mapper/ubuntu-root /root
mount --bind /dev /root/dev
mount --bind /proc /root/proc
mount --bind /sys /root/sys
exit

Чиним GRUB и initramfs

После того, как система нормально загрузилась восстанавливаем GRUB и initramfs:

sudo grub-install --target=x86_64-efi --recheck --efi-directory=/boot/efi --boot-directory=/boot /dev/nvme0n1
sudo update-initramfs -u 
sudo update-grub
sudo reboot

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.
В итоге пришлось:

  • раcширить диск еще немного (на 0.1Gi)
  • загрузиться с LiveCD
  • сделать малюсенький раздел (с помощью gdisk), дать ему тип EF02. Примерно так:
    #перемещаем таблицу разделов в конец диска
    sgdisk -e -g /dev/sda
    #перечитываем таблицу разделов
    partx -u
    #создаем новый раздельчик:
    sgdisk -n 4:293605246:293609946 -t 4:EF02 /dev/sda

  • перезагрузиться с LiveCD еще раз, чтобы обнаружились партиции (у меня почему-то не сработали ни partprobe, ни kpartx)
  • смонтировать корневой раздел (он в LVM и /boot с ядром тоже на нем же), например в /mnt
  • переустановить grub:

    grub-install /dev/sda --root-directory=/mnt

Всё. В итоге система поднялась.

Enter your comment. Wiki syntax is allowed:
 
  • linux_faq/fix_grub_initramfs_boot.1601132033.txt
  • Last modified: 2020/09/26 14:53
  • by admin