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

2018-08-02 15:00:12 +08:00
 lxy

之前也是双系统,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
2956 次点击
所在节点    Linux
9 条回复
tempdban
2018-08-02 15:05:51 +08:00
XP 是 htldr win10 就打扰了
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
2018-08-02 15:50:11 +08:00
UEFI 的启动都存在 ESP 分区下的 EFI 文件夹
用 PE 在 sdb1 下用 bcdboot 重建
tarekyoog
2018-08-02 16:00:17 +08:00
```
pacman -S ntfs-3g os-prober
grub-mkconfig -o /boot/grub/grub.cfg
```
Oo0
2018-08-02 16:02:09 +08:00
ls 正解
lxy
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
2018-08-04 10:49:34 +08:00
@lxy 我之前也碰到过,解决的办法是弄一个 win 系统光盘,在安装过程中有一个“修复计算机”,点击修复一下就能把启动项添加进去,可以试试看。
zzsx1937
2018-08-04 12:11:01 +08:00
128mb 不應該是 gpt 分區表裝 windows 必須的 MSR 分區麽?沒這個分區基本無法引導 windows 吧。
pcmid
2018-08-05 01:55:00 +08:00
4 楼可解

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/476284

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX