无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 85347|回复: 167
打印 上一主题 下一主题

[分享] 完美解决64位系统在exFAT分区中启动时间过长的问题

    [复制链接]
跳转到指定楼层
1#
发表于 2019-5-9 18:47:09 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 朱玛12345678 于 2019-5-11 18:06 编辑

前言
作为全网研究exFAT启动各版本Windows的第一人,我曾经为研究这个专门写过一个测试帖:http://bbs.wuyou.net/forum.php?m ... 88226&mobile=no
其中一直以来都困扰着我的一个问题就是 高版本的64位系统在exFAT分区中的启动时间非常长,而导致这个问题的真正原因在很长一段时间内我也一直没能搞清楚,同时也因为这个问题导致我始终无法将其正式应用于日常使用环境。不过在经过我后来的不懈努力之下此问题最后终于得到解决,同时我也打算分享这段奇妙而又未知的探索旅程。

原因
关于exFAT启动的问题在继我上一次的研究到至今已有近半年之久,但我也曾说过日后一定会解决这个问题,所以这几天我本着不将就的原则毅然决定去寻找最终的解决方案,于是这个研究的始末还是要从我前几天的探究和测试说起:
我在当时最初的想法与起点是分别使用同版本的32位和64位系统来测试启动,同时仔细对比并分析其中的差异。

分析
首先我在这里也简单说明一下Windows系统运行在各种不同文件系统上是怎么来控制驱动加载启动的(以BIOS启动为例,UEFI大致相同):
Bootmgr(+内置基本文件系统驱动)→BCD(依靠Bootmgr提供相应的文件系统驱动来加载)→Bootmgr移交文件系统控制权给→Winload.exe(+内置基本文件系统驱动)→ntoskrnl.exe(依靠Winload.exe提供相应的文件系统驱动来加载)→hal.dll(同左)→其他系统核心文件......(+1)→Winload.exe移交文件系统控制权给→系统盘使用的文件系统名.sys(最终加载的完整文件系统驱动)→其他系统文件......(整个系统的加载和运行由系统盘使用的文件系统名.sys管理与控制)→完成启动阶段......
顺便补充一句看到这里应该就能知道Win7SP1及以前版本的系统不支持从exFAT分区中启动的真正原因,因为它的WBM和WLD都没有内置最基本的exFAT驱动自然也就无法识别该类型分区。

回到正题这时发现了一个很奇怪的现象就是32位系统在启动阶段加载系统文件和包括exfat.sys在内的驱动时速度很快且不会卡住,而64位系统在启动阶段时加载其他系统文件和驱动也没有问题,但一到加载exfat.sys这个驱动时就会卡住很长一段时间才能加载完成,即使当我通过修改注册表键值的方式让exFAT驱动的加载顺序提前也几乎没有差别。既然不管怎么设置在启动时依然都会卡住一段时间就足以说明64位系统启动慢的原因很明显就是这个驱动的问题。

那么接下来就要着手在这里面继续分析其中的差异,其中在这个地方也曾走过不少弯路。后来在一次思考中偶然想到了64位系统在启动时和32位系统有一个明显的差别就是 微软为了安全起见特别在64位系统中加入了 强制数字签名验证 特性。也就是说32位系统在启动时可以直接加载所需的系统文件,但64位系统在加载系统文件的同时还多了一个要验证文件的数字签名是否有效。
举个简单的例子来表示的话:
32位:winload.exe→ntoskrnl.exe→hal.dll→其他系统文件等;64位:winload.exe→检查数字签名→ntoskrnl.exe→检查数字签名→hal.dll→检查数字签名→其他系统文件等→逐一检查数字签名。其中的规则是 在检查数字签名过程中如果条件为真(签名有效),则通过验证继续加载后面的系统文件;如果条件为假(签名无效),则验证失败拒绝加载并在WBM界面返回0xc0000428无法验证文件数字签名的错误代码提示。

