Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revisionLast 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:38] – [Real Fix] 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 и биндим все что надо: | ||
+ | < | ||
+ | / | ||
+ | root@rescue ~ # lsblk / | ||
+ | NAME | ||
+ | pve-root 253:0 0 96G 0 lvm | ||
+ | root@rescue ~ # resize2fs / | ||
+ | resize2fs 1.46.2 (28-Feb-2021) | ||
+ | Please run ' | ||
+ | |||
+ | root@rescue ~ # e2fsck -f / | ||
+ | e2fsck 1.46.2 (28-Feb-2021) | ||
+ | Pass 1: Checking inodes, blocks, and sizes | ||
+ | Pass 2: Checking directory structure | ||
+ | Pass 3: Checking directory connectivity | ||
+ | Pass 4: Checking reference counts | ||
+ | Pass 5: Checking group summary information | ||
+ | / | ||
+ | root@rescue ~ # resize2fs / | ||
+ | resize2fs 1.46.2 (28-Feb-2021) | ||
+ | Resizing the filesystem on / | ||
+ | The filesystem on / | ||
+ | |||
+ | root@rescue ~ # lvreduce -L -1G / | ||
+ | WARNING: Reducing active logical volume to 95.00 GiB. | ||
+ | THIS MAY DESTROY YOUR DATA (filesystem etc.) | ||
+ | Do you really want to reduce pve/root? [y/n]: y | ||
+ | Size of logical volume pve/root changed from 96.00 GiB (24576 extents) to 95.00 GiB (24320 extents). | ||
+ | Logical volume pve/root successfully resized. | ||
+ | root@rescue ~ # e2fsck -f / | ||
+ | e2fsck 1.46.2 (28-Feb-2021) | ||
+ | Pass 1: Checking inodes, blocks, and sizes | ||
+ | Pass 2: Checking directory structure | ||
+ | Pass 3: Checking directory connectivity | ||
+ | Pass 4: Checking reference counts | ||
+ | Pass 5: Checking group summary information | ||
+ | / | ||
+ | root@rescue ~ # mount / | ||
+ | root@rescue ~ # mount -t proc proc /mnt/proc | ||
+ | root@rescue ~ # mount -t sysfs sys /mnt/sys | ||
+ | root@rescue ~ # mount -o bind /dev /mnt/dev | ||
+ | root@rescue ~ # mount -t devpts pts / | ||
+ | root@rescue ~ # chroot /mnt | ||
+ | root@rescue:/# | ||
+ | root@rescue:/# | ||
+ | Generating grub configuration file ... | ||
+ | Found linux image: / | ||
+ | Found initrd image: / | ||
+ | Found memtest86+ image: / | ||
+ | Found memtest86+ multiboot image: / | ||
+ | done | ||
+ | root@rescue:/# | ||
+ | Installing for i386-pc platform. | ||
+ | Installation finished. No error reported. | ||
+ | root@rescue:/# | ||
+ | exit | ||
+ | root@rescue ~ # umount /mnt/proc | ||
+ | root@rescue ~ # umount /mnt/sys | ||
+ | root@rescue ~ # umount / | ||
+ | root@rescue ~ # umount /mnt/dev | ||
+ | root@rescue ~ # umount / | ||
+ | root@rescue ~ # umount /mnt | ||
+ | </ | ||
+ | |||