无忧启动论坛

标题: UEFI中直接访问NTFS和iso文件系统的驱动 [打印本页]

作者: fujianabc    时间: 2013-2-8 23:19
标题: UEFI中直接访问NTFS和iso文件系统的驱动
玩过uefi启动的应该知道,uefi和dos一样,只能直接访问FAT文件系统(FAT12/16/32),而不能直接从其他文件系统中读取文件。
近日从rEFInd和clover EFI bootloader中发现两个文件系统驱动,能让efi shell下读取NTFS分区和光盘iso文件系统(类似于dos的ntfs驱动和光盘驱动),并且直接可以从NTFS和光盘上直接启动UEFI支持的操作系统了。
附件中的ntfs.efi和iso9660_x64.efi分别是这两个驱动(x64平台的,x86平台的也有但没什么意义)。在EFI shell中cd到相关文件的目录(这两个文件本身还需要存储在FAT分区中,也可以放在一个FAT分区的u盘上),然后执行命令
  1. load ntfs.efi
  2. map -r
复制代码
第一条命令是加载驱动,第二条命令是重新分配盘符(fs0: fs1等等)。然后就能访问NTFS分区了(这个ntfs分区是只读的)。
iso驱动也类似用load加载然后map -r重新分配盘符,就能读取光盘上的文件了(不支持UDF光盘

以上命令可以放在startup.nsh脚本中自动执行,其作用类似于autoexec.bat

测试了几个用途:
一、直接从没有任何启动信息的普通数据光盘启动win7 win8的pe。直接制作了一张简单的数据光盘,包含了uefi版winpe,根目录下放了bootmgfw.efi文件。此光盘没有任何启动信息,直接加载iso驱动插入光盘map -r,就能读取光盘内容了,然后执行光盘上的bootmgfw.efi就能启动光盘上的winpe。
二、单ntfs分区的硬盘上启动win7 win8。一个硬盘只有ntfs分区,没有FAT分区,更没有什么efi系统分区保留分区等,启动菜单也在ntfs分区上。我从u盘加载ntfs驱动后,然后就能执行ntfs分区中的bootmgfw.efi启动win7/win8了
三、uefi shell访问ntfs格式u盘和移动硬盘。加载ntfs驱动,然后map -r后uefi shell就给ntfs的usb分区分配盘符了。使用感觉和dos类似。

[ 本帖最后由 fujianabc 于 2013-2-8 23:26 编辑 ]

efi.rar

52.6 KB, 下载次数: 618, 下载积分: 无忧币 -2


作者: fujianabc    时间: 2013-2-8 23:24
rEFInd和clover EFI bootloader还有ext2 ext3 reiserfs hfs等分区格式的uefi驱动,用得着的人可能不多,加载方法完全一样,就贴在这里了。
可惜找不到UDF驱动(不过制作光盘时配合参数可以做iso/udf双格式盘)
http://bbs.znpc.net/forum.php?mod=viewthread&tid=6742

[ 本帖最后由 fujianabc 于 2013-2-8 23:51 编辑 ]

efidriver.rar

30.6 KB, 下载次数: 303, 下载积分: 无忧币 -2


作者: 2012得了    时间: 2013-2-8 23:41
这篇文章很有指导意义啊,很多搞启动的老大又有得忙了。
作者: 拿铁不加糖    时间: 2013-2-9 00:42
确实能在EFI Shell中查看NTFS分区了。

Windows 8 x64 (2)-2013-02-09-00-39-15.png (10.14 KB, 下载次数: 176)

Windows 8 x64 (2)-2013-02-09-00-39-15.png

作者: fujianabc    时间: 2013-2-9 01:28
原帖由 拿铁不加糖 于 2013-2-9 00:42 发表
确实能在EFI Shell中查看NTFS分区了。

还能直接从ntfs分区启动win7/win8的uefi版。
先用win8的bcdboot(win7也要用win8的bcdboot)在c:盘生成uefi启动文件夹
  1. bcdboot c:\windows /s c: /f uefi /l zh-cn
复制代码
然后在efi shell下cd到fs2:的EFI\Microsoft\Boot目录下执行bootmgfw.efi即可启动。感觉和dos下执行win启动win3.x/win98差不多了

[ 本帖最后由 fujianabc 于 2013-2-9 01:30 编辑 ]
作者: 拿铁不加糖    时间: 2013-2-9 01:34
标题: 回复 #5 fujianabc 的帖子
这个我已经实践过了。不过象征意义大于实际意义。每次启动计算机都得手动选择启动文件。
作者: fujianabc    时间: 2013-2-9 01:58
原帖由 拿铁不加糖 于 2013-2-9 01:34 发表
这个我已经实践过了。不过象征意义大于实际意义。每次启动计算机都得手动选择启动文件。

提供一个思路和途径而已。

微软原版光盘EFI启动里面的那个eisys.bin实际就是一个1.44M的软盘镜像,可以用winimage修改的,里面只有bootx64.efi一个自动执行文件(就是bootmgfw.efi的某个版本)。
实际以后想玩efi多启动光盘可以在这个软盘镜像里做文章,把efi shell换掉bootx64.efi,然后软盘镜像里编写一个startup.nsh菜单,再配上几个驱动,基本可以实现类似于dos下多重启动菜单的功能了。
也可以再startup.nsh里面加载驱动后自动执行一个图形界面的uefi启动程序,比如rEFInd就很漂亮。
作者: 红毛樱木    时间: 2013-2-9 09:32
一、直接从没有任何启动信息的普通数据光盘启动win7 win8的pe。直接制作了一张简单的数据光盘,包含了uefi版winpe,根目录下放了bootmgfw.efi文件。此光盘没有任何启动信息,直接加载iso驱动插入光盘map -r,就能读取光盘内容了,然后执行光盘上的bootmgfw.efi就能启动光盘上的winpe。


不知道这样对光盘格式是否有要求,非UDF格式,是否OK?

[ 本帖最后由 红毛樱木 于 2013-2-9 14:59 编辑 ]
作者: D@peng    时间: 2013-2-9 10:39
标题: 回复 #8 红毛樱木 的帖子
老大这个不用问吧,本身就是支持读取光盘ISO。

[ 本帖最后由 D@peng 于 2013-2-9 11:05 编辑 ]
作者: zds1210    时间: 2013-2-9 12:27
强烈支持新技术PE啊。大家好好研究,我用现成的。
作者: 20130    时间: 2013-2-9 12:40
期待老大们纷纷无私奉献新技术PE   偶是伸手党..... 哈哈
作者: 红毛樱木    时间: 2013-2-9 15:00
标题: 回复 #9 D@peng 的帖子
不好意思,我可能没说清楚。我意思是UDF之类的光盘格式类型
作者: fujianabc    时间: 2013-2-12 15:19
原帖由 红毛樱木 于 2013-2-9 09:32 发表
一、直接从没有任何启动信息的普通数据光盘启动win7 win8的pe。直接制作了一张简单的数据光盘,包含了uefi版winpe,根目录下放了bootmgfw.efi文件。此光盘没有任何启动信息,直接加载iso驱动插入光盘map -r,就 ...

看二楼的说明,udf驱动现在没有,只有iso格式的才行。
但是二楼的链接里面给了怎么制作udf/iso双格式光盘的方法,可以正常用于nt 6.x系统盘
作者: you_xi    时间: 2013-2-12 22:41
想问问4楼efi是什么版本了?记得efi 只有ls命令没dir命令的
作者: fujianabc    时间: 2013-2-13 01:16
原帖由 you_xi 于 2013-2-12 22:41 发表
想问问4楼efi是什么版本了?记得efi 只有ls命令没dir命令的

EFI shell中dir和ls通用的,不管什么版本。

并且efi shell比起linux更像dos:有盘符,用反斜杠表示路径
作者: 一只猴子    时间: 2013-2-13 10:43
标题: 回复 #15 fujianabc 的帖子
F大每次总能带来好东西,哈哈
ISO根目录下的那个bootmgr.efi难道是摆设?
作者: 2010sya    时间: 2013-2-13 11:06
值得好好研究一下。。。。。。。。。
作者: fujianabc    时间: 2013-2-14 16:11
原帖由 一只猴子 于 2013-2-13 10:43 发表
F大每次总能带来好东西,哈哈
ISO根目录下的那个bootmgr.efi难道是摆设?

我也不清楚bootmgr.efi到底是干什么用的,启动都用bootmgfw.efi,删了bootmgr.efi完全没影响。
作者: jneny    时间: 2013-2-16 15:22
标题: 回复 #7 fujianabc 的帖子
有没有关于startup.nsh的语法说明文档?能来段一个菜单选择的示例最好了。

顺便 分享下:
最近迷信uefi比bios启动速度更快的说法,所以做了以下操作。
用diskgen 3.8的破解版可以无损切换mbr到gpt分区,然后再划分一个efi分区。再使用带原版win7光盘(带efi启动的)到安装界面按shit+f10 打开窗口使用bcdboot /c:\windows,使efi分区产生引导文件。这样就能启动磁盘上的win7 x64系统了。
作者: fujianabc    时间: 2013-2-16 16:20
原帖由 jneny 于 2013-2-16 15:22 发表
有没有关于startup.nsh的语法说明文档?能来段一个菜单选择的示例最好了。

顺便 分享下:
最近迷信uefi比bios启动速度更快的说法,所以做了以下操作。
用diskgen 3.8的破解版可以无损切换mbr到gpt分区,然 ...

在最新的ivy bridge平台上的确efi比bios启动快,但是老一点的平台上,efi并没有启动速度优势。
另外efi启动并没必要转成gpt,用bcdboot生成启动菜单,mbr硬盘一样能用efi启动
作者: mmjjnn000    时间: 2013-2-16 19:31
大家好好研究,我用现成的,呵呵。
作者: jneny    时间: 2013-2-16 23:37
标题: 回复 #20 fujianabc 的帖子
在efi上使用MBR那就成使用EFI 的CSM 兼容模式了吧 ,感觉像是64位系统使用32位的程序。所以选择了 uefi only选项。

vmware 中的 efi shell 能提取出来吗? 那个版本好像比intel的更新

我还是想多了解下startup.nsh的写法,外文的论坛看不懂。。
作者: fujianabc    时间: 2013-2-17 02:20
原帖由 jneny 于 2013-2-16 23:37 发表
在efi上使用MBR那就成使用EFI 的CSM 兼容模式了吧 ,感觉像是64位系统使用32位的程序。所以选择了 uefi only选项。

vmware 中的 efi shell 能提取出来吗? 那个版本好像比intel的更新

我还是想多了解下st ...

和CSM无关,只是广大厂家的宣传有些误导了,让广大群众认为EFI只能从gpt硬盘启动。EFI启动完全可以用MBR分区启动而不用GPT的,硬盘、u盘乃至软盘都不用GPT。win7/win8 在mbr硬盘上用uefi启动很容易,见下贴第四点
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=206863

uefi shell一直在更新,具体项目网页
http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=UEFI_Shell

至于startup.nsh,我也没用过,只是看到intel网站上有些文档,和autoexec.bat差不多。
感觉startup.nsh可以单独开贴研究了,放dos脚本哪个版块比较合适。。。
作者: my9823    时间: 2013-2-19 12:33
fujianabc老大,有几个问题请教:
1,既然uefi只支持fat12/16/32分区,那windows光盘上的efi怎么能识别?
2,是不是u盘上存在efi文件夹,将efi文件放到这个目录或者根目录就可以在启动时扫描到?
3,既然引导项目存储在主板上,怎么删除或者编辑启动项目?
希望老大能开导一下小菜!!!

[ 本帖最后由 my9823 于 2013-2-19 12:38 编辑 ]
作者: fujianabc    时间: 2013-2-19 15:22
原帖由 my9823 于 2013-2-19 12:33 发表
fujianabc老大,有几个问题请教:
1,既然uefi只支持fat12/16/32分区,那windows光盘上的efi怎么能识别?
2,是不是u盘上存在efi文件夹,将efi文件放到这个目录或者根目录就可以在启动时扫描到?
3,既然引导 ...

1、支持EFI启动的光盘,是用传统的软盘模拟方式启动的。EFI相关文件存放在那个FAT12的虚拟软盘中
2、 默认是只扫描\efi\boot\bootx64.efi文件,但有些主板还会扫描根目录的efi文件
3、存在主板的nvram上的,主板都提供编辑、添加、删除启动项的功能的
作者: my9823    时间: 2013-2-19 17:59
谢谢老大!archlinux的wiki上有一篇关于uefi的文章,可惜鸟语不好,所以找老大问下!
作者: my9823    时间: 2013-2-19 18:37
For GPT partitioned disks
Two choices:
Using GNU Parted/GParted: Create a FAT32 partition. Set "boot" flag on for that partition.
Using GPT fdisk (aka gdisk): Create a partition with gdisk type code "EF00". Then format that partition as FAT32 using mkfs.vfat -F32 /dev/<THAT_PARTITION>
Note: Setting "boot" flag in parted in a MBR partition marks that partition as active, while the same "boot" flag in a GPT partition marks that partition as "UEFI System Partition".
Warning: Do not use util-linux fdisk, cfdisk or sfdisk to change the type codes in a GPT disk. Similarly do not use gptfdisk gdisk, cgdisk or sgdisk on a MBR disk, it will be automatically converted to GPT (no data loss will occur, but the system will fail to boot).
For MBR partitioned disks
Two choices:
Using GNU Parted/GParted: Create FAT32 partition. Change the type code of that partition to 0xEF using fdisk, cfdisk or sfdisk.
Using fdisk: Create a partition with partition type 0xEF and format it as FAT32 using mkfs.vfat -F32 /dev/<THAT_PARTITION>
Note: It is recommended to use always GPT for UEFI boot as some UEFI firmwares do not allow UEFI-MBR boot.
老大,这段什么意思,这个fat32分区不是普通的fat分区吗,还有分区类型区别吗?下边的图片式在bootice中确实看到这个类型的efi分区,upan不用这么格式化吧?

[ 本帖最后由 my9823 于 2013-2-19 19:00 编辑 ]

无标题.jpg (145.53 KB, 下载次数: 107)

无标题.jpg

作者: 2011npwjm    时间: 2013-2-19 18:41
试试,好像意义不大。
作者: my9823    时间: 2013-2-19 18:43
怎么没有意义,话说硬件厂商说了算,我们想用就得低头,毕竟在人家屋檐下!

[ 本帖最后由 my9823 于 2013-2-19 19:16 编辑 ]
作者: fujianabc    时间: 2013-2-20 06:48
原帖由 my9823 于 2013-2-19 18:37 发表
For GPT partitioned disks
Two choices:
Using GNU Parted/GParted: Create a FAT32 partition. Set "boot" flag on for that partition.
Using GPT fdisk (aka gdisk): Create a partition with gdisk typ ...

你那个估计是给MBR-GPT混合分区表用的,强烈不推荐用混合分区表,大部分程序包括windows本身都太兼容混合分区表。
用普通的mbr+FAT32格式化u盘足够用于EFI启动了
作者: 20131    时间: 2013-2-24 17:56
新技术PE啊..................................
作者: kgb3000    时间: 2013-3-16 10:31
感觉太麻烦了,手动操作。
作者: 糊涂    时间: 2013-3-19 16:27
标题: 回复 #10 zds1210 的帖子
U+V2写入可EFI启动的ISO,支持高端隐藏,今天测试成功!
作者: hao17119    时间: 2013-9-29 09:33
下来试试吧

作者: shan    时间: 2013-10-2 14:08
fujianabc 发表于 2013-2-17 02:20
和CSM无关,只是广大厂家的宣传有些误导了,让广大群众认为EFI只能从gpt硬盘启动。EFI启动完全可以用MBR分 ...

科普学习中,很好的技术讨论帖。
作者: xwan    时间: 2013-10-3 02:47
谢谢 F大带来的研究成果,比较奇怪的是 才看到这个帖子
作者: 沙漠之子    时间: 2013-10-5 12:49
那个ntfs.efi貌似不支持压缩的ntfs分区
作者: ali88home    时间: 2014-3-6 21:39
本帖最后由 ali88home 于 2014-3-6 21:42 编辑

bootmgfw.efi的功能的确强大,搜寻所有资料区,连UD都不放过,我把WIN8-bootmgfw.efi替换了由GRUB2启动操作了,效果很好。

让GRUB2作为您WIN8的启动选项
http://bbs.wuyou.net/forum.php?m ... &fromuid=156496
(出处: 无忧启动论坛)


一个问题:EFI启动能加载IMG、ISO先加载到内存执行吗?像CDlinux、Puppy、slitaz微型linux中文定制版...
作者: su8844    时间: 2014-4-16 10:58
楼主,有 NTFS.efi 的源代码?

作者: wynew8au    时间: 2014-6-9 10:58
这个可以有,对于单个大于4G文件需要驱动,请问各位网友,这个驱动现在也没有新的版本,感谢。
作者: hr_999    时间: 2014-8-6 11:59
jneny 发表于 2013-2-16 23:37
在efi上使用MBR那就成使用EFI 的CSM 兼容模式了吧 ,感觉像是64位系统使用32位的程序。所以选择了 uefi onl ...

挖个坟,偶然看见就回一下吧

CSM和loader没半毛钱关系,EFI的loader同样可以用回原来那套MBR+PBR的启动流程。
CSM存在的意义是为了提供传统BIOS的API,即所谓的内部中断。
win7 无论是32bit还是64bit都只能在有CSM的机器上启动,否则蓝屏,因为启动的时候用到了int 10h中断。
只有win8才能在无CSM的机器上启动
作者: abqqe    时间: 2015-1-12 17:33
正在找这个。。找上半天了。
作者: 过去不等于未来    时间: 2015-1-13 01:44
试试效果怎么样
作者: 2012hzy6420    时间: 2016-5-9 08:01
谢谢分享
作者: 窄口牛    时间: 2016-5-9 08:39
有efi的触控驱动吗?
作者: 2013xingthx    时间: 2016-9-6 20:54
支持一个,最近再完uefi 装 mac
作者: wynew8au    时间: 2016-12-22 18:55
老师,驱动有没有最新版的,谢谢。
作者: ldzhf469    时间: 2019-2-27 21:12
能删除NTFS的文件吗? 另外有分区功能的工具吗?
作者: samsung4203    时间: 2020-9-1 22:09
正需要这个 感谢分享
作者: 蓝星明月    时间: 2021-4-30 20:44
谢谢分享!!!




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