然后我自然就去看了一下发现exfat.sys本身果然没有数字签名,这更加确定了就是数字签名的问题。后来经确认exfat.sys本身在所有版本的Windows中都没有数字签名,所以要提前说一句这个锅请务必让微软来背。
这时肯定又会有一个奇怪的问题,既然exFAT驱动本身并不包含数字签名,那Windows还能在启动时通过签名验证使其正常加载也不会报错?其实这里就涉及到数字签名的保存方式问题了:
实际上数字签名有两种存储方式,一种是文件数字签名,它将数字证书和文件哈希内置在单个PE类型文件的尾部,这样就可以直接通过查看此文件属性进入数字签名选项卡看到其状态信息;而另一种就是目录数字签名,它将数字证书和文件哈希等信息作为一个外置的.cat安全编录文件给独立出来,并可支持保存多个文件的签名信息,比如.inf驱动程序安装文件就是要通过这种方式来验证数字签名。
这样对于exfat.sys这个文件来说它也是有数字签名的。不同于ntfs.sys使用内置签名,exfat.sys显然使用的是外置签名,而且这样签名的文件在系统里也有不少(如notepad.exe),而这些用于数字签名.cat文件的存放位置在:C:\Windows\System32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}


思路
分析到这里那么这个问题也就有办法解决了,很明显64位系统在启动过程中加载exFAT驱动慢的罪魁祸首就是数字签名。因为exfat.sys本身没有内置数字签名,所以Windows在启动时要加载它就会改为从整个系统盘中逐个寻找到相应的.cat文件来校验比对,由于Windows的系统文件数量众多,因此搜索文件所用的时间也会相当长,这也就直接导致了从exFAT分区中启动时间长到离谱的真正原因。那么最终的解决方案自然就是自己给这个驱动文件做一个内置的数字签名就解决问题了。
当然这个数字签名用哪家的工具和证书都没有问题,只要签名有效就能通过64位系统的启动验证。


实践
这次分享的exFAT驱动均从原版系统镜像中提取并由我添加内置数字签名可快速通过64位系统签名验证,解压缩包后根据你的系统版本选择对应的驱动文件并直接放到C:\Windows\System32\Drivers文件夹内替换掉原文件再测试启动即可。
文件下载链接
论坛直接下载: exFAT驱动.zip (1.77 MB, 下载次数: 878)

腾讯微云下载:http://share.weiyun.com/5Cw73QR

百度网盘下载:http://pan.baidu.com/s/11DIj4vTvE6lA-Ah7NhZKdQ


当exFAT驱动添加内置数字签名后再测试64位系统的启动时间果然由原来的几个小时缩短为和32位系统一样十几秒就进入了桌面,至此该问题圆满解决!


后记
写到这里我想说的是:
每一个问题在探索与研究的过程中都会有着不一样的发现,也许有时候这可能会很难,但也坚持不放弃寻找其中的奥秘,最后成功冲破迷雾取得终有的收获。

评分

参与人数 36无忧币 +175 收起 理由
2010qqzwc + 1 很给力!
2011unknown + 3 很给力!
fc2010fc + 1
foolst + 5 很给力!
123456dj + 5 赞一个!
yynq + 10 很给力!
hxd9724 + 5
xujinbiao + 5 很给力!
Zyx2003123 + 5 赞!给力!
lookerJ + 5 先收藏以示敬仰,明天再好好看
rengrancunzai + 5
addaadda + 5 钻研精神值得表扬
xq8751 + 5 赞一个!
palm777qqq + 5
2012andyle113 + 5 神马都是浮云
nbzx + 5 赞一个!
月亮河岸 + 5 神马都是浮云
hnwsdz + 5 很给力!
liuzhaoyzz + 5 很给力!
zts59 + 5 很给力!
hua_wuxin + 5 赞一个!
2012yjgsz + 5 很给力!
tony_lam + 5 赞一个!
2010feicool + 5 收藏了,有空就试试
saiz + 5 很给力!
sghihor + 5 淡定
叮叮咚咚 + 5 赞一个!
netants2011 + 5 很给力!
20090101 + 5 赞一个!
chishingchan + 5 赞一个!

