哪些文件系统支持文件克隆

文件克隆是写入时复制(全体)文件系统的一个特征。这是一个直接的方法,使重复的​​文件副本,而不需要第二个副本存储。这里的克隆能力的文件系统的概述和系统调用和命令需要采取在Linux,MacOS的,Windows和其他操作系统利用它们。

在过去十年中开发的大多数文件系统,专有和开源的一致好评,是CoW的文件系统。简而言之,当你修改文件,而不是就地重写数据奶牛文件系统总是创建一个新的副本。这有助于保护您的数据免受同时写入文件时可能出现不同的问题摆。

写即拷文件系统还支持数据完整性检查、文件系统快照和重复数据删除等用例。在本文中,我将专门关注后一个用例。

在传统的文件系统上,存储文件的额外副本会占用存储驱动器上更多的空间。文件克隆使您能够对同一文件进行多个复制,而无需存储实际数据的多个副本。如果原始文件或其克隆之一对数据进行了更改,则将新数据写到驱动器上的另一个位置。与它共享数据的其他副本保持不变。与它共享数据的克隆仍然可以与修改后的文件共享一些相同的数据块。

克隆是文件系统的硬链接更安全的替代。硬链接在大多数文件系统的支持,工作更像是一个捷径。该硬链接的快捷方式指向您的存储驱动器与原始文件在同一个位置。几乎没有程序是硬链接了解并不会提醒你,你要修改多个文件。

文件克隆的支持必须进行烘烤到操作系统内核和文件系统驱动程序。项目还必须意识到的文件克隆功能,他们可以利用它之前。下表显示了系统调用(系统调用)和流行的操作系统和文件系统的克隆感知的复制命令。

操作系统 FS 复制命令 系统调用
Linux的 Bcachefs cp - reflink =总是 ficlone
Btrfs
XFS
OCFS2
EXT4 不支持。
OpenZFS 支持的文件系统,但是没有系统调用来利用它。
FreeBSD的
ZFS
的Solaris 甲骨文ZFS CP -z reflink
苹果系统 有源电力滤波器 cp - c clonefile
HFS + 不支持。
窗户 NTFS
ReFSv2 不包含。 重复_EXTENTS_至_文件

我已经列入表中的完整性一些流行的非牛的文件系统(那些标记为“不支持”。)

如上图所示,该CP一些操作系统上的(copy)命令可以使用系统调用来指示内核克隆一个文件,而不是生成一个完整的副本。在复制命令之后,最值得注意的例子是macOS上的Finder。当您在APFS卷上复制文件时,它会自动克隆文件。Windows上的文件资源管理器,Linux上的鹦鹉螺和海豚总是会复制完整的副本。

这是不幸的是,不同的操作系统有不同的观点扩展到POSIX入驻CP命令。这本来是更好地为开发人员,如果有可能已经实现者之间多一点合作。我好不容易才找到的跨平台实现的任何实例。Syncthing脱颖而出为所有,但Solaris的支持reflink系统调用。

在表中克隆的整个文件每个系统调用的提及。Linux还支持使用部分文件克隆ficlonerangefideduperange系统调用。这些系统调用只允许您定位文件中与底层存储介质的块大小一致的部分。

由于许可问题,OpenZFS不是Linux内核的一部分不可能改变。OpenZFS不支持任何相关的Linux系统调用的克隆文件或块。它不提供在FreeBSD或Linux系统调用这些替代。(这就是为什么有出带外没有重复数据删除工具OpenZFS。)

Bcachefs不在的内核,要么,但它根据与被合并到内核的终极目标一个Linux内核兼容的授权开发。它支持所有的文件克隆相关的Linux特有的系统调用。

在过去的三年中,苹果已经切换所有的产品至其新的基于牛苹果文件系统(的APF)。yabo亚博体育下载微软已经决定向相反的方向走,并在除去其写入时复制文件系统,参考文献,从Windows 10专业。裁判现在只有在工作站和服务器版本中提供。裁判不适合在Windows上使用桌面反正。这并没有一头牛文件系统保留Windows作为唯一的计算机操作系统。

我发现文件克隆引人入胜,我会在未来几周内探索一些潜在的使用情况吧。接下来将是你如何识别一个克隆的文件。东西是相当困难,因为文件系统不跟踪它。