V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
lxy
V2EX  ›  Linux

这种情况应该怎么把 window 加到 grub 启动项?

  •  
  •   lxy · 2018-08-02 15:00:12 +08:00 · 3117 次点击
    这是一个创建于 2298 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前也是双系统,sdb 是 ubuntu,有一个 128M 的小分区,可能是 /boot,我用 dd 备份了出来。

    现在 sdb 重新分区,换了 arch。我以为安装 grub 的时候会自动检测到 win7,但是没有。

    现在无法进入 windows 了,应该怎么把 windows 加入 grub 的启动项呢?

    sda 是 win7,sda1 是 C 盘,sdb 是 arch。

    # lsblk
    NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    sda      8:0    0 238.5G  0 disk 
    |-sda1   8:1    0   100G  0 part 
    |-sda2   8:2    0     1K  0 part 
    `-sda5   8:5    0 138.5G  0 part 
    sdb      8:16   0 931.5G  0 disk 
    |-sdb1   8:17   0   500M  0 part /boot
    |-sdb2   8:18   0   200G  0 part /home
    `-sdb3   8:19   0   731G  0 part /
    
    # fdisk -l
    Disk /dev/sda: 238.5 GiB, 256060514304 bytes, 500118192 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x3cf86319
    
    Device     Boot     Start       End   Sectors   Size Id Type
    /dev/sda1  *         4096 209725496 209721401   100G  7 HPFS/NTFS/exFAT
    /dev/sda2       209725497 500118191 290392695 138.5G  f W95 Ext'd (LBA)
    /dev/sda5       209725560 500118191 290392632 138.5G  7 HPFS/NTFS/exFAT
    
    
    Disk /dev/sdb: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    Disklabel type: gpt
    Disk identifier: EE31D1C0-6E51-404A-90FC-E1C7AEB1EACC
    
    Device         Start        End    Sectors  Size Type
    /dev/sdb1       2048    1026047    1024000  500M EFI System
    /dev/sdb2    1026048  420456447  419430400  200G Linux filesystem
    /dev/sdb3  420456448 1953525134 1533068687  731G Linux filesystem
    
    第 1 条附言  ·  2018-08-03 19:43:58 +08:00
    折腾了很久,最后只能做一个比较妥协的方法。

    U 盘 PE 启动,在 sda1 (也就是 C 盘)重建 MBR。如果需要切换到 win7 系统,可以在启动时按 F12 选择从 sda 启动(主板提供的比较方便的功能),就直接绕过 GRUB 引导了。

    以后有时间再看看怎么加上。
    9 条回复    2018-08-05 01:55:00 +08:00
    tempdban
        1
    tempdban  
       2018-08-02 15:05:51 +08:00 via Android
    XP 是 htldr win10 就打扰了
    alex8
        2
    alex8  
       2018-08-02 15:37:20 +08:00
    arch 没用过,应该和 CentOS 同理

    1. 安装 ntfs 分区支持工具
    rpm -ivh ntfs-3g*.rpm

    2. 更新 grub
    grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

    然后 Windows 启动项就有了
    7654
        3
    7654  
       2018-08-02 15:50:11 +08:00
    UEFI 的启动都存在 ESP 分区下的 EFI 文件夹
    用 PE 在 sdb1 下用 bcdboot 重建
    tarekyoog
        4
    tarekyoog  
       2018-08-02 16:00:17 +08:00 via Android
    ```
    pacman -S ntfs-3g os-prober
    grub-mkconfig -o /boot/grub/grub.cfg
    ```
    Oo0
        5
    Oo0  
       2018-08-02 16:02:09 +08:00
    ls 正解
    lxy
        6
    lxy  
    OP
       2018-08-03 01:01:38 +08:00
    问题的复杂性在于之前是 win7+ubuntu 双系统,直接启动是 ubuntu 的 uefi 模式,如果要进入 win7 可以通过选项引导到 win7 的 legacy 启动。以上这些估计都放在 ubuntu 的 /boot 分区,现在 ubuntu 的整个硬盘都被覆盖了,win7 完好。通常的自动化工具都是针对 windows 系统已有启动引导分区的情况,现在就是没有这个分区,只有引导到 arch 的。需要想办法加载系统 C 盘上的 bootmgr。

    网上找的资料,win7 启动过程,估计在 bootmgr 之前的都没了。
    BIOS –>MBR –>DPT –>PBR –> Bootmgr –>BCD –>Winload.exe

    更悲剧的是,不知道为什么之前 dd 备份的 ubuntu /boot 分区其实是空文件,全是 0 填充。
    swordspoet
        7
    swordspoet  
       2018-08-04 10:49:34 +08:00 via iPhone
    @lxy 我之前也碰到过,解决的办法是弄一个 win 系统光盘,在安装过程中有一个“修复计算机”,点击修复一下就能把启动项添加进去,可以试试看。
    zzsx1937
        8
    zzsx1937  
       2018-08-04 12:11:01 +08:00 via Android
    128mb 不應該是 gpt 分區表裝 windows 必須的 MSR 分區麽?沒這個分區基本無法引導 windows 吧。
    pcmid
        9
    pcmid  
       2018-08-05 01:55:00 +08:00 via Android
    4 楼可解
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2923 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 13:44 · PVG 21:44 · LAX 05:44 · JFK 08:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.