Win10论坛

Win10正式版系统下载主题平板

重定义Modern UI,打造完美Windows全新体验

Windows10下载|安装|新手宝典|必备软件

搜索
查看: 8085|回复: 18

[技术] 抛砖引玉:优盘EFI Shell 安装 win8 系统及脚本的应用 [复制链接]

五星老土

Rank: 5Rank: 5Rank: 5

UID
590870
帖子
623
PB币
4598
贡献
0
技术
37
活跃
1129
发表于 2014-4-24 16:05:59 |显示全部楼层
本帖最后由 cjy__05 于 2014-7-21 13:15 编辑

最近搞了个3T的硬盘, 如何把系统装到该硬盘就成了个问题。

光盘安装自然是没问题的, 但光盘的速度无法恭维, 最要命的是叔已经不用光驱N年了。

优盘安装网上教程很多, 但大多数号称必须要格个4G左右的FAT32才行, FAT32多老的技术啊,我看着就揪心。

怎么办? 能不能FAT32分区少一点, 其他的格成NTFS (或者认为NTFS优盘的, EXFAT也行啊), 把主要安装文件放在 NTFS或者EXFAT分区上?

经过度娘的搜索, 借鉴各位先行者的探索, 我终于有了个比较满意的方案。


第一步, 先把优盘分成2个区,用那个DiskGenius分, 分好之后很纠结, 只能显示一个分区, 但后来发现真是妙, 另一个分区被无意隐藏了,好得很哪。

以32G优盘为例, 第一个分区分成31G左右, 余下100多MB格式化成FAT32, 其实FAT32 只要几MB就行, 如果想再放个PE,那么几百MB也行。
开始的时候要往FAT32放东西,系统只能显示第一个分区, 那么先把第一个分区删除了, 系统就能认出只有100多MB的FAT32分区了,等把EFI Shell的需要的文件拷贝到FAT32之后, 再恢复第一个分区,第二个分区就被隐藏了,真没想到还有这样的妙用!


网上有很多EFI Shell的下载, 一般这个压缩包根目录有个shell.efi的文件,还有个APPS的子目录,如果下载下来的文件有这样的结构, 那么恭喜你,下对了。

将这些文件拷贝到优盘FAT32的根目录,然后新建个efi\boot目录, 将shell.efi 移到 \efi\boot\, 然后改shell.efi 成 bootx64.efi, 这样就可以从优盘启动EFI Shell了。 至于为什么要这样做,我也不知道, 只知道缺少任何一步,优盘就无法启动EFI Shell。


第二步,让EFI识别NTFS分区,度娘告诉我,无忧驱动论坛的一个大神发现鬼佬有这么个驱动NTFS.EFI, 只要 load ntfs.efi 就行。我将这个文件拷贝到优盘根目录, 然后期望做个自动执行的脚本,将这句命令拷贝到startup.nsh里, 运行结果告诉我无法找到此文件。我再移到apps子目录, 以为很多命令都在这里,这里可能就是类似windows的system32目录,系统会自动找到,但依旧失望了。分析了运行过程, 发现原来映射的驱动器时时会改变, 一会儿FS0, 一会儿FS1,再来个BLK3之类的,真折腾人啊。 特别是运行了 map -r 之后,整个天翻地覆了, 驱动器到处乱跑,后来的事实证明 map命令根本不需要, 无论加什么参数。

第三步, 将我编制的startup.nsh拷贝到\efi\boot\下,ntfs.efi移到\apps下,(别的目录也行, 只是要修改脚本) 再将windows安装盘拷贝到第一个分区根目录,再多拷贝一个bootmgfw.efi (度娘或者windows安装目录里找)也到根目录, 这样就自动启动windows的安装程序了。

startup.nsh 源程序如下:

