从 chroot 重新安装内核

从 chroot 重新安装内核

我错误地删除了目录vmlinuz中的一个文件。不过,为了以防万一,/boot我备份了/boot里面的文件。/tmp

因此,我无法启动,因为我收到缺少 vmlinuz 文件的错误。因此,我使用实时 USB 启动,但当我进入/boot硬盘驱动器 (sda5) 中的目录时,它完全是空的。如果我将文件复制到/tmp/boot/boot目录,我仍然无法启动。

我怎样才能将这些文件恢复到适当的目录?

答案1

vmlinuz是 Linux 内核映像本身(z 表示它是压缩的)。

重新安装当前引用的内核包linux-image-通用(或您的HWE 内核)并且可能Linux 签名图像通用在 UEFI 安全启动环境中应该可以解决您的问题。

从 chroot 重新安装内核

最好启动相同版本的 live 媒体并挂载安装的分区(您可以使用 Nautilus 执行此操作,它将类似于/media/ubuntu/…)或您的/boot分区(这将有点复杂)。这将${my_installation}在以下说明中介绍。

查看/lib/modules/您的安装(${my_installation}/lib/modules/)中已安装的特定内核版本,并选择您能找到的最新版本号,如${kernel_ver}以下说明所示,在我的测试虚拟机中它是 3.16.0-46。

正如我之前在评论中所说,该过程与在 chroot 中重新安装 Grub 非常相似,因此让我引用这个答案稍作修改:

  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在重新安装 Grub 之前检查是否已安装。


相关内容