文件快速拷贝-reflink

REFLINK是实现文件快速拷贝的基础。

最初实现文件快速拷贝的方式是使用hardlinks。但是这样的方式存在很明显的弊端,实际上使用硬链接让文件之间共享数据的同时也共享元数据(metadata),即使用一个索引节点。当一个文件修改元数据时,其他使用该文件会收到影响。

REFLINK的实现解决了以上的弊端:数据之间不再共享元数据,而是对应不同的inode,数据块在创建支持共享。由于在拷贝时只创建新的inode,因此拷贝速度非常快。数据根据COW,只在发生变化时产生。

目前Btrfs、APFS、OCFS2等文件系统上均已支持该特性。ceph社区中有很多工程师打算支持该功能,但是已经7年了目前还没有苗头。

REFLINK一般在后面会添加上[WHEN],表示如何创建,设置auto则使用标准的拷贝方式。always则采用COW方式创建。

OCFS2上的REFLINK

开源实现中最显著的是OCFS2上的reflink实现。OCFS2是Oracle实现的文件系统,在2.6.16版本时纳入内核主线。主要是Oracle和Novell的工程师在开发维护。

“reflink which creates a target inode that shares the data extents of the source inode in a copy-on-write fashion.” 即reflink会创建一个新的索引节点和源文件共享数据。

oracle开发此功能的目的:虚拟机使用的虚拟磁盘,实际上是OCFS2文件系统上的一个文件,这些文件通常的大小为GB级别。假如需要使用相同的硬盘创建一个新的虚拟机,那么就会产生一个拷贝的动作。最初的实现方式就是在OCFS2上将这些文件拷贝,新的实现方式将使用reflink。

创建之初,不会有新的空间被占用。只有文件改变之后才会有写入动作。OCFS2已经实现了文件级别的reflink功能。而这些动作对于上层应用是透明的。


参考

https://tracker.ceph.com/issues/1680

https://blogs.oracle.com/wim/ocfs2-reflink

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容