转:http://blog.csdn.net/fybon/article/details/22789295
最近学习研究wrapfs文件系统,但baidu了一下,相关的中文资料比较少。
因此决定将wrapfs官网的简要描术文章《Documentation_filesystems_wrapfs.txt》翻译成中文。文翻来自于:http://git.fsl.cs.sunysb.edu/?p=wrapfs-latest.git;a=blob;f=Documentation/filesystems/wrapfs.txt
(http://wrapfs.filesystems.org/或http://www.fsl.cs.sunysb.edu/)
=========================================================
注:下面关于wrapfs的解析是我的理解,原文并无此内容。
wrapfs并不是一个像ext4, vfat, yaffs2等真实访问物理存储设备的文件系统。
而是VFS和其它文件系统之间的一个中间件,即上层文件系统(VFS)与底层文件系统之间的一个钩子,通过下图就比较好理解了:
图1: 来自于《A Stackable File System Interface For Linux》
=========================================================
wrapfs 维护者: Erez Zadok <ezk AT cs DOT stonybrook DOT edu>
wrapfs官网: <http://wrapfs.filesystems.org/>
-------------------------------------------------------------------------------------------------------------------------------------------------------
wrapfs 优点:
wrapfs是一种简单的堆栈式文件系统,类似于BSD的nullfs。
wrapfs算是比较简单的了,代码少于1800行, 相比eCryptfs和Unionfs,代码都多于10000行。
因此,wrapfs简单,易读,易理解。
如下几点,足以说明wrapfs是非常有价值的:
1、wrapfs是一种理想的小模板,可以修改,逐步改造出新的文件系统功能。
2、在其他Linux可堆叠文件系统(例如,eCryptfs)作为一个平台,测试和调试的一般堆积的问题更容易。
3、wrapfs可以当作一种方法,用于测试linux VFS超强的堆叠能力。
4、wrapfs可以当作学习VFS,或学习如何写新的Linux文件系统的一个好工具。
wrapfs最早版本于1994年发布,并被全球用户广范使用。
后于2010年,在kernel 2.6.32 重写、并发布。
----------------------------------------------------------------------------------------------------------------------------------------------
wrapfs操作描述:
这篇文章只是简要描述wrapfs是如何操作的,更详细的信息,请参考下面这篇文章:wrapfs将这种对象映射以指针的形式保存在VFS对象的文件,目录项,超级块等的私有数据指针中。
例如: dentry->d_fsdata, sb->s_fs_info, and a container for inodes.
=========================================================
注:这句话,可能翻译得不易理解。下面关于wrapfs的对象与VFS对象管理是我的理解,原文并无此内容。
wrapfs每个对象 (索引节点, 目录项, 文件, 超级块)的私有数据指针,都用于保存底层文件系统的相对应的对象结构。
这样,wrapfs就可以容易调到底层文件系统的处理函数。如下图:
图2:来自于《A Stackable File System Interface For Linux》
=========================================================
下面摘取的代码片断展现的是重新创建新VFS对象的方法。
底层文件系统对象创建好后,wrapfs也要创新它自已的对象,它们之间通过interpose方法建立连接。
int wrapfs_create(struct inode *dir, struct dentry *dentry, int mode)首先,你必须有一个已经通过其它文件系挂载好的底层文件系统目录,比如:/some/lower/path。
然后,要将这个已有的、挂载好的目录再挂载到/mnt/wrapfs目录,就可以使用如下命令:
# mount -t wrapfs /some/lower/path /mnt/wrapfswrapfs的在各系统上的测试情况,这部份就不翻译了。
如果要使用,使用者自必对稳定性负责就是了!