Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revisionBoth sides next revision | ||
linux_faq:fix_grub_initramfs_boot [2019/09/03 17:41] – admin | linux_faq:fix_grub_initramfs_boot [2022/01/14 20:13] – [Fix GRUB MBR -> GPT] admin | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | Что делать, | ||
+ | ====== GRUB ====== | ||
+ | В командной оболочке **grub shell** нам нужно сделать три вещи: | ||
+ | * Выбрать раздел откуда будем загружаться | ||
+ | * Выбрать ядро | ||
+ | * Выбрать ram-диск initrd | ||
+ | А потом выполнить команду **boot**. | ||
+ | < | ||
+ | grub> set root=(hd1, | ||
+ | grub> linux / | ||
+ | grub> initrd / | ||
+ | grub> boot | ||
+ | </ | ||
+ | ====== initramfs ====== | ||
+ | Если после этого, система загружается, | ||
+ | * Смонтировать **root** вручную | ||
+ | * Подмонтиовать (перенести) в смонтированный **root** директории **/dev**, **/proc** и **/sys** | ||
+ | * Переключиться в смонтированный **root** и запустить **/ | ||
+ | < | ||
+ | # First, find and mount the new filesystem. | ||
+ | |||
+ | mkdir /newroot | ||
+ | mount / | ||
+ | |||
+ | # Unmount everything else you've attached to rootfs. | ||
+ | # into newroot is something useful to do with them.) | ||
+ | |||
+ | mount --move /sys / | ||
+ | mount --move /proc / | ||
+ | mount --move /dev / | ||
+ | |||
+ | # Now switch to the new filesystem, and run /sbin/init out of it. Don't | ||
+ | # forget the " | ||
+ | # PID 1. | ||
+ | |||
+ | exec switch_root /newroot /sbin/init | ||
+ | </ | ||
+ | ИЛИ \\ | ||
+ | В случае с **Ubuntu** дефолтным рутом является директория **/root**, поэтому можно делать так: | ||
+ | < | ||
+ | # Обнаружим тома LVM | ||
+ | vgchamge -ay | ||
+ | mount / | ||
+ | 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=/ | ||
+ | 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 --bind /dev /mnt/dev | ||
+ | mount --bind /sys /mnt/sys | ||
+ | mount --bind /proc /mnt/proc | ||
+ | mount /dev/sdb1 / | ||
+ | chroot /mnt/ | ||
+ | grub-install /dev/sdb | ||
+ | update-initramfs -u | ||
+ | update-grub | ||
+ | exit | ||
+ | umount / | ||
+ | umount /mnt/dev | ||
+ | umount /mnt/sys | ||
+ | umount /mnt/proc | ||
+ | umount / | ||
+ | |||
+ | ====== Fix GRUB MBR -> GPT ====== | ||
+ | Однажды мне понадобилось расширить диск в виртуалке. Объем существующего диска был увеличен, | ||
+ | Конвертация происходила с помощью **gdisk**. Он ругнулся при запуске на таблицу **MBR**, а затем - я просто нажал **w**, подтверждение - и всё - таблица разделов сконвертирована в **GPT**. Затем - еще раз запустил **gdisk**, создал новый раздел, | ||
+ | При перезагрузке этого сервака выяснилось, | ||
+ | Оказалось, | ||
+ | В итоге пришлось: | ||
+ | * раcширить диск еще немного (на 0.1Gi) | ||
+ | * загрузиться с **LiveCD** | ||
+ | * сделать малюсенький раздел (с помощью **gdisk**), дать ему тип **EF02**. Примерно так:< | ||
+ | sgdisk -e -g /dev/sda | ||
+ | # | ||
+ | partx -u | ||
+ | # | ||
+ | sgdisk -n 4: | ||
+ | </ | ||
+ | * перезагрузиться с **LiveCD** еще раз, чтобы обнаружились партиции (у меня почему-то не сработали ни **partprobe**, | ||
+ | * смонтировать корневой раздел (он в **LVM** и **/boot** с ядром тоже на нем же), например в **/mnt** | ||
+ | * переустановить **grub**: < | ||
+ | Всё. В итоге система поднялась. | ||
+ | |||
+ | |||
+ | ====== Real Fix ====== | ||
+ | смотрим диски | ||
+ | < | ||
+ | root@rescue ~ # lsscsi | ||
+ | [N: | ||
+ | [N: | ||
+ | [N: | ||
+ | [N: | ||
+ | [N: | ||
+ | [N: | ||
+ | [N: | ||
+ | [N: | ||
+ | </ | ||
+ | Я знаю, что EFI находится на (hd1,gpt2), а / и /boot - на LVM-томе **/ | ||
+ | Монтируем root и биндим все что надо: | ||
+ | |||