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

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

  •  
  •   lxy · 16 天前 · 1214 次点击

    之前也是双系统,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 条附言  ·  15 天前
    折腾了很久,最后只能做一个比较妥协的方法。

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

    以后有时间再看看怎么加上。
    9 回复  |  直到 2018-08-05 01:55:00 +08:00
        1
    tempdban   16 天前 via Android
    XP 是 htldr win10 就打扰了
        2
    sunweiqiang8   16 天前
    arch 没用过,应该和 CentOS 同理

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

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

    然后 Windows 启动项就有了
        3
    7654   16 天前
    UEFI 的启动都存在 ESP 分区下的 EFI 文件夹
    用 PE 在 sdb1 下用 bcdboot 重建
        4
    tarekyoog   16 天前 via Android
    ```
    pacman -S ntfs-3g os-prober
    grub-mkconfig -o /boot/grub/grub.cfg
    ```
        5
    Oo0   16 天前
    ls 正解
        6
    lxy   15 天前
    问题的复杂性在于之前是 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 填充。
        7
    swordspoet   14 天前 via iPhone
    @lxy 我之前也碰到过,解决的办法是弄一个 win 系统光盘,在安装过程中有一个“修复计算机”,点击修复一下就能把启动项添加进去,可以试试看。
        8
    zzsx1937   14 天前 via Android
    128mb 不應該是 gpt 分區表裝 windows 必須的 MSR 分區麽?沒這個分區基本無法引導 windows 吧。
        9
    pcmid   13 天前 via Android
    4 楼可解
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   实用小工具   ·   1870 人在线   最高记录 3762   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 17ms · UTC 13:53 · PVG 21:53 · LAX 06:53 · JFK 09:53
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1