无忧启动论坛

标题: grub2 实现 legacy模式下运行 gpt上的 win,内附多个有用脚本。 [打印本页]

作者: dos时代菜鸟    时间: 2018-6-21 21:27
标题: grub2 实现 legacy模式下运行 gpt上的 win,内附多个有用脚本。
本帖最后由 dos时代菜鸟 于 2018-6-22 15:44 编辑

这个想法完全是突发的,因为我很久没有 看论坛学习,这几天 看到一个 关于 gpt 上 bios-boot-partition 的信息,想到的,
有人说 legacy 下的硬盘 都不大,没必要弄成 gpt ,可是 我还是被 gpt 的优势所吸引,无奈 本人电脑是古董,不知道 我下面的 “招数” 对于 legacy 下操作 大于2T 的 gpt硬盘会是啥结果。

掣肘的地方: legacy的 bootmgr 不能在 gpt 结构上运行。那么,我想在 legacy下 向 gpt 硬盘上安装个win10 ,该咋办?
这种微软引导器方面的天然不足,导致我们必须考虑用另一种 引导器。用 legacy 的 grub2 ,但是 grub2 实在没有 grub4dos 用着顺手,于是有了下面的事情。

下面这个例子 是把一个 gpt 结构的 u盘 弄成能够在 legacy 下启动进入 win8pe.x64

一、用 diskgen 将u盘 分区成gpt 结构并建立 一个 bios-boot-partiton 如下图


二、把事先 编辑好的 grub2 的 core.img 和 boot.img 安装到 上一步做好的 gpt u盘中。
用这个 实现安装 Legacy_grub2-2-GPT.7z (367.02 KB, 下载次数: 89) 运行里面的  install.cmd


grub2 会自动找到 /boot/grub/grub.cfg 作为配置文件 调用 grub4dos
三、把 grub4dos 复制到 u盘
把这个 解压缩 到 u盘 2.2-legacy-grub2_load-grub4dos.7z (130.69 KB, 下载次数: 81)    /boot/grub 中
这里面 就包含了 上面提到的  grub.cfg 以及 grub4dos
供grub2 调用 的grub.cfg
  1. #如果以bios 模式启动 ,发现 console 模式 无法显示中文
  2. if  [ ${grub_platform} = pc ] ;then
  3.           if search --set -f /boot/grub/grub4dos ;then
  4.             insmod ntldr
  5.             clear
  6.             ls /
  7.             echo boot......
  8.             if ntldr /boot/grub/grub4dos ;then boot ;fi
  9.           else
  10.             echo No /boot/grub/grub4dos !
  11.           fi
  12. fi     
复制代码
grub4dos 其实就是 grldr ,他会调用  /boot/grub/menu.lst
这里只是一个样例,如下:
  1. timeout 30
  2. default 0
  3.   
  4. title 0.win8pe x64
  5.   find --set-root /boot/pe/bootmgr.vhd.gz
  6.   map --mem /boot/pe/bootmgr.vhd.gz (hd)
  7.   map --hook
  8.   chainloader (hd-1,0)/bootmgr
  9.   boot
  10.   
  11. title 1.dostools
  12.     find --set-root /boot/grub/dostools.lzma
  13.     map --mem /boot/grub/dostools.lzma (fd0)
  14.     map --hook
  15.     chainloader (fd0)/io.sys
  16.     boot
复制代码

四、创建 一个 vhd ,用来放置 调用 pe wim 的 legacy -- bootmgr
通过 磁盘管理器 可以创建 vhd ,并将 vhd 初始化 为 mbr 格式,16M大小就够用了,格式成 fat 类型。
这里有个现成的 bootmgr.vhd.7z (2.46 MB, 下载次数: 77) 当然,要 打开以后 通过 bootice  修改里面的 bcd 使其能够调用 你u盘上的  pe wim ,
挂载/卸载 vhd 可以用 这个脚本 vhd.cmd.7z (538 Bytes, 下载次数: 41)
把 vhd 挂载,向vhd 中 写入一个 bootmgr 引导体系,可以用 这个 http://bbs.wuyou.net/forum.php?m ... 404993&fromuid=1198
至于 bcd 的修改还是要用 bootice

vhd 的操作 必须放在没有 被压缩的 ntfs 分区上进行,把做好的 vhd 放回 u 盘,也可以 压缩成 gz 供 grub4dos 调用。

五、根据自己的情况 把 你的 pe wim 复制到 u盘
如图



--------------
如果 要 启动 gpt 硬盘上的 pe wim 或者 vhd 或者 winload.exe 都可以这么做,唯一不同的就是 打开 bootmgr.vhd 后修改 里面的 bcd 是不同的,
另外 需要注意的就是 bcd 中 的目标指向,不能用  [boot] [locate] 而要 明确指明 具体位置。