echo -off
if exist fs0:\apps\ntfs.efi then
set test "fs0:"
endif
if exist fs1:\apps\ntfs.efi then
set test "fs1:"
endif
if exist fs2:\apps\ntfs.efi then
set test "fs2:"
endif
if exist fs3:\apps\ntfs.efi then
set test "fs3:"
endif
if exist fs4:\apps\ntfs.efi then
set test "fs4:"
endif
if exist fs5:\apps\ntfs.efi then
set test "fs5:"
endif
if exist fs6:\apps\ntfs.efi then
set test "fs6:"
endif
if exist fs7:\apps\ntfs.efi then
set test "fs7:"
endif
if exist fs8:\apps\ntfs.efi then
set test "fs8:"
endif
if exist fs9:\apps\ntfs.efi then
set test "fs9:"
endif
if exist fsa:\apps\ntfs.efi then
set test "fsa:"
endif
if exist fsb:\apps\ntfs.efi then
set test "fsb:"
endif
load %test%\apps\ntfs.efi

if exist blk0:\bootmgfw.efi then
set test1 "blk0:"
endif
if exist blk1:\bootmgfw.efi then
set test1 "blk1:"
endif
if exist blk2:\bootmgfw.efi then
set test1 "blk2:"
endif
if exist blk3:\bootmgfw.efi then
set test1 "blk3:"
endif
if exist blk4:\bootmgfw.efi then
set test1 "blk4:"
endif
if exist blk5:\bootmgfw.efi then
set test1 "blk5:"
endif
if exist blk6:\bootmgfw.efi then
set test1 "blk6:"
endif
if exist blk7:\bootmgfw.efi then
set test1 "blk7:"
endif
if exist blk8:\bootmgfw.efi then
set test1 "blk8:"
endif
if exist blk9:\bootmgfw.efi then
set test1 "blk9:"
endif
if exist blka:\bootmgfw.efi then
set test1 "blka:"
endif
if exist blkb:\bootmgfw.efi then
set test1 "blkb:"
endif
%test1%\bootmgfw


为什么需要这么多的endif,我以为只要一个, 发现运行错误, 只能怪这个2b的shell脚本了。我本来还以为只要一个变量,只要重新赋值就行,后来证明我也错了, 所以不要怪我编这么繁琐的难看的脚本, 不是我的错。

本程序也只能应付大多数情况, 对于有好多硬盘,优盘,光盘的机器, 恐怕要修改下脚本了。因为脚本的编写只有这么几条简陋的命令, 没有dos里边 find for 之类的高级命令。 哦, 我错了, for命令也有, 只是...

2个疑问:

1. 本来按我的设想, 我在第一个分区建若干个子目录, 分别是win7, win8 之类的, 将安装盘分别拷入,然后只要执行类似 fsx:\win7\bootmgfw.efi 就能启动win7, fsx:\win8\bootmgfw.efi就能启动win8。 结果发现不行, \bcd 错误, 估计要改变 bcd 路径, 留待大家开发。懒惰的我还是这样布局的, 想换系统的时候直接将子目录的安装文件移到根目录,完了再移回去, 反正在一个分区, 移一下就2-3秒时间。

2. 启动efi shell, 有个1T的硬盘未分区,windows安装文件无法找到硬盘, 后来将它创建分区才可以(我随便创建了个MBR分区)。 当然我知道切换出去用diskpart可以创建分区,但不知道为什么会这样,这是个例还是所有未分区的都不能被EFI SHELL启动的windows安装程序识别? 留待大家验证, 并希望有人找到解决之道。


本文给大家提供个比较新颖的思路,希望大家加以完善。

如果你的本贴感兴趣,请继续移步至 优盘实现 EFI+MBR多重启动的粗浅思路
1

查看全部评分

Rank: 9

UID
732095
帖子
6230
PB币
23059
贡献
0
技术
1099
活跃
3013

Win10先驱者 远景技术达人 内幕消息 远景记者

发表于 2014-4-24 16:28:14 |显示全部楼层

点评

quya  不错, 看来我需要修改下脚本, 使之更简洁。  发表于 2014-4-24 16:41

Rank: 9

UID
732095
帖子
6230
PB币
23059
贡献
0
技术
1099
活跃
3013

Win10先驱者 远景技术达人 内幕消息 远景记者

发表于 2014-4-24 16:30:28 |显示全部楼层

