以LVM安装的fedora重装windows后的修复引导过程

时间:2022-06-25 19:30:25

首先,吐槽一下标题的长度,接下来就是正文了(^_^)

背景

由于本人Win7系统已经卡到了不能忍受的地步,所以决定重装win8,但安完后发现引导项并没有我的fedora,用EasyBCD也无法找到fedora的引导。
在多方搜索后,发现我安装时使用了LVM逻辑卷管理方式(LVM是什么这里就不多说了,大家可以百度),并不像一般的分区那样/boot恰对应一个/dev/sda?(?表示具体的分区号),而是所有空间一起对应一个/dev/sda?,而在其中,通过/dev/mapper/(mapper实际上是LVM卷组的逻辑名,这里应该是fedora的默认名称) 具体分配挂载位置。知道了这点,我们就可以用刻好的linux引导盘来手动修复grub了。
不会的同学可以参考Arch Linux安装手册,只用看挂载分区,和建立grub两部分就好。

步骤

  1. 准备一个linux引导盘,只要是linux系统都可以,我用的是刻有Ubuntu14.04的U盘。
  2. 重启,按F12(这个具体看个人电脑),选择Boot方式从usb设备启动
  3. 进入linux环境的命令行模式,或是图形界面的terminal终端。
  4. fdisk -l 找到Linux所在的盘。输入命令后,会显示/dev/mapper/各LVM逻辑卷的信息,找到root,
  5. 挂在找到的root分区。

    sudo mount /dev/mapper/root /mnt
  6. 挂载/dev,/proc,/sys,/run,/var。如果不挂载,你会发现你在chroot后的系统中,这些文件都为空。

    sudo mount -o bind /dev /mnt/dev
    sudo mount -o bind /proc /mnt/proc
    sudo mount -o bind /var /mnt/var
    sudo mount -o bind /sys /mnt/sys
    sudo mount -o bind /run /mnt/run
  7. chroot进入目标环境

    chroot /mnt /bin/bash
  8. 建立grub的启动项

    grub2-install --target=i386-pc --recheck /dev/sda
    //默认的grub2-install /dev/sda好像也可以,但为了保险起见,还是写全点吧

    这里可能会报错

    bash-4.3# grub2-install --target=i386-pc --recheck /dev/sda
    Installing for i386-pc platform.
    /run/lvm/lvmetad.socket: connect failed: No such file or directory
    WARNING: Failed to connect to lvmetad. Falling back to internal scanning.
    /run/lvm/lvmetad.socket: connect failed: No such file or directory
    WARNING: Failed to connect to lvmetad. Falling back to internal scanning.
    /run/lvm/lvmetad.socket: connect failed: No such file or directory
    WARNING: Failed to connect to lvmetad. Falling back to internal scanning.
    Installation finished. No error reported.

    我查了下资料,在https://wiki.archlinux.org/index.php/GRUB找到了解释

    Warning when installing in chroot

    When installing GRUB on a LVM system in a chroot environment (e.g. during system installation), you may receive warnings like /run/lvm/lvmetad.socket: connect failed: No such file or directory or WARNING: failed to connect to lvmetad: No such file or directory. Falling back to internal scanning. This is because /run is not available inside the chroot. These warnings will not prevent the system from booting, provided that everything has been done correctly, so you may continue with the installation.

所以,按上面的说法,我们不用去管这个警告,可以重启去检查结果了。如果顺利,这时就能看见熟悉的fedora的grub引导界面了。

虽然成功地解决了引导项的修复问题,但这也说明win8是无法直接找到LVM机制下的linux boot分区,从而引导的。所以,只有以grub方式引导才有可能双系统了。当然如果不用LVM卷管理,那就没这么多问题了。