无忧启动论坛

标题: 利用软/硬链接制作PE的想法 [打印本页]

作者: yjfok961    时间: 2010-9-29 12:59
标题: 利用软/硬链接制作PE的想法
有这个想法是因为,想让PE达到最小内核,及提高兼容性。第一个想到的是wim核心,但wim核心无法外置SRS模块,因为编辑不了txtsetup.sif文件。然后无意中看到了软硬链,如果能进行软硬链接的话,就可以极限地减小内核的大小,而且不存在有些文件必需放在system32下的问题,但这个想法限制比较多。。。我只是在此提下,我没办法实现,也许会有人可以

首先简要说明下软硬链接:
我们知道unix文件大致可以分为这样三部分:目录(文件名),inode   和数据区。

对于复制来说,不仅仅创建了新的目录项(文件名),新的inode,还复制了该文件的所有数据;

而硬连结则仅仅创建了新的目录项,并且在目录项中相应的inode编号被连结到相应的文件的inode编号,同时,该文件的inode引用计数加1;

这样,你删除原来的文件时候,文件数据并不会被删除,因为inode结点引用计数>0,所以,通过硬连结还能继续访问。

换句话说,硬连接使得该文件存在另外一个别名,也就是另外一个入口。

顺便说一下软连结,就是符号连结,其实就相当于是windows下的快捷方式。

创建了一个新的目录项,一个新的inode,只不过数据区里放的是被引用的文件路径和名称。

这个说明虽然是说unix文件的,但windows也应该差不多吧,在windows下硬链接叫hardlink,软链接有两种:symlink和junction,其中symlink可以对文件/目录进行软链,而junction只能对目录进行软链。

这个想法有诸多限制,主要是对vista以下系统限制太多了,我自己的分析如下:
1.软硬链在vista以上系统里是有提供工具的mklink,可以进行软硬链;但在vista以下系统中只能通过fsutil等创建文件硬链,junction等创建目录软链,而不存在文件的软链,微软是通过快捷方式实现的,但两者并不是一个概念。另,软硬链估计都必须在ntfs分区上进行,fat好像不支持,硬链肯定是不可能,软链存在可能性,但没有相关工具。

2.首先讲下硬链接,硬链有着“无法硬链目录,无法跨卷硬链”的缺点,而且如果在同卷(分区)下用wim挂载出的文件是不能进行硬链的(我试验过,猜测是ntfs卷内不存在挂载出的文件的记录,虽然可读写),这样这一方法就直接被否定了用于靠wim压缩挂载的winpe的制作。

3.软链的话,不存在硬链的缺点,但如果源文件被删的话,软链出的文件就无法访问了。因为没vista以上系统,所有无法进行测试,但按原理的话是可以对wim挂载出的文件进行软链的,而且即使不能直接进行软链,也可以wim挂载后再挂载img镜像来解决(不同卷下(分区)的软链),所以这一方法是最有希望的,但vista以下系统没有文件的软链。。。

4.新版pecmd的限制。新版pecmd会检测cmdline的值或者说是会检测是否是winlogon调用,由于pecmd也需要系统文件支持启动,所以无法用cmd代替从而达到极限最小内核。另我测试中发现,如果第一个pecmd.ini里的命令用的少的话,可以减少pecmd启动时对文件的依赖。当然用旧版pelogon+pecmd可以解决这一问题。

=============================================================

由以上分析知,
硬链基本对各版本PE都无希望;
软链的话,
对vista以下系统用软链来制作也基本无希望,因为限制有ntfs, 文件软链工具,ntfs限制好解决(主要针对F6及grub4dos的FAT命令),可以使用ntfs核心,启动时将要写入的文件传到dos下,再通过omnifs等对ntfs进行操作,但软链工具的话就难了,微软是通过快捷方式解决的,好像也没人开发出来针对软链的工具。
对vista以上系统,没接触过制作过程,所以不好评价,但制作条件都具备:ntfs限制好解决,文件软链工具有mklink,所以是最有可能用软链制作成功的。

[ 本帖最后由 yjfok961 于 2010-9-29 13:01 编辑 ]
作者: yjfok961    时间: 2010-9-29 14:33
算了,不纠结于SRS外置了,直接全内置SRS驱动配合手动F6,反正也不大,使用wim核心
作者: fujianabc    时间: 2010-9-29 14:59
nt 6.x系统制作的文件软连接nt 5.x不认的
作者: yjfok961    时间: 2010-9-29 16:34
可喜的是,我找到了一个可以在nt5.x进行软链接的工具:
http://homepage1.nifty.com/emk/symlink.html
里的symlink1.05版,好像只更新到06年,是从wiki上的外部链接找到的http://en.wikipedia.org/wiki/Symbolic_link

总共有三个文件:senable.exe,symlink.sys,ln.exe
senable.exe用来注入symlink.sys,使系统能够支持文件的软链(这个用txtsetup.sif集成应该也可以吧)
ln.exe可进行软/硬链
具体限制什么的正在阅读,不过是日文的用chrome翻译过来还是很难看懂。。。

另外,开fbwf后无法从其它ntfs分区软链接进去,自身分区内软硬链也不行。同理wim核心无法用软硬链文件进分区,即使是用win7系统(win7这个是猜测)。而且无法软链进wim挂载的目录,这也说明wim核心无法用软链。

========================================

最后,如果要软链的话,在vista以下系统,只能通过上面的symlink.sys
另:如上猜测的话,wim核心的win7系统应该官方的工具mklink也无法进行软硬链吧,除非不用fbwf或不用wim核心,那对分区的所有写操作都只能在另一个内存盘上进行了
========================================
说个题外话,真希望grub4dos能够执行外部32位的命令行工具,不知道有没有实现的可能性。。。也就是希望它成一个操作系统,呵

[ 本帖最后由 yjfok961 于 2010-9-29 22:27 编辑 ]
作者: yjfok961    时间: 2010-9-29 16:57
由此,不管是RAM还是非RAM(ntfs格式的),内核体积都可减下来,结构大概是:
.........进系统到加载lsass,service后,加载setupreg.hiv的cmdline时所需文件+cmd进行软链接其它文件(用wimx可以挂载用wim压缩的ntfs格式的img镜像,然后进行软链接)

缺点是不能开fbwf,及cmdline要用回旧版的pelogon+pecmd,当然多加几个文件启动新pecmd后再进行软链接也是可以的
猜测,在开fbwf前可以进行软链接,就像是开fbwf前可以挂载wim一样,如果可以这样,但还是有缺点就是开fbwf后如果想再加载其它组件就不能软链接了

[ 本帖最后由 yjfok961 于 2010-9-29 22:49 编辑 ]
作者: zhoubin    时间: 2010-9-29 17:12
支持楼主。。。。。
我是菜鸟,帮不上什么忙的。。。。
只能支持楼主。。。。

[ 本帖最后由 zhoubin 于 2010-9-29 17:17 编辑 ]
作者: junyee    时间: 2010-9-29 18:05
建议楼主自已开发FAT驱动,增加文件/目录链接功能!
作者: yjfok961    时间: 2010-10-1 21:03
我可没那能力。。。FAT估计是判死刑了,在FAT分区上是建立不了软硬链接的
作者: lsbzhe    时间: 2010-10-3 09:20
楼主想法好,支持中!
作者: yichya    时间: 2010-10-3 09:51
如果把pecmd main改成PECMD LOAD没准可以进行工作.




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