双系统重建引导

目录

目录

之前装双系统都是先安装win10,然后安装linux发行版,这样引导是grub2引导最后留下了,基本上问题不是很大。但是最近作死,现状的manjaro然后再安装的win10,由于win10的引导覆盖了grub2,然后win10引导又不认linux启动项,造成了无法启动manjaro,查阅了一些资料记录一下。

核心思想就是引导仍然使用grub2,用grub2引导manjaro和win10系统,所以下面主要是安装grub2,这里我使用livecd完成的安装和配置,我自己的是用UEFI+GPT引导的64位系统,不是用于老的。

  • 查看基本分区情况

    1
    2
    3
    4
    5
    6
    
    # fdisk -l
      
    /dev/sda1 efi
    /dev/sda2 /
    /dev/sda3 swap
    /dev/sda4 win10
    
  • 挂载chroot所需的分区

    1
    2
    3
    4
    5
    6
    
    # mount /dev/sda2 /mnt
    # mkdir /mnt/efi
    # mount /dev/sda1 /mnt/efi
    # mount --bind proc /mnt/proc
    # mount --bind dev /mnt/dev
    # mount --bind sys /mnt/sys
    
  • chroot到新系统中安装gurb2并生成grub.cfg

    1
    2
    3
    4
    5
    6
    7
    
    # chroot /mnt
      
    ## 安装grub2 
    # grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=GRUB
      
    ## 配置grub2
    # grub-mkconfig -o /boot/grub/grub.cfg
    

    **在安装grub2的时候可能会出现一个错误 EFI variables are not supported on this system **

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    ## 查阅了一些资料,发现原因是efivars 模块没有加载,可以退出chroot环境加载该模块。
      
    ## 退出chroot环境
    # exit
      
    ## 加载efivars
    # modprobe efivars
      
    ## 进入chroot环境继续操作
    # chroot /mnt
    

    如果加载的时候出现错误提示modprobe: FATAL: Module efivars not found in directory /lib/modules/

    1
    2
    
    ## 在chroot环境中挂载efivars,然后再安装grub2
    # mount -t efivars efivars /sys/firmware/efi/efivars
    
  • 添加win10启动项

    因为我的livecd没有网络,所以这部分最好是重启进入Manjaro中添加启动项,主要是利用os-prober来探测win10的启动项可能需要ntfs-3g的支持。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    
    ## 重启进入正常的Manjaro 系统中打开终端
    # pacman -Sy ntfs-3g
      
    ## 挂载win10硬盘,我这里是/dev/sda4
    # mount /dev/sda4 /mnt
    # os-prober partition /dev/sda4 /mnt
    # os-prober
      
    ## 上面的命令基本上就可以探测到并做好配置了,下面只需要更新一下grub配置文件
    # update-grub
    ## 输出的信息中可以看到windows启动项的配置文件。
      
    ## 可以修改/etc/default/grub配置文件来改动默认启动和引导界面的时间
    # vi /etc/dafault/grub 
    ## 记得更新配置文件
    # update-grub