跟在 mbr 硬盘上 操作 bootmgr+bcd  没啥太大区别,就是多了一步 挂载/卸载 vhd 而已。处理 bcd时注意 要指明具体 device/osdevice 的路径


安装 win10 我用 这个 http://bbs.wuyou.net/forum.php?m ... 404803&fromuid=1198
先把bootmgr.vhd 挂载上,然后 就是 脚本负责的事情了。






作者: q8155128    时间: 2018-6-21 22:28
菜鸟就是牛......


作者: dos时代菜鸟    时间: 2018-6-21 22:32
本帖最后由 dos时代菜鸟 于 2018-6-21 22:36 编辑

q8155128 发表于 2018-6-21 22:28
菜鸟就是牛......


作者: dos时代菜鸟    时间: 2018-6-21 22:48
是这种奇葩的 想法 没有多大现实意义,纯属 研究而已。过程中 弄明白了一些 东西。
作者: 2010sya    时间: 2018-6-22 05:57
好好研究一下
作者: yjqd    时间: 2018-6-22 08:19
确实,有时折腾的快乐在过程,不一定在最终结果
作者: levinsky    时间: 2018-6-22 08:24
一脸茫然 不敢说话
作者: 2012andyle113    时间: 2018-6-22 08:54
支持折腾,说不定什么时候可以用上
作者: 20121010168    时间: 2018-6-22 09:28
支持折腾,这种很适合特殊情况下使用!
作者: dos时代菜鸟    时间: 2018-6-22 09:42
这个 u盘,在 只有 legacy bios 的老电脑上 没问题,但是 在  支持 uefi 的电脑上,通过 其兼容模式的 legacy bios 启动,却不一定成功。因为那个 兼容模式的 legacy bios 可能不认 gpt 结构上的 bios-boot-partition ,同时它找不到 活动分区,就会失败。

如果往 u盘 放入 uefi 支持的那几个启动文件的话, 鉴于 以前论坛也有 帖子说 如果 电脑上存在 mbr系统,可能 这个 gpt 结构的u盘 会启动不了 .
我在 我的几个老爷机上测试,只有 legacy bios 的电脑 没问题i,反倒在 存在 uefi 支持的电脑 不行,而且 以uefi 方式启动 u盘上的 pe8,如果电脑本地存在 mbr 结构的,也是 到不了界面,或者提示i 0xc0000225 错误。把 硬盘线拔掉,就能 进入。
uefi 状态下,如果电脑 本地硬盘 也是 gpt 结构的,就能顺利接入 pe8,即使 本地硬盘 gpt 上没有任何系统。

这样可能就麻烦了,如果我想用 gpt 结构的u盘 给 一个 uefi 下legacy bios 兼容模式下的 mbr 硬盘中安装系统或者搞维护,就可能面临 u盘启动失败。


所以,目前看,u盘还是 做成 mbr 结构的比较好。
作者: eastmz    时间: 2018-6-22 09:49
牛叉的杰作
作者: dos时代菜鸟    时间: 2018-6-22 10:02
也可能 gpt 模式下 efi 的启动 模式 放在 efi 分区,可能 主板uefi  会有啥动作指向了 efi 分区。而  mbr 结构下不存在  efi 分区的概念.我再试试看。只要这个 u盘 没折腾坏,就行。
作者: dos时代菜鸟    时间: 2018-6-22 10:46
测试结果,发现,跟在不在efi分区没关系。 uefi模式启动, 当只有mbr硬盘时,gpt u盘上的win8pe提示0xc0000 225错误 当本地既有mbr又有gpt硬盘时,gpt结构的u盘上的win8pe卡死在 四叶 界面。但重启,通过grub2-uefi启动,可以调用本地gpt硬盘上,efi分区中的efi启动文件进入本地存储在mbr硬盘上的win10的vhd. 当本地只有gpt硬盘,或没有硬盘,gpt结构的u盘上的win8pe能正常进入。  这难道是win8pe的问题?
作者: 新空气    时间: 2018-7-15 00:42
学习了,谢!
作者: xyyit    时间: 2018-7-15 21:51
本帖最后由 xyyit 于 2018-7-15 22:06 编辑

