我错误地删除了目录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 非常相似,因此让我引用这个答案稍作修改:
绑定安装一些其他必要的东西:
for i in /sys /proc /run /dev; do sudo mount --bind "$i" "${my_installation}$i"; done
chroot
进入你的 Ubuntu 安装:sudo chroot ${my_installation}
此时,您处于安装状态,而不是实时会话,并且以 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 之前检查是否已安装。