意外删除了 /boot 分区

意外删除了 /boot 分区

这可能听起来很愚蠢,而且似乎有很多重复,但我已经花了将近 3 天的时间寻找解决方案,没有看,我意外地在 /dev/sda2 而不是 /dev/sdd2 上发出了 mkfs.xfs 命令并完全擦除了我的 /boot 分区(以及所有 vmlinuz 和 initrd 文件),所以我尝试了从实时媒体进行标准恢复方法(由于我的系统是使用 LVM 分区和 EFI 模式安装的,因此进行了一些更改):

mkdir /mnt/fedsys
mount /dev/fedora/root /mnt/fedsys
mount /dev/sda2 /mnt/fedsys/boot
mkdir /mnt/fedsys/boot/efi (I had to create a new efi dir since it was lost)
mount /dev/sda1 /mnt/fedsys/boot/efi
mount --bind /proc/ /mnt/fedsys/proc
mount --bind /sys/ /mnt/fedsys/sys
mount --bind /dev/ /mnt/fedsys/dev
chroot /mnt/fedsys

到目前为止它运行良好,然后我尝试重新生成 grub.cfg 文件:

grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg

但是它失败并显示以下消息:

WARNING: Failed to connect to lvmetad. Falling back to device scanning.
WARNING: Failed to connect to lvmetad. Falling back to device scanning.
WARNING: Failed to connect to lvmetad. Falling back to device scanning.
WARNING: Failed to connect to lvmetad. Falling back to device scanning.
device-mapper: reload ioctl on osprober-linux-sdd1 failed: Invalid argument
Command failed
done

然后我忽略错误并继续安装 grub:

grub2-install /dev/sda

输出结果如下:

Installing for x86_64-efi platform.
EFI variables are not supported on this system.
EFI variables are not supported on this system.
Installation finished. No error reported.

当我重新启动时,我得到了 grub 提示符。现在,我认为问题在于 vmlinuz 和 initrd 都找不到(当然,因为我删除了 /dev/sda2),但我找不到重建它们或使系统启动的方法。

我能做什么?有没有办法从实时媒体重建这些文件?我试图挽救的系统在 EFI 模式和 LVM 上运行 Fedora 25 64 位。

答案1

这是您可以尝试修复系统的通用方法。软件包名称可能因发行版而异,因此您可能需要谷歌搜索一些具体信息。

  1. 启动到实时媒体
  2. 将您的硬盘根分区挂载到某处(例如/mnt)。
  3. 在此根目录内安装所有系统必需的分区 - 您的分区/boot以及您可能拥有的任何其他分区。
  4. -o bind使用文件夹安装/dev/proc/sys从实时媒体根目录进入您的硬盘根目录/mnt
  5. 现在你可以安全地 chroot 到你的/mnt。它应该会给你一个功能齐全的系统。
  6. 重新安装 grub 包并运行 mkinitramfs 或者更好的是重新安装 linux 内核。
  7. 生成你的 grub 配置并将 grub 安装到 MBR(如果你使用它),你现在应该拥有所有必要的内容。
  8. 退出 chroot 返回实时媒体并以相反的顺序卸载所有内容。
  9. 尝试重新启动进入原来的系统。

编辑: 通过 chrooting,您可以进入本地可写磁盘安装的环境。除了已运行的进程和内核之外,所有库和可执行文件都在此环境中使用 - 因此您将能够使用已安装的包管理器和包数据库。安装/dev/proc/sys必要的,以便您能够访问硬件并控制进程,您需要它才能在 中生成新的 linux 映像/boot、正确配置 grub 并访问网络以下载包。如果您必须使用来自其他发行版的实时媒体,则 Chrooting 特别有用。

至于重新安装 grub - 不同发行版的软件包名称可能不同,但重新安装 grub* 不会造成任何损害。不要忘记,仅安装软件包可能还不够。您可能还需要grub-install在设置配置后运行。

答案2

我遇到过类似的问题,我意外删除了启动分区。@Marek 的回答对我而言非常有用。作为参考,我将写下我使用的命令(因为 @Marek 的回答很笼统,所以我不得不在线搜索一些命令)

我有一台 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 专有驱动程序。

答案3

我建议您首先尝试启动修复磁盘,它将修复大多数 MBR 问题。本文可能也会派上用场。https://www.linux.com/learn/how-rescue-non-booting-grub-2-Linux

相关内容