无忧启动论坛

标题: 优盘实现 EFI+传统BIOS多重启动的粗浅思路 [打印本页]

作者: quya    时间: 2014-4-28 13:58
标题: 优盘实现 EFI+传统BIOS多重启动的粗浅思路
本帖最后由 quya 于 2014-4-30 12:43 编辑

本文根据前文 抛砖引玉:优盘EFI Shell 安装系统及脚本的应用 引申而来


目的:优盘能传统启动, 能EFI启动win8, win7安装盘, PE

准备阶段: 以一个32G优盘为例,我将之分为4个分区,第一个分区20G, 格式EXFAT, 用来储存日常数据或者ISO安装盘, 第2,3个分区,NTFS格式,每个分区4-5G,将win7,win8 iso原安装盘分别解压至此, 最后一个分区500-700mb, fat32格式, 用来存放PE和EFI Shell 启动文件。分区软件可用cfadisk驱动,因为安装之后能看到优盘所有分区,便于编辑。完成之后保留或者卸载这个驱动都可以。

传统启动实现办法: 用bootice写入grubdos至第4分区, 并将第四分区激活,因为大多数PE合盘采用的是grubdos启动 (如果不是,请根据PE采用不同的启动办法), 然后将你喜欢的PE ISO盘解压至该盘。

EFI启动办法:先将EFI Shell文件 (你可以下载我的附件,里边包含了脚本)拷贝至fat分区 \efi\boot 目录, 如果该目录有原来的PE文件, 覆盖即可。再将bootmgfw.efi (我想这个文件只是调用 efi\microsoft\boot\bcd )分别拷贝至2-4个分区的根目录, 分别改名 win8.efi, win7.efi, pe.efi即可。

脚本内容如下:

Startup.nsh 类似于dos的autoexec, 能自动执行


echo -off

for %i in fs0 fs1 fs2 fs3 fs4 fs5 fs6 fs7 fs8 fs9 fsa fsb fsc
if exist %i:\efi\boot\ntfs.efi then
%i:
goto loadntfs
endif
endfor

:loadntfs

load \efi\boot\ntfs.efi

cls

echo 1- Installation of Windows 8
echo 2- Installation of Windows 7
echo 3- Windows PE


Echo Enter choice and press Enter


1.nsh 启动安装win8的脚本,其他2个类似, 因EFI Shell 无用户输入等命令,所以只能用这种类似的但实际上只是调用另一个脚本的办法来实现。


echo -off

for %i in blk0 blk1 blk2 blk3 blk4 blk5 blk6 blk7 blk8 blk9 blka blkb blkc blkd blke blkf blkg
if exist %i:\win8.efi then
%i:
goto act
endif
endfor

:act

win8


几点说明:


1. 上边提到的某些文件的安放目录其实可以随意的, 只是需要修改脚本。

2. cfadisk驱动只对本机有效, 在其他机器只能看到优盘的第一个分区。

3. 我下载了无忧论坛的2个pe(无垠和HPY),运行不是太好, 原因未知。 2个pe都能在传统模式下出启动菜单,但都无法启动xp, 2003 pe, 无垠的PE能启动win8 64 位PE, 无32位, HPY PE能启动32位win8 pe, 却无法启动64位的。而在EFI Shell下, 似乎出loading 画面之后都无法启动, 也许无垠的能启动, 但我忘记了。因为win8,win7 安装盘都能启动, 我只能认为PE的兼容性有问题, 如果2位PE制作者能看到本文, 希望研究一下这个问题, 谢谢。 本人对PE是一窍不通的。

4. 如果将2-3分区格式化成fat32, 那么在bios启动之时按F12 选择启动之时, 就会出现多个UEFI的启动, 分别代表win8,win7, PE, 只是名称都一样,你得记住正确的顺序, 而且默认启动的都是\efi\boot\下的bootx64.efi,不一定是你希望的,当然如果你习惯这样, 不用脚本也是可以的。