查看全部评分

2#
 楼主| 发表于 2019-5-9 18:48:06 | 显示全部楼层
研究了这么长时间,总算把最大的问题解决了。。

点评

回复chishingchan:对于所有语言的系统都适用  发表于 2019-5-10 15:08
我喜欢收集各版本系统的多语言的。附件中的文件属于英文并适用于所有语言系统吗?  发表于 2019-5-10 09:57
回复

使用道具 举报

3#
 楼主| 发表于 2019-5-9 20:51:55 | 显示全部楼层
sairen139 发表于 2019-5-9 20:27
这个exFat比起ntfs有什么优点?

简单点来说就是在SSD上用exFAT性能会提高,而且没有日志记录可以延长U盘寿命。

点评

那么,如果是用在在固态硬盘、甚至是M.2接口的NVME协议固态硬盘上,也能起到相应的作用啦?  详情 回复 发表于 2019-10-2 16:30
檔系統原理是這樣沒錯,如果要具體實驗數據,您有建議測試方法?  详情 回复 发表于 2019-5-11 23:14
请问那exFAT在普通硬盘下有好处不?  详情 回复 发表于 2019-5-9 22:16
回复

使用道具 举报

4#
 楼主| 发表于 2019-5-9 20:55:15 | 显示全部楼层
sairen139 发表于 2019-5-9 20:29
不知道那个要追赶windows的开源系统ReactOS是否也支持在exFat安装运行?

这个系统我只听说过但没用过,所以能不能exFAT启动我也就不得而知了。
不过有兴趣的话你可以自行测试
回复

使用道具 举报

5#
 楼主| 发表于 2019-5-9 22:33:26 | 显示全部楼层
feihe 发表于 2019-5-9 22:16
请问那exFAT在普通硬盘下有好处不?

HDD用的话这个还真没有,不过对于一般人来说有个好处倒是exFAT没有权限管理机制,即就算你用权限最低的User账户登录系统也能有和PE系统一样的System最高权限,也就是说永远不会出现系统盘里有垃圾还没权限删除的情况。
回复

使用道具 举报

6#
 楼主| 发表于 2019-5-9 22:35:57 | 显示全部楼层
foxfirefox 发表于 2019-5-9 22:25
楼主研究一下,最新版10PE下微软输入法的候选框怎么出来

原谅我有好多年没有专门研究过PE系统了,这种情况一般不是缺系统文件就是缺注册表键值。
回复

使用道具 举报

7#
 楼主| 发表于 2019-5-10 08:34:17 | 显示全部楼层
nttwqz 发表于 2019-5-10 08:06
那么是否还存在另一种解决办法,用软件记录启动日志,找到系统首先会查找exfat.sys的cat文件位置,将对应文 ...

貌似不行,微软似乎把Windows 启动管理器里的相关代码给写死了,它只会从CatRoot文件夹里寻找.cat安全编录文件,如果放在其他位置启动时就找不到自然会视为没有数字签名无法通过验证。
回复

使用道具 举报

8#
 楼主| 发表于 2019-5-10 12:19:47 | 显示全部楼层
狼人72105 发表于 2019-5-10 09:53
楼主再研究下,问什么进PE中,会提示数字证书错误,无法进入。。。。

请把问题说具体一点,还有PE我测试过替换驱动并不会报错。
回复

使用道具 举报

9#
 楼主| 发表于 2019-5-10 12:23:46 | 显示全部楼层
foxfirefox 发表于 2019-5-10 11:18
这个要是引入PE不知道是什么效果?
另外有没有软件直接将ISO文件以exfat格式写入U盘或者移到硬盘

PE未测试,以后有空再研究。
软件我记得有但我很久没用忘了叫什么名了,你网上搜一下找找看。
回复

使用道具 举报