点评

quya  原文需要2个优盘, 实际上是不需要的。  发表于 2014-4-24 16:42

五星老土

Rank: 5Rank: 5Rank: 5

UID
590870
帖子
623
PB币
4598
贡献
0
技术
37
活跃
1129
发表于 2014-4-24 16:52:25 |显示全部楼层
脚本应该可以简化成

echo -off

for %test% in fs0 fs1 fs2 fs3 fs4 fs5 fs6 fs7 fs8 fs9 fsa fsb
if exist %test%:\apps\ntfs.efi then
load %test%:\apps\ntfs.efi
endif
endfor

for %test1% in blk0 blk1 blk2 blk3 blk4 blk5 blk6 blk7 blk8 blk9 blka blkb
if exist %test1%\bootmgfw then
%test1%\bootmgfw
endif
endfor

尚未测试过。

Rank: 9

UID
60343
帖子
5735
PB币
23134
贡献
0
技术
17
活跃
1402

十一周年 7周年庆典勋章 8周年庆典勋章

发表于 2014-4-24 16:55:35 |显示全部楼层
不错。支持。

UID
3266415
帖子
8899
PB币
17801
贡献
0
技术
49
活跃
2415

远景技术达人

发表于 2014-4-24 17:18:27 |显示全部楼层
又一个UEFI安装的方式诞生了。
可我怎么也没有明白。
从win8就可以把镜像解压到U盘(F32)进行UEFI安装了。
可还要费尽周折探讨如此复杂的安装方式。
是微软提供的安装方式太简单,还是4G的U盘太贵了。

Rank: 9

UID
732095
帖子
6230
PB币
23059
贡献
0
技术
1099
活跃
3013

Win10先驱者 远景技术达人 内幕消息 远景记者

发表于 2014-4-24 17:25:43 |显示全部楼层

quya  原文需要2个优盘, 实际上是不需要的。

回覆: 很多朋友都只是用windows, 亦有很多沒用的小容量舊U盤.

進入win8 時期, MS 已在windows 安裝程序加進efi資料夾, 只需啟動efi\boot\boot64.efi(32位是 bootia32.efi)便會自動搞定, 即使是安裝 win7EFI 也只需把efi資料夾貼過去便行, 那些搞 bootmgfw, diskpart 搞GPT, 3個分區這些東西已經是過時了.

五星老土

Rank: 5Rank: 5Rank: 5

UID
590870
帖子
623
PB币
4598
贡献
0
技术
37
活跃
1129
发表于 2014-4-24 18:14:02 |显示全部楼层
一间坊 发表于 2014-4-24 17:18
又一个UEFI安装的方式诞生了。
可我怎么也没有明白。
从win8就可以把镜像解压到U盘(F32)进行UEFI安装了 ...

不是优盘太贵, 而是一个大容量优盘就可以搞定 N个系统安装, 否则的话一个优盘一个系统, 对于我频繁要帮人家或者单位安装的人来说, 实在不胜其烦。

还有,fat32的盘损坏的概率远比ntfs的要高,优盘越来越大, 损坏了重新格式化和拷贝也是很烦的。 不如烦一次, 几乎一劳永逸。

五星老土

Rank: 5Rank: 5Rank: 5

UID
590870
帖子
623
PB币
4598
贡献
0
技术
37
活跃
1129
发表于 2014-4-24 18:20:03 |显示全部楼层
FaiKee 发表于 2014-4-24 17:25
quya  原文需要2个优盘, 实际上是不需要的。

回覆: 很多朋友都只是用windows, 亦有很多沒用的小容量舊 ...

正因为我在win7 文件夹没找到efi\boot\boot64.efi, 所以才拷贝 bootmgfw的,同样是拷贝,只是拷贝不同的文件, 我认为没有过时不过时之分。

同样diskpart和图形界面搞分区,也只是方法不同,有人喜欢有人习惯, 我是没在安装界面找到硬盘,才迫不得已用diskpart的, 对于我来说,如果可以让windows出图形界面让我分区, 我也不愿意这样去做。 总之,多一种办法就是多条路。

