我错误地从我的文件系统中删除了 /boot 文件夹,重新启动,我现在得到的是:
error: file '/boot/grub/i368-pc/linux.mod' not found.
grub rescue>
Run Code Online (Sandbox Code Playgroud)
Gra*_*eme 37
哎呀!
以下是该怎么做:
启动实时发行版。这可以是您的 Ubuntu 安装光盘或其他光盘,例如Knoppix。
找到您安装了根文件系统的驱动器/分区。为此,您可以打开终端并运行sudo parted -l
或sudo fdisk -l
。如果您不知道,请编辑 您的问题并添加输出。
假设您在上一步中找到的根分区是/dev/sdxy
(x
应该是另一个字母并且y
应该是数字),然后在终端中运行以下命令:
mkdir mnt
sudo mount /dev/sdxy mnt
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo chroot mnt
Run Code Online (Sandbox Code Playgroud)您现在将处于一个chroot
环境中,这意味着在此处运行命令等同于在已安装的系统上运行它们。您要做的第一件事是将 GRUB2 重新安装到设备上,以便它将正确的文件复制到/boot
文件夹中。为此,请使用根分区所在的驱动器运行以下命令(即删除/dev/sdxy
数字 ( y
)):
grub-install /dev/sdx
Run Code Online (Sandbox Code Playgroud)您现在想要找出您安装的哪些软件包在引导目录中具有文件并重新安装它们。这将替换已删除的内核映像等。查找包的命令是:
dpkg -S /boot
Run Code Online (Sandbox Code Playgroud)
并重新安装它们:
apt-get --reinstall install ...
Run Code Online (Sandbox Code Playgroud)
Where...
替换为第一个命令中的包名称。不要包含逗号,只需使用空格分隔包名称即可。
此步骤可能需要访问 Internet(除非包已在缓存中),因此如果出现问题,请确保已连接。
由于您将删除内核并重新安装它们,因此这应该会自动触发 GRUB2 更新。但万一他们没有,你可以运行:
update-grub
Run Code Online (Sandbox Code Playgroud)重新启动,现在应该修复了。一个问题,我有我最后一次做类似的事情是,Windows将安装在那里没有发现update-grub
当在运行chroot
由于一个错误os-prober
。如果这是一个问题,只需sudo update-grub
在修复后的系统中再次运行。