10#
 楼主| 发表于 2019-5-10 14:58:15 | 显示全部楼层
本帖最后由 朱玛12345678 于 2019-5-10 15:03 编辑
qingdao33122 发表于 2019-5-10 13:49
win7 7850 这个珍惜版本能不能分享下啊


http://bbs.wuyou.net/forum.php?m ... 14136&mobile=no
这个版本我抽空打算封装一个
回复

使用道具 举报

11#
 楼主| 发表于 2019-5-10 15:28:50 | 显示全部楼层
2623666 发表于 2019-5-9 20:36
exfat以后会是大趋势吧

FAT32、exFAT这类走的是兼容路线,NTFS、ReFS这类走的是功能路线。
它们各有各的优缺点呈互补关系,不同路线之间都不会被任意一方完全替代。
对于U盘来说会从FAT32逐渐转向exFAT,对于硬盘来说会从NTFS逐渐转向ReFS。
当然新的一时半会也不会取代旧的,但会在一定时间内朝着共存的趋势发展。

点评

ReFS好像是主打稳定性吧 服务器应用 我单位的服务器就是这个格式的  详情 回复 发表于 2019-5-10 19:39
回复

使用道具 举报

12#
 楼主| 发表于 2019-5-10 16:44:55 | 显示全部楼层
qingdao33122 发表于 2019-5-10 16:02
以前研究 iSCSI 启动的时候关注过两种不同的驱动签名问题。我的印象里win X64在最初阶段加载的驱动都是必须 ...

实际上Win7也可以从CatRoot里找外置签名,而且文件少搜索速度还会比Win8+快很多。
如果不能启动的话检查一下注册表服务项里的Start等键值是不是设置不对。
另外要在系统启动最初阶段加载的驱动切记一定要使用内嵌签名,要不然你也懂得。

点评

你试过的win7实际上是win8开发过程中的版本。你确定普通的win7 x64 sp1初始阶段加载的驱动也会在catroot中搜索签名吗?  发表于 2019-5-11 08:58
回复

使用道具 举报

13#
 楼主| 发表于 2019-5-10 22:20:10 | 显示全部楼层
2623666 发表于 2019-5-10 19:39
ReFS好像是主打稳定性吧 服务器应用 我单位的服务器就是这个格式的

没错,ReFS主要针对RAID等复杂型数据存储以及超大规模卷设计的。
回复

使用道具 举报

14#
 楼主| 发表于 2019-5-11 17:55:06 | 显示全部楼层
minmax 发表于 2019-5-11 17:48
方便更新一下 給 1903 的  exFAT 內置簽章檔案

v1903的已经有了,10.0.18362的那个就是。
回复

使用道具 举报

15#
 楼主| 发表于 2019-5-12 08:09:08 | 显示全部楼层
minmax 发表于 2019-5-11 23:14
檔系統原理是這樣沒錯,如果要具體實驗數據,您有建議測試方法?


如果指的是读写速度的话,SSD用这两个文件系统格式化,AS SSD工具分别跑一下分就知道了。不过除非特别需要并不推荐传统的HDD用exFAT,因为不是专门给它设计的性能不会有提高还有可能会下降;如果是指的是写入数据量的话,可以在写入大量文件后分别用软件查看写入量。不过最简单的一个办法就是用带读写指示灯的U盘分别格式化并按照日常的使用来测试就知道,可以很直观的看到NTFS不管是在使用时还是空闲时灯都会闪,exFAT则只有在使用时才会闪。
回复

使用道具 举报

16#
 楼主| 发表于 2019-5-14 22:27:08 | 显示全部楼层
α7000 发表于 2019-5-14 21:52
禁用驱动程序强制签名行不行

不行,没有用。
回复

使用道具 举报

17#
 楼主| 发表于 2019-5-15 16:04:36 | 显示全部楼层
本帖最后由 朱玛12345678 于 2019-5-15 16:13 编辑
hmqtools 发表于 2019-5-15 15:55
完美解决64位系统在exFAT分区中启动时间过长的问


