|
本版是讨论内核的,那我来说一个我已经设想了很久的计划:ShadowFS,希望通过编写内核驱动,能够付诸实现!
什么是ShadowFS?它是一个“影子”文件系统。当我们做LiveCD的时候,LiveCD是不可写的。因此应用上就比较麻烦,比如每次都要输入相同的许多命令等等。最显然的一点,就是每次都要运行一遍 adsl-setup,然后才能adsl-start。
ShadowFS希望通过设定一个磁盘分区作为另一个只读分区的影子,来解决这个问题。对于用户来说,他面对的是一个可读写的文件系统。任何写入操作都会写入影子分区中;但如果影子分区上没有所需要的数据,ShadowFS会从原始只读分区中读取。
为了避免将一个影子分区对应于一个错误的只读分区(例如,你用同一个影子分区对应了两个只读分区,这样会造成严重错误!),需要进行校验。通过iso9660、squashfs等只读文件系统内部的一些功能,应当可以生成校验码,在格式化影子分区的时候写入进去。对于ext2等可读写的文件系统,创建影子分区也可以,但如果创建了影子分区之后,另外又将ext2分区mount成可读写的,则有可能会出现冲突,且很难防止。
例如:mkshadowfs --from /dev/cdrom -t iso9660 -o $Options /dev/hda7这条命令就为/dev/cdrom创建了一个影子分区/dev/hda7。其中,会设定mount /dev/cdrom时所用的文件类型和选项。这些也需要一并记录在影子分区中。
当需要加载影子分区的时候,可以采用这样的命令:
mount -t shadowfs /dev/hda7
由于/dev/hda7已经包含了足够的信息表明哪个设备是对应的原始设备,该设备应该用什么选项来mount等等,所以munt这个分区就相对变得简单。
为了方便有时候要用不同的选项mount同一个设备,或者适应硬件上的改变(例如,把硬盘拆到其它机器上去了),这些元信息是可以修改的。但fs类型和内部的签名不能修改。所有元信息都可以查询。
setshadowfs --from /dev/loop0 /dev/hda7
这条命令即可把/dev/hda7修改为对应/dev/loop0。
showshadowfs /dev/hda7
这条命令显示shadowfs分区hda7的信息。可能的输出如下:
/dev/hda7 is a shadow of /dev/loop0
Original filesystem is iso9660
Options of original filesystem is ...
Signature: 0x88043343aabbc
Current Size:10,020MB
Used Size: 200MB
有了Shadowfs,LiveCD的功能可以变得异常强大:首次在某台机器上使用时,可以提示你建立shadowfs;在以后的使用中,可以自动搜索适合的Shadowfs加以使用,这将是超炫的体验!
更加更加炫的是,可以用loop0来做Shadowfs。这样,只要这台机器上有足够的空间,LiveCD就可以在现有分区上(甚至是Windows分区)创建一个文件,以后需要写入的内容就放在这个文件里---是不是酷毙了?这样的LiveCD已经不仅仅是“活的”了,它还可以安装软件、调整设置,可以做任何硬盘版OS能做的事情。
但是,Shadowfs项目现在还不存在。没有大家的支持,以上的设想就不可能实现。从技术的角度看,实现上除了需要对内核文件系统有经验之外,似乎困难不大。有高手愿意参与这样一个项目吗? |
|