|
有这个想法是因为,想让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 编辑 ] |
|