我删除了 /boot 的所有内容,现在服务器无法启动

我删除了 /boot 的所有内容,现在服务器无法启动

我做了一件蠢事。我的想法是 /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 帐户运行了所有命令。

  1. 我从 Fedora Live 媒体启动(来自 USB 驱动器)

  2. 挂载我的根分区

    mount /dev/mapper/Fedora-root /mnt
    
  3. 挂载我的启动分区
    mount /dev/sda3 /mnt/boot
    
  4. 将内核从活动分区复制到目标启动分区
    cp /boot/vmlinuz-$(uname -r) /mnt/boot/
    
  5. 挂载系统分区
    mount --bind /dev /mnt/dev
    mount --bind /sys /mnt/sys
    mount --bind /proc /mnt/proc
    
  6. 将 root 更改为/mnt
    chroot /mnt
    
  7. 生成initramfs
    dracut /boot/initramfs-$(uname -r).img $(uname -r) -v
    
  8. 重新安装 grub 并重新配置
    grub2-mkconfig -o /boot/grub2/grub.cfg
    

由于某种我不知道的原因,生成过程initramfs非常缓慢,无法在我的系统上完成(步骤 6)。但是,当我没有 chroot 文件系统时,该命令可以正常工作。因此,我跳过了从 3 开始的步骤。我还必须修改配置dracut以指向根系统。

因此,新的步骤是:

  1. 指向dracut配置 中的根位置
    echo "root=/dev/mapper/Fedora/root" > /etc/dracut.conf.d/kernel.conf
    
  2. 重新安装kernel并生成initramfs
    dracut /dev/sda/initramfs-$(uname -r).img $(uname -r) -v
    
  3. 然后我按照上面的步骤 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
    
  4. 重新安装 grub 并重新配置
    grub2-install /dev/sda
    grub2-mkconfig -o /boot/grub2/grub.cfg
    

NVIDIA 用户须知
我有一块 NVIDIA GPU,在事故发生前我安装了专有驱动程序。
从实时媒体恢复的内核使用了 Nouveau 驱动程序(因为它是 Fedora 中的默认驱动程序)。恢复的内核也不是最新版本。当我kernel之后使用 GUI 界面更新时,它使用了 NVIDIA 专有驱动程序。

相关内容