Переустановка ядра из chroot

Переустановка ядра из chroot

Я по ошибке удалил один из vmlinuzфайлов в своей /bootдиректории. Однако я сделал резервную копию /bootвнутри /tmp, просто чтобы быть уверенным.

Соответственно, я не могу загрузиться, так как получаю ошибку об отсутствии файла vmlinuz. Поэтому я загрузился с помощью Live USB, но когда я попал в /bootкаталог на моем жестком диске (sda5), он оказался совершенно пустым. Если я скопирую файлы из /tmp/bootэтого каталога в этот /bootкаталог, я все равно не смогу загрузиться.

Как мне восстановить эти файлы в соответствующий каталог?

решение1

vmlinuz— это сам образ ядра Linux (z указывает на то, что он сжат).

Переустановка пакета ядра, на который в данный момент ссылаетсяlinux-образ-generic(или вашЯдро HWE) и, вероятно,linux-singed-image-genericв средах безопасной загрузки UEFI должно решить вашу проблему.

Переустановка ядра из chroot

Желательно загрузить live media той же версии и смонтировать раздел вашей установки (можно сделать с помощью Nautilus, тогда будет что-то вроде /media/ubuntu/…этого) или ваш /bootраздел (это будет немного сложнее). Это будет ${my_installation}в следующих инструкциях.

Просмотрите /lib/modules/свою установку ( ${my_installation}/lib/modules/) на предмет конкретных версий ядра, которые были установлены, и выберите последний номер версии, который вы сможете найти, он указан ${kernel_ver}в следующих инструкциях; в моей тестовой виртуальной машине это был 3.16.0-46.

Как я уже говорил в комментарии ранее, процедура очень похожа на переустановку Grub в chroot, поэтому позвольте мне процитировать:этот ответс небольшими изменениями:

  1. Привязать крепление и еще кое-что необходимое:

     for i in /sys /proc /run /dev; do sudo mount --bind "$i" "${my_installation}$i"; done
    
  2. chrootв вашу установку Ubuntu:

     sudo chroot ${my_installation}
    
  3. На этом этапе вы находитесь в процессе установки, а не в сеансе работы, и работаете как пользователь root. …

Теперь переустановите ядро ​​(signedпакет предназначен для безопасной загрузки UEFI):

apt-get install --reinstall linux-image-${kernel_ver}-generic linux-signed-image-${kernel_ver}-generic

Проверьте /bootкаталог, если initrdдля этого ядра все еще отсутствует. Чтобы сгенерировать его вручную, выполните:

mkinitramfs -o /boot/initrd.img-${kernel_ver}-generic ${kernel_ver}-generic

Мой пример:

mkinitramfs -o /boot/initrd.img-3.16.0-46-generic 3.16.0-46-generic

Затем выполните команду update-grub, как в цитируемом ответе, чтобы убедиться, что «новое» ядро ​​и initrd включены.

Если вам нужно переустановить Grub, вы можете выполнить оставшиеся шаги. Помните, что эти инструкции были написаны для MBR, если у вас UEFI (где загрузчики из разных ОС не должны перезаписывать друг друга), вам нужно проверить, что grub-efi-amd64-binустановлен install, прежде чем переустанавливать Grub.


Связанный контент