PS: 如果你一路看到这儿, 我想对你说声对不起, 因为经过楼下同学提醒,我的办法虽然管用, 却也不用如此繁琐的办法。 我的方法简直是脱裤子放屁, 多此一举, 虽然也许在某些场合对某些同学有点点启发作用。

正确的做法就是只把优盘划成2个分区, 第一分区exfat, 放各种iso安装盘以及你的数据, 第二分区fat 放一个支持efi+传统bios双启动的pe (推荐阿弥陀佛的,因为在我的实验中均能成功启动), 然后加载各种iso文件, setup即可。

相比量产, fabinst之类的多分区, 隐藏分区办法, 我的做法似乎更简单有效。

EFI boot.zip

285.57 KB, 下载次数: 626, 下载积分: 无忧币 -2


作者: fujianabc    时间: 2014-4-28 15:26
楼主看来是本坛efi shell脚本的先锋了
作者: yaojy    时间: 2014-4-28 17:25
如果仅是安装系统和启动PE,两个分区已经足够,一个Exfat,用于存放系统镜像(可以将多个install.wim集合到一起,放到一个ISO中);一个efi分区,用于存放x64的PE或RamOS和进行UEFI启动。
作者: yaojy    时间: 2014-4-28 20:57
yaojy 发表于 2014-4-28 17:25
如果仅是安装系统和启动PE,两个分区已经足够,一个Exfat,用于存放系统镜像(可以将多个install.wim集合到 ...

EFI分区可以启动x64的Win7/8PE,PE下可以加载保存在其它分区的系统ISO镜像。挂载镜像,双击运行程序setup.exe就可以安装系统了

作者: qj_tzy    时间: 2014-5-1 16:59
在你的指点下,我实现双分区USB盘的双启问题。

我原来是这样作的:将双启分区为第一分区、拷入双启文件并设好主引导记录或分区引导记录;第二分区为用户数据分区并设为可见分区,供用户存放有关数据用。但这样在实机上只能bios方式启动,在虚拟机上可uefi方式启动。

现在,按你的指点,我把双启动分区调整为最后一个分区(我感觉这是关键),用户数据分区调整为第一分区并设为可见分区,其他作法未变。这样成功在实机上实现了双启。

现在要请教的是,为何须把双启动分区调整为最后一个分区才能实现双启,谢谢!
作者: 2012hsj17    时间: 2014-5-1 19:48
efi\boot\ntfs.efi 完全可以放\ntfs.efi呀。
作者: 2012hsj17    时间: 2014-5-1 20:00
就会出现多个UEFI的启动, 分别代表win8,win7, PE, 只是名称都一样,你得记住正确的顺序, 而且默认启动的都是\efi\boot\下的bootx64.efi,不一定是你希望的,当然如果你习惯这样, 不用脚本也是可以的。

这个可能会有问题,不一样的主板有可能排序是反过来的。
作者: ali88home    时间: 2014-5-2 09:34
既然是引导BCD,直接把win8,win7, PE等等。。。制作在一起就可以了。

测试了这样方式,觉得使用Refind来管理,更好一些。

在PE使用WinNTSetup来安装,好像又更直接,成功率高,不会找不到驱动程序,这是实际操作过几多个系统后的感觉。
作者: atie2001    时间: 2014-5-8 22:10
完全看不懂,膜拜楼主

作者: 行走江湖    时间: 2014-12-21 16:52
学习中...
作者: houyan0112    时间: 2015-8-23 17:56
先想分享,下载了
作者: hlmwyqd    时间: 2015-10-5 11:11
膜拜楼主,努力学习
作者: Mindfly    时间: 2016-11-23 11:19
收藏学习你的方法,谢谢
作者: wuhenxpe    时间: 2017-6-13 09:45
for %i in blk0 blk1 blk2 blk3 blk4 blk5 blk6 blk7 blk8 blk9 blka blkb blkc blkd blke blkf blkg
if exist %i:\win8.efi then
%i:

这个命令运行报错




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