文件快速拷贝-reflink

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件快速拷贝-reflink相关的知识,希望对你有一定的参考价值。

参考技术A REFLINK是实现文件快速拷贝的基础。

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

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

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

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

开源实现中最显著的是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

以上是关于文件快速拷贝-reflink的主要内容,如果未能解决你的问题,请参考以下文章

家用台式机和笔记本快速拷贝超大文件

java----使用NIO进行快速的文件拷贝

不同的LINUX系统,跨服务器快速拷贝文件

scp 命令快速使用讲解

Python 编程快速上手 让繁琐工作自动化-第九章实践项目 9.8.1选择性拷贝

iOS 快速打包方法