非常好!!目前GPT的U盘可以在Legacy BIOS下GRUB2→G4D→bootmgr.vhd→Win to go的Win10了!!
不知道楼主有没有完整的Legacy_grub2-2-GPT分享给我们菜鸟一下,以供GPT的U盘在Legacy BIOS下GRUB2→Ubuntu或者Deepin等!
我改了grub.cfg,使其不直接加载G4D,引导Deepin等报错!甚至连Reboot都不行!


  1. set timeout=10
  2. set default=0

  3. #加载文件系统支持
  4. insmod part_msdos
  5. insmod ntfs
  6. insmod ext2
  7. insmod exfat
  8. insmod btrfs

  9. menuentry "[D] Deepin" --hotkey=d {
  10.         search --no-floppy --fs-uuid --set=root 18cd6876-ca78-4dc6-bd31-f3a8b751f2c6
  11.         linux        /boot/vmlinuz-4.15.0-21deepin-generic root=UUID=18cd6876-ca78-4dc6-bd31-f3a8b751f2c6
  12.         initrd        /boot/initrd.img-4.15.0-21deepin-generic
  13. }

  14. menuentry '[P] Phoenix OS' --hotkey=p --class android-x86 {
  15.         search  --no-floppy --set=root --file /PhoenixOS/kernel
  16.         linux /PhoenixOS/kernel quiet root=/dev/ram0 androidboot.hardware=android_x86 SRC=/PhoenixOS vga=788
  17.         initrd /PhoenixOS/initrd.img
  18. }

  19. #其他菜单
  20. menuentry "[R] Reboot" --hotkey=r {reboot}
  21. menuentry "[H] Halt" --hotkey=h {halt}
复制代码

作者: xyyit    时间: 2018-7-15 21:59
我的U盘为MBR分区表时,uefi始终进不了win to go Win10系统,始终卡在转圈圈的界面,转换为GPT分区表时可以正常进入系统,所以才找到楼主的帖子。
作者: dos时代菜鸟    时间: 2018-7-16 08:32
本帖最后由 dos时代菜鸟 于 2018-7-16 08:34 编辑
xyyit 发表于 2018-7-15 21:51
非常好!!目前GPT的U盘可以在Legacy BIOS下GRUB2→G4D→bootmgr.vhd→Win to go的Win10了!!
不知道楼主 ...


把 grub2 里面的 i386-pc 文件夹 放到 u盘\boot\grub 文件夹
如果 只用 grub2 而不用 grub4dos 可能还需要 memdisk
作者: 2011npwjm    时间: 2018-7-16 08:47
谢谢楼主的分享
作者: 2012wuzhong    时间: 2018-7-16 09:42
还有一种方法,大致原理:
bios启动->xorboot主引导(位于0号磁盘)->xorboot辅助代码(位于某2个分区之间)->grldr(位于系统分区)->g4d模拟一个img为hd1并启动其中的BOOTMGR->BOOTMGR根据虚拟硬盘hd1中的bcd文件启动gpt分区中的win7x86系统。
参考:“gpt单硬盘win7x86差分vhd系统”,http://user.qzone.qq.com/1543764927
作者: xyyit    时间: 2018-7-16 13:02
dos时代菜鸟 发表于 2018-7-16 08:32
把 grub2 里面的 i386-pc 文件夹 放到 u盘\boot\grub 文件夹
如果 只用 grub2 而不用 grub4dos 可能还 ...

谢谢!我在论坛里找了个grub2复制了i386-pc文件夹出错,后来下载了官方的grub-2.02-for-windows成功了!grub2直接加载vhd失败!grub4dos还是要调用的。
作者: devilma    时间: 2018-7-17 10:11
标记一下!!谢谢分享!
作者: baijeg20    时间: 2018-11-17 20:18
可以吗?
作者: EGT丶Maker    时间: 2018-12-2 00:52
厉害厉害
作者: 蓝星明月    时间: 2020-6-9 10:11
谢谢!!!
作者: qipinw    时间: 2022-6-27 21:47
使用楼主提供的工具,legacy+gpt+ima成功启动32位Win7,只是想尽各种办法无法激活系统,不知道楼主用vhd的系统是否能够激活。
作者: dos时代菜鸟    时间: 2022-6-28 09:52
qipinw 发表于 2022-6-27 21:47
使用楼主提供的工具,legacy+gpt+ima成功启动32位Win7,只是想尽各种办法无法激活系统,不知道楼主用vhd的 ...

找找激活工具吧

我都是用自制的 WES7,不涉及激活问题。
作者: qipinw    时间: 2022-6-28 13:35
我不是说你的工具有问题,工具很给力。我用的ima映像文件,就是精简化的boot文件夹,Mbr模式,bootmgr和bcd两个文件,grub调用这个ima,我对激活原理不清楚,会不会因为windows激活时找不到真实的启动分区,找不到bcd,造成无法激活?网上的工具无论是否有病毒,我都试了很多,都无法激活,最终只好挂一片小U盘来启动gpt分区的系统。
作者: dos时代菜鸟    时间: 2022-6-28 15:22
qipinw 发表于 2022-6-28 13:35
我不是说你的工具有问题,工具很给力。我用的ima映像文件,就是精简化的boot文件夹,Mbr模式,bootmgr和bcd ...

win7 激活 大部分都是 通过 类似grub4 引导方式模拟 品牌机的方式实现的。我以前用过,后来 有了 wes7 ,就自己 定制了一个 wes7 封装起来,再也不涉及激活的问题,到了现在都用 Win10 了,更没这问题了。也就 不记得了。
作者: zootoo    时间: 2022-10-5 22:05
感谢分享




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3