我做了一件蠢事。我的想法是 /boot 目录是空的,每次计算机启动时内容都会进入 /boot。我的 /boot 驱动器显示错误消息“没有剩余空间”,所以我认为可能有垃圾文件。我删除了 /boot 的所有内容,rm -rf *
然后通过命令重新启动了计算机reboot
。现在系统没有启动。我在启动时收到错误,即
error file /grub2/i386-pc/normal.mod not found
Entering rescue mode ...
grub rescue>
大多数搜索都显示通过修复 grub 来解决问题。就我而言,我知道我已删除了内容,那么如何恢复系统呢?我正在使用 Centos 7。
答案1
/boot 分区包含重要的 Linux 内核文件以及 Grub 文件。如果没有它们,您的系统将无法启动(正如您已经知道的那样)。而且仅仅恢复 Grub 文件是无济于事的。要从中恢复,您应该能够执行以下操作:
- 从 CentOS DVD/ISO 映像将系统启动到救援模式
- 通过运行重新安装内核
yum reinstall kernel
- 通过运行重新安装 Grub
/sbin/grub2-install /dev/sda
在最后一步中,您可能需要用/dev/sda
另一个设备名称替换,具体取决于您的硬件。它应该是您要从中启动的主硬盘驱动器。在虚拟机上,这通常是/dev/vda
。如果您不确定,您可以使用lsblk
命令(您可能需要yum install util-linux
先运行)列出所有块设备,您应该能够根据其大小识别磁盘。
此后,您的系统应该可以再次正常启动。
答案2
我最近也遇到了类似的问题。我可以通过以下答案来恢复这里。
我在新答案中记录了我所遵循的步骤。
为了方便起见,我在这里复制我的答案:
我有一台 Fedora 30 PC。启动分区已打开/dev/sda3
,根分区位于名为 的 LVLM 上Fedora-root
。我使用 root 帐户运行了所有命令。
我从 Fedora Live 媒体启动(来自 USB 驱动器)
挂载我的根分区
mount /dev/mapper/Fedora-root /mnt
- 挂载我的启动分区
mount /dev/sda3 /mnt/boot
- 将内核从活动分区复制到目标启动分区
cp /boot/vmlinuz-$(uname -r) /mnt/boot/
- 挂载系统分区
mount --bind /dev /mnt/dev mount --bind /sys /mnt/sys mount --bind /proc /mnt/proc
- 将 root 更改为
/mnt
chroot /mnt
- 生成
initramfs
dracut /boot/initramfs-$(uname -r).img $(uname -r) -v
- 重新安装 grub 并重新配置
grub2-mkconfig -o /boot/grub2/grub.cfg
由于某种我不知道的原因,生成过程initramfs
非常缓慢,无法在我的系统上完成(步骤 6)。但是,当我没有 chroot 文件系统时,该命令可以正常工作。因此,我跳过了从 3 开始的步骤。我还必须修改配置dracut
以指向根系统。
因此,新的步骤是:
- 指向
dracut
配置 中的根位置echo "root=/dev/mapper/Fedora/root" > /etc/dracut.conf.d/kernel.conf
- 重新安装
kernel
并生成initramfs
dracut /dev/sda/initramfs-$(uname -r).img $(uname -r) -v
- 然后我按照上面的步骤 3-6 进行操作,这样我就可以重建 grub 配置(这一步可能不需要,因为我太谨慎了)
mount /dev/mapper/Fedora-root /mnt` mount /dev/sda3 /mnt/boot cp /boot/vmlinuz-$(uname -r) /mnt/boot/ mount --bind /dev /mnt/dev mount --bind /sys /mnt/sys mount --bind /proc /mnt/proc chroot /mnt
- 重新安装 grub 并重新配置
grub2-install /dev/sda grub2-mkconfig -o /boot/grub2/grub.cfg
NVIDIA 用户须知
我有一块 NVIDIA GPU,在事故发生前我安装了专有驱动程序。
从实时媒体恢复的内核使用了 Nouveau 驱动程序(因为它是 Fedora 中的默认驱动程序)。恢复的内核也不是最新版本。当我kernel
之后使用 GUI 界面更新时,它使用了 NVIDIA 专有驱动程序。