无忧启动论坛

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

ud.FAT法:把UD扩展区当作fat区

  [复制链接]
跳转到指定楼层
1#
发表于 2015-1-23 21:33:00 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 pseudo 于 2015-1-23 21:49 编辑

如果能把UD扩展区当作fat16/32区分配盘符,用windows资源管理器来访问(即使只读),当然方便。那样小gho文件、散开的外置工具放入ud就方便读取了。
障碍之一,ud扩展区无对应分区表项,或者不是第一个分区表项,windows不会自动分配盘符。
这个好办,pecmd2012就有把盘上某些扇区映射成一个盘的功能。
障碍之二,即使把ud扩展区直接映射成一个分区,这个分区也因无文件分配表(File Allocation Table,FAT),windows资源管理器读不懂它。
在不提供专门的ud文件系统驱动程序、不像udm、multimbr那样对ud做大动作前提下,构造FAT成为关键。

下面是思路,有待实证:
1、fbinsttool格式化ud时,问用户是否为ud扩展区生成FAT,如果“是”,就在ud扩展区写入一个名为ud.FAT(或者一个固定、特定、恰当的其它名字)的适当大小文件。
对于ud而言,ud.FAT只是ud扩展区文件之一,此法只需增加一个文件到ud,ud的结构没大变动。
2、ud.FAT作为ud扩展区第一个文件,占据ud扩展区开头位置,往ud扩展区加入其它文件时,fbinsttool须确保它们总是位于ud.FAT之后。整理ud碎片时,fbinsttool确保ud.FAT保持在ud扩展区开头。
3、整个ud扩展区被当作无分区表项的一个fat16/32分区,ud.FAT占据空间恰好对应分区头部,内容含fat16/32分区的分区引导记录、文件分配表等,ud扩展区其它文件内容占据的空间对应fat16/32分区内相应文件内容占据的空间。ud扩展区其它文件有双重身份:既是普通ud扩展区文件,在ud头部有文件登记信息;又是fat16/32分区普通文件,在fat16/32分区头部即ud.FAT里有文件登记信息。ud.FAT有双重身份:既是普通ud扩展区文件,在ud头部有文件登记信息;又是fat16/32分区头部。
4、往ud扩展区加入其它文件、整理碎片时,ud.FAT内容被相应同步修改。

评分

参与人数 5无忧币 +21 收起 理由
hero8000 + 5 赞一个!
fxq + 5 很给力!
不会懂1 + 1 www.h7u.net魔天记
潜水者 + 5 赞一个!
zhczf + 5 赞一个!

查看全部评分

2#
 楼主| 发表于 2015-1-23 21:33:48 | 显示全部楼层
本帖最后由 pseudo 于 2015-1-23 21:49 编辑

待核实的地方:fat16/32分区的文件结束标志跟ud扩展区文件结束标志一致?
回复

使用道具 举报

3#
 楼主| 发表于 2015-1-23 21:34:27 | 显示全部楼层
本帖最后由 pseudo 于 2015-1-23 23:23 编辑