点评

FaiKee  OK  发表于 2014-4-24 18:33

Rank: 7Rank: 7Rank: 7

UID
1233605
帖子
1009
PB币
1267
贡献
0
技术
0
活跃
1301
发表于 2014-4-24 18:33:18 |显示全部楼层
不错。支持。

Rank: 5Rank: 5Rank: 5

UID
2195190
帖子
1020
PB币
1168
贡献
0
技术
0
活跃
1066
发表于 2014-4-24 19:22:52 |显示全部楼层
复杂的事情简单化,是天才,简单的事情复杂化,是蠢才.

点评

ABC2Z  高!!!  发表于 2014-4-24 19:49

UID
3266415
帖子
8899
PB币
17801
贡献
0
技术
49
活跃
2415

远景技术达人

发表于 2014-4-24 19:28:35 |显示全部楼层
quya 发表于 2014-4-24 18:14
不是优盘太贵, 而是一个大容量优盘就可以搞定 N个系统安装, 否则的话一个优盘一个系统, 对于我频繁要帮 ...

其实我也是好奇,系统基本都是单位数据中心给装的。
要安装很多电脑是很辛苦的。

Rank: 7Rank: 7Rank: 7

UID
2456791
帖子
1619
PB币
1911
贡献
0
技术
15
活跃
1555

远景技术达人

发表于 2014-4-24 19:51:07 |显示全部楼层
用句俗话说:脱裤子放屁,多此一举。
解压缩ISO文件到FAT32的U盘很麻烦么?嫌麻烦,买个8G/16G高速的USB3.0的U盘很贵么?

Rank: 1

UID
3900723
帖子
91
PB币
75
贡献
0
技术
0
活跃
790
发表于 2014-4-25 09:40:29 |显示全部楼层
win8直接系统解压到fat32 格式的U盘就行了   win7加个 EFI shell  兄弟复杂化了吧

Rank: 5Rank: 5Rank: 5

UID
2710877
帖子
364
PB币
22
贡献
0
技术
52
活跃
642

灵感勋章

发表于 2014-4-25 09:51:18 |显示全部楼层
本帖最后由 zoujie8503 于 2014-4-25 09:53 编辑

楼主你方法太繁琐了,U盘支持分区就OK了一个 fat32 一个NTFS 直接解压win8 以上安装盘进去 修改下BCD 启动路径到NTFS 分区 就OK了的事情,为什么总是要把简单的事情复杂化了,顺便说下 微软的bootmgr 可以引导grub4 利用grub又可以实现很多很多的引导了

点评

ABC2Z  斗胆请教,什么样的U盘支持分区?USB移动硬盘么?  发表于 2014-4-25 15:06

慈悲为怀

UID
682158
帖子
14223
PB币
13505
贡献
2
技术
46
活跃
794

活动参与先锋

发表于 2014-4-25 09:57:43 |显示全部楼层
干嘛不用VHd?两个系统可以放到一个盘里,还可以图形引导

Rank: 7Rank: 7Rank: 7

UID
2226747
帖子
1563
PB币
1471
贡献
0
技术
91
活跃
1384
发表于 2014-4-25 11:38:10 来自手机 |显示全部楼层
只想说,太长了没看完,这个系统不用搞那么复杂吧……

这是一个马甲

UID
1612747
帖子
13702
PB币
14255
贡献
0
技术
4597
活跃
20872

十周年 7周年庆典勋章 我是大学生!

发表于 2014-7-29 16:24:17 |显示全部楼层
nttwqz 发表于 2014-4-25 11:38
只想说,太长了没看完,这个系统不用搞那么复杂吧……

只是作为一种探究了 从安装角度看反而麻烦很多
头像被屏蔽

Rank: 7Rank: 7Rank: 7

UID
3226070
帖子
1425
PB币
0
贡献
0
技术
18
活跃
749
发表于 2014-7-30 07:58:22 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回顶部
Copyright (C) 2005-2020 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛 | 电脑硬件 | 安卓软件