你是想故意刷帖?


回复

使用道具 举报

18#
 楼主| 发表于 2019-5-16 11:34:45 | 显示全部楼层
123help 发表于 2019-5-16 08:10
超版的研究解决了在exFAT分区安装64位系统的困扰。exFAT分区主要适用于SSD或U盘类存贮设备,不太适用于机械 ...

不适合,HDD使用exFAT性能不会有提高反而还可能会降低。
占用空间问题是因为exFAT不支持硬链接,所以WinSXS备份文件也会占一份空间。
你可以尝试在exFAT分区中用WimTool或Dism++将整个系统打包封装为.WIM或.ESD文件,然后再解压释放到NTFS分区并再次对比一下。

点评

上午的测试:先用Dism++打包封装NTFS格式(簇大小为4096字节)的系统,后用Dism++解压至exFAT(簇大小为4096字节和1024字节)格式和NTFS(簇大小为4096字节和512字节)格式的同分区。 本次的测试:先用WimTool打包  详情 回复 发表于 2019-5-16 21:46
回复

使用道具 举报

19#
 楼主| 发表于 2019-5-17 11:53:55 | 显示全部楼层
123help 发表于 2019-5-16 21:59
对机械硬盘来说,初步结论:
(1)NTFS格式分区安装好系统后(制作出镜像文件),如移植到exFAT格式分区, ...

这个我很早以前就试过,你的结论是这样的没错。
回复

使用道具 举报

20#
 楼主| 发表于 2019-5-17 16:00:08 | 显示全部楼层
本帖最后由 朱玛12345678 于 2019-5-17 16:04 编辑
魅力舞兵 发表于 2019-5-17 14:44
佩服佩服,这个推断过程和解决方法都很棒

风水   算命  算卦   起名    风水大师  算命大师   算卦大师  ...


已删除,发表回复请不要打广告。
回复

使用道具 举报

21#
 楼主| 发表于 2019-5-18 01:30:18 | 显示全部楼层
2012fengxi 发表于 2019-5-18 00:04
我想问楼主是在uefi下安装运行的吗?我在uefi安装win10 20H1试了一下,安装是没问题,安装完了之后重启就出 ...

帖子里的测试截图在我没有特别注释说明的情况下都是使用默认Legacy引导。
exFAT可以使用UEFI引导,不过会比传统BIOS启动时间略长,但不存在只支持BIOS启动,不支持UEFI启动的问题。
19H1我亲自测试过可以在UEFI模式下启动,至于你说的20H1因为还没出正式版所以我就没有测试,我签名的exFAT驱动包里也没有做20H1的测试版(出正式版后我会补做),你就暂时先用19H1的替换吧,当然不保证日后版本一定兼容。
如果安装出现了问题,请确认你的操作方式是否正确。
UEFI启动卡Logo请多等待一会,如果依然不行请尝试使用Legacy启动。

点评

当时我也尝试用19H1替代了,一样的,感觉是根本没进入引导状态,难道是主板的bios跟exFat兼容问题?  详情 回复 发表于 2019-5-18 08:22
回复

使用道具 举报

22#
 楼主| 发表于 2019-5-18 08:46:17 | 显示全部楼层
2012fengxi 发表于 2019-5-18 08:22
当时我也尝试用19H1替代了,一样的,感觉是根本没进入引导状态,难道是主板的bios跟exFat兼容问题?

那你试试不用ESP直接从exFAT分区引导行不行,极个别主板的BIOS似乎存在BUG确实有不兼容exFAT引导的问题,只能通过升级BIOS才有可能解决了,还有我说的exFAT UEFI一般都要刷BIOS才能支持的。
回复

使用道具 举报

23#
 楼主| 发表于 2019-5-18 10:03:16 | 显示全部楼层
α7000 发表于 2019-5-18 08:53
在使用vgashim引导系统时,能否使用EXFAT引导系统

我这里是可以的,如果需要的话你也可以自行测试。
回复

使用道具 举报

24#
 楼主| 发表于 2019-5-26 12:25:33 | 显示全部楼层
进士小站 发表于 2019-5-26 10:03
exFAT 好是好就是不能硬盘启动系统

你说说什么叫不能硬盘启动系统?
帖子里的测试截图还大都是硬盘启动的。

点评

系统做在 exFAT 分区里面不能启动。 iMac 做双系统后发现,exFAT 分区作为 共享分区 造成 系统超慢,并且不能写入。  详情 回复 发表于 2019-5-27 09:52
回复

使用道具 举报

25#
 楼主| 发表于 2019-5-28 23:40:03 | 显示全部楼层
进士小站 发表于 2019-5-27 09:52
系统做在 exFAT 分区里面不能启动。
iMac 做双系统后发现,exFAT 分区作为 共享分区 造成 系统超慢,并 ...

把MacOS装到exFAT分区里运行几乎是不可能的,苹果是也不会专门用微软的文件系统。
exFAT只读是触发了TFAT写保护机制,fsck或者chkdsk一下就可以了。
回复

使用道具 举报

26#
 楼主| 发表于 2019-5-29 01:01:15 | 显示全部楼层
2012fengxi 发表于 2019-5-28 23:27
修改了bios使主板的uefi直接支持exfat分区,然后替换了带签名的exfat.sys,启动过程大概要4分钟,还是太慢 ...

这些工作都处理好后如果还是慢的话就是你自己在系统优化方面做的不到位,实际上如果优化做好了能一分钟内启动到桌面是完全没有问题的。
这是我自己的电脑截图,实测优化之前和你一样也是差不多4分钟才能完成启动,而优化之后不到1分钟就能完成启动,具体优化方法的话加好友后我可以告诉你。


当然还有一种简单粗暴的方法就是用低版本的系统,空间占用小了启动速度还快一点。(懒人专用23333)
回复

使用道具 举报

27#
 楼主| 发表于 2019-6-19 09:39:39 | 显示全部楼层
月亮河岸 发表于 2019-6-19 08:25
windows 7 7601 exfat 不能启动是吧?

不能,NT6.1仅7850支持,NT6.2+全版本都支持。
回复

使用道具 举报

28#
 楼主| 发表于 2019-7-6 12:40:11 | 显示全部楼层
rrscsm2000 发表于 2019-7-6 12:08
居然被 火绒给杀了!

误报,因为我签名的exFAT驱动用的是过期证书,而且这个证书是以前泄露出来的还被一些人拿去乱加数字签名搞破坏,所以有些杀软就会报毒。
不过这些驱动都是我从原版系统中提取的只加了数字签名并未作其他任何修改,不信你可以拿原版的文件用WinHex相比较一下数据信息就知道了。
回复

使用道具 举报

29#
 楼主| 发表于 2019-10-2 17:52:35 | 显示全部楼层
wwwzhx 发表于 2019-10-2 16:30
那么,如果是用在在固态硬盘、甚至是M.2接口的NVME协议固态硬盘上,也能起到相应的作用啦?

是的,SATA固态硬盘用exFAT文件系统的性能是最高的。如果是NVMe固态硬盘,性能最高的则是ReFS文件系统。
回复

使用道具 举报

30#
 楼主| 发表于 2020-2-7 00:27:02 | 显示全部楼层
xman00 发表于 2020-2-7 00:14
请教楼主1楼的驱动是否已经双签名了呢,看了你另一篇arm的帖子,里面分享的驱动时间为2019.09,而1楼的仍然 ...

双签名只是针对ARM系统的特殊验证机制的,对于x64的系统驱动单签名就已经足够了,x64的驱动用双签名其文件体积会增大,而且实际使用效果也没有任何差异。

点评

好的,谢谢指导释疑。  详情 回复 发表于 2020-2-7 09:44
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-4-20 11:33

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表