构造测试例方法之一:
1、fbinsttool格u盘弄出ud扩展区,放0pe的grldr入ud(非ud扩展区)。
2、找出ud扩展区的起始扇区、大小。按起始扇区、大小建立分区(有正常分区表项)、格为fat32,找出fat32分区头部大小。这步稍难。
3、往ud扩展区放一个名为ud.fat的文件,大小等于fat32分区头部大小(用fbinsttool的“查看mbr"功能检查)。再往ud放入0pe.iso。这步目的是让ud登记ud.fat和0pe.iso。
4、重新格式化fat32分区(上一步放入ud.fat破坏了fat32分区头部,这里重格可以恢复),用diskgenius或资源管理器加入0pe.iso(将与ud的0pe.iso占据相同空间)。这步目的是让fat32分区登记0pe.iso。
测试:
1、u盘启动进0pe,用diskgenius看u盘有无0pe.iso文件,有则成功。
2、清除ud扩展区对应分区表项,u盘启动进0pe,用pecmd2012映射ud扩展区、分配盘符,用资源管理器看到(ud扩展区上的)0pe.iso则成功。

此测试例用来验证可行性。看着复杂,以后做进工具里就简单了:
1、格ud时问是否为ud扩展区生成FAT,回答“是”。
2、往ud拖入两个文件grldr+0pe.iso,还可以拖入其它东西,收工
u启进pe后,自动或手动调用pecmd2012为ud扩展区分配盘符,就可以在资源管理器里看到原ud扩展区的东西了。如果不分配盘符,ud里的东西就看不见。呵呵。

另外,启动时可以用grub4dos映射ud扩展区为(hd0,0),然后散开放置在ud的linux、普通pe(fbinsttool可以看到setupldr.bin/bootmgr)有望能启动。


我只提供思路,纸上谈兵。
回复

使用道具 举报

4#
 楼主| 发表于 2015-1-25 15:08:25 | 显示全部楼层
本帖最后由 pseudo 于 2015-1-25 15:51 编辑

@jianliulin
分区表项法分配盘符例如U:后,windows资源管理器能从U:盘看到(ud)/efi.img里包含的内容,例如看到U:\EFI\boot\bootx64.efi。

但这里不同。

这里为整个ud扩展区分配盘符,例如U:,然后,windows资源管理器能从U:盘看到ud扩展区内所有文件(除ud.fat之外),例如看到U:\efi.img。
即ud扩展区内所有目录、文件(除ud.fat外),既能被fbinsttool看到,也能被windows资源管理器直接(不经fbinst、pecmd)看到。

这样,你可以把整个外置工具petools目录用fbinsttool拖入ud,然后在pe里分配盘符,然后windows资源管理器就能直接看到、运行petools目录下的所有外置工具。

至于ud扩展区(上述U:盘对应的fat分区)在分区表中的登记信息,可以让它在分区表中显式存在,好处之一是可以直接支持uefi启动——8pe散开放入ud也100%支持uefi启动了
也可以抹去,达到深藏目的,那样ud架构完全不受影响,代价只是增加一个ud.fat文件并维护之。

在windows看来,U:盘---->fat分区(ud扩展区)=分区头部+其它文件+(u:盘的)剩余空间
在fbinsttool看来,                         ud扩展区=ud.fat     +其它文件+(ud扩展区的)剩余空间
回复

使用道具 举报

5#
 楼主| 发表于 2015-1-26 12:44:59 | 显示全部楼层
本帖最后由 pseudo 于 2015-1-26 12:59 编辑

实例来了

1、fbinsttool的“启动设置”-“查看MBR”:
primary data size: 16384
extended data size: 1638400
以后加入文件,还将看到
files:
  0   "fb.cfg" 964 19
  0   "grldr" 965 299775
  0*  1553 0x39EF
  1e  "ud.fat" 16384 1658880
  1e  "0PE.ISO" 19624 ...

2、利用上述数据,用diskgenius建立fat32分区:从绝对16384扇区开始,大小1638400扇区


注意不要勾对齐,否则弄成4k对齐之类就跟ud不同了,ud仅512字节对齐。

按上图数据计算ud.fat大小=[starting sector]+[root directory sector] + [root directort cluster]*[cluster size]/512
=3240(sectors)=1620(KB)=1658880(bytes),弄一个ud.fat文件。弄完要重新格式化fat32分区,目的是间接往ud.fat写入正确内容。

3、绝对扇区16384至19624共3240扇区为fat32分区头部,让其空间对应ud扩展区里的ud.fat文件
fat32分区上0pe.iso从绝对19624扇区(16384+3240)开始,跟fbinsttool的“启动设置”-“查看MBR”看到的起点一致

最终要达到资源管理器可以看到原来fbinsttool才能看到的0pe.iso文件的效果——fbinsttool所见(除ud.fat外的ud扩展区文件)即资源管理器所得。
不需要像udm那样动ud架构,不需要驱动,只需增加一个ud.fat文件,并写入、维护适当内容。

上面没有直接写ud.fat文件内容,是通过格式化fat32分区、往分区放文件来影响分区头部(对应ud.fat文件空间),来间接写入ud.fat。
一旦把写入、维护ud.fat内容的功能做入fbinsttool,一切就简单了。
回复

使用道具 举报

6#
 楼主| 发表于 2015-1-26 21:23:47 | 显示全部楼层
本帖最后由 pseudo 于 2015-1-26 21:29 编辑
jianliulin 发表于 2015-1-26 13:26
清楚的问题。
1.把整个扩展分区映射到mbr,没有问题。
2.预留空间让给fat表,也没问题


window不会也不用照顾fbinsttool,windows下弄“乱"了也没多大问题,暂时不影响windows下使用。
但一旦启动fbinsttool,就要检查、修复不当之处,维护好ud的文件列表和ud.fat文件内容,有碎片就提示或默认直接整理碎片。
既可以在fbinsttool下做好到windows下用,也可以在windows下做拷贝等操作,待以后进fbinsttool时再把ud协调好。

打个比方,fat32区下文件都有双重国籍,既在国外有护照,也在国内有档案。
国外的是临时的,国内的是永久的。两者可能暂时有不一致,回国后由fbinsttool负责统统理顺。

另外ud.fat文件也可考虑不在fbinsttool里显示出来,就像fb.cfg那样隐藏,或者干脆在ud扩展区前预留空间,不以文件形式出现,但那样要动fbinst本身代码。
回复

使用道具 举报

7#
 楼主| 发表于 2015-1-26 22:23:30 | 显示全部楼层
jianliulin 发表于 2015-1-26 11:49
P大,

[root directory sector] + [root directort cluster]*[cluster size]/512  

呵呵,杜撰的式子,还不能自圆。
难道这样:
ud.fat大小=[starting sector]+[Data start sector] + [cluster size]/512
=3240(sectors)=1620(KB)=1658880(bytes)
吗? 加[cluster size]/512表示从下一cluster开始?

实际上我是往fat32分区加文件,看最先加入文件的起始扇区。
不过win8下一旦分配盘符,让资源管理器看见该区,马上就会自动创建一个System Volume Information文件夹,这点要设法对付,别让它占开头位置抢生意。
回复

使用道具 举报

8#
 楼主| 发表于 2015-1-27 21:12:05 | 显示全部楼层
jianliulin 发表于 2015-1-27 09:26
ud是fbinst万能启动的一个副产品,fbisnt v1.2的时候没有ud的。当引导成功grldr后fbinst的使命就完成了,剩 ...

ud扩展区相应分区表项可以有几种状态,例如
无分区表项
有正常分区表项
有类型为0,其它正常的分区表项
此外,还有是否第一项。

有正常分区表项可以支持uefi启动。无分区表项也是一种重要应用,除了uefi启动,其它方面都很好用,只需为ud扩展区文件生成一个对应分区头部的含文件列表的ud.fat文件。
回复

使用道具 举报

9#
 楼主| 发表于 2015-1-28 13:30:54 | 显示全部楼层
潜水者 发表于 2015-1-27 23:04
請問你最新的ope在那下。一直用13年版本,很久沒來。這幾天碰到筆記本華碩U啓不成功,卡在系統界面

这里2493楼 有一个。

就算13年版本应该也有办法启动成功。
开始时有读秒提示,提示有按空格、按回车等花样,您可能没试过。
如果中途卡住,开始时可以玩些花样,一般就好了。

尤其是,你把grldr+0pe.iso两文件拖入ud,开始提示时按空格,应该能进桌面,中途不会卡住。
回复

使用道具 举报

10#
 楼主| 发表于 2015-1-28 14:41:09 | 显示全部楼层
jianliulin 发表于 2015-1-28 08:05
有分区表的可以用分区表项法来实现,没有分区表的可以直接往ud中丢“分区文件”。

用文件的形式更方便 ...

不支持这种双国籍,ud文件系统暂时看不到发展方向了。

那就放弃ud文件系统吧。

谁做个功能:
1、为ud扩展区分配盘符,我们以后把ud扩展区当作一个深度隐藏区来用。
有盘符就可以随意格式化、放文件(可大于4G),直接资源管理器管理ud扩展区。启动时grldr把ud扩展区map一下,是可以看到所放文件的。
2、为ud扩展区建分区表项
方便uefi启动
回复

使用道具 举报

11#
 楼主| 发表于 2015-1-29 11:56:20 | 显示全部楼层
本帖最后由 pseudo 于 2015-1-29 11:59 编辑
mdyblog 发表于 2015-1-28 21:35
可以用PECMD2012

建一个 FAT的IMG文件 efi.img


这样这个efi.img仍有ud身份,且受限于4g,不能利用整个ud扩展区。

放弃ud文件系统,只把fbinsttool作为分区工具,划分出ud扩展区,然后不用fbinsttool管理该区,用别的工具(需要这种小工具)为ud扩展区分配盘符,然后用资源管理器直接管理,爱格成fat还是exfat、ntfs、ext2、hpfs随意,文件可以不受4g限制,把ud扩展区当作一个深度隐藏区来用,ud扩展区空间得到充分利用。

就是说,ud扩展区上的东西只有一种身份(那就不限于4G了),fbinsttool彻底放弃对其管理。
回复

使用道具 举报

12#
 楼主| 发表于 2015-2-10 18:56:54 | 显示全部楼层
本帖最后由 pseudo 于 2015-2-10 19:02 编辑

@sunsea
辛苦了。

想更方便:1产生了 (ud)/extinfo.txt文件,能否不要此文件,仍实现2、3。
pecmd能否不限于2012版。

另外,如果输入的序号是5或其它,可能会等效于1,有点风险。

点评

pecmd去不掉,扇区映射和分区表修改实在很方便  详情 回复 发表于 2015-2-10 23:02
extinfo.txt内有分区的偏移和长度,格式如下: 起始扇区号s*以扇区计量的分区长度s 到时直接读该文件即可  详情 回复 发表于 2015-2-10 22:48
extinfo.txt是留给grldr内的加载程序和编辑程序用的  详情 回复 发表于 2015-2-10 22:37
回复

使用道具 举报

13#
 楼主| 发表于 2015-2-25 15:52:03 | 显示全部楼层
嗯,请J大看看能否做个调整:格盘时,允许选择ud扩展区起点——起点可以像原来那样紧接(8M)ud区,也可以往后平移到某处(可简单地让ud扩展区充满u盘后端)。
这可能需要修正某些fbinstplus、fbinsttool代码。但从概念上说,变动将很有限,比较可行。

变动之后,fbinsttool照常管理ud区和ud扩展区,用户习惯完全不变。

变动之后,u盘可以做成单分区表项结构:
(8M)ud区(不可见)+普通区(分区表项排第一,自然可见)+ud扩展区(不可见)
分区表项法映射ud扩展区的efi.img后,ufi区对应第二分区表项,自然对windows隐藏。
由于保持了第一分区表项对应低端分区,可极大提高efi启动成功率。

缺点是ud扩展区靠后可能BIOS启动时影响读盘,这由用户了解利弊后自己设法应对就是了。

点评

MBROSTool -16 已经支持了---高端隐藏。 、、  详情 回复 发表于 2015-2-25 20:40
回复

使用道具 举报

14#
 楼主| 发表于 2015-2-25 23:47:29 | 显示全部楼层
没有udext.exp文件时,等效于有一个包含UD扩展区所有文件列表的udext.exp文件?
“同步到UD目录”反过来也行?

点评

1: >>没有udext.exp文件时,等效于有一个包含UD扩展区所有文件列表的udext.exp文件? 需要输出的文件,其实很少。大概就efi.img. 其它,输出,还真没看到有什么实际的用途。 1)BIOS启动阶段: 现在UD启动后,  详情 回复 发表于 2015-2-26 00:14
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-7 08:46

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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