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

文件克隆是写时复制(CoW)文件系统的一个特性。这是一种不需要存储第二份文件就能立即复制文件的方法。下面简要介绍支持克隆的文件系统,以及在Linux、macOS、Windows和其他操作系统上利用它们所需的系统调用和命令。

在过去十年中开发的大多数文件系统,无论是专有的还是开源的,都是CoW文件系统。简单地说,当您修改一个文件时,CoW文件系统总是创建一个新的副本,而不是就地覆盖数据。这有助于保护您的数据,避免在编写文件时出现大量不同的问题。

写入时复制文件系统也能够使用的情况下比如数据完整性检查,文件系统快照和重复数据删除。在这篇文章中,我将专注于后者的使用情况。

在传统的文件系统,存储你的文件的额外副本占用您的存储驱动器更多的空间。文件克隆使您可以在同一文件的多个副本,而无需存储的实际数据的多个副本。如果任何原始文件或它的一个克隆进行更改的数据,新的数据写入到驱动器上的另一个地方。其他的副本与它共享数据保持不变。与它共享数据的克隆仍然可以与修改后的文件共享数据的一些相同的块。

克隆是比文件系统硬链接更安全的选择。大多数文件系统都支持硬链接,它的工作方式更像是一种快捷方式。硬链接的快捷方式指向存储驱动器上与原始文件完全相同的位置。几乎没有程序能够识别硬链接,也不会警告您要修改多个文件。

必须将对文件克隆的支持烘焙到操作系统内核和文件系统驱动程序中。程序还必须了解文件克隆功能,然后才能利用它。下表显示yabo亚博体育下载了流行操作和文件系统的系统调用(syscall)和支持克隆的复制命令。yabo88软件下载

OS FS 复制命令 系统调用
Linux Bcachefs CP --reflink =始终 ficlone
BTRFS
XFS
OCFS2
Ext4 不受支持的。
OpenZFS 支持文件系统,但没有系统调用来使用它。
FreeBSD
ZFS
Solaris 甲骨文ZFS cp - z reflink
macOS apf CP -c clonefile
HFS + 不受支持的。
视窗 NTFS
ReFSv2 不包括在内。 DUPLICATE_EXTENTS_来说,文件

为了完整起见,我在表中包括了一些流行的yabo88软件下载非牛文件系统(标记为“不受支持”的文件系统)。

如上所示,cp在一些操作系统(复制)命令可以使用系统调用来指示内核克隆而不是使一个完整拷贝的文件。最显着的例子,复制命令后,查找是在MacOS。当你复制他们的有源电力滤波器的体积上它会自动复制文件。文件资源管理器在Windows和Nautilus和海豚在Linux上总会让完整副本。

不幸的是,不同的操作系统对POSIX采用了不同的参数扩展cp命令。如果实现者之间能够有更多的合作,那么对开发人员来说就更好了。我很难找到任何跨平台实现的例子。Syncthing脱颖而出除了Solaris之外,其他都支持。reflink系统调用。

表中提到的每个系统调用都克隆整个文件。属性还支持文件的部分克隆ficlonerangefideduperange系统调用。这些系统调用只允许您,对齐到底层存储介质的块大小的文件的地址部分。

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

Bcachefs也不在内核中,但它是在linux内核兼容许可下开发的,其最终目标是合并到内核中。它支持用于文件克隆的所有相关特定于linux的系统调用。

在过去的三年里,苹果公司将所有的产品都换成了新的基于牛的苹果文件系统(APFS)。微软决定反其道而行之,从Windows 10专业版中删除其“写即拷”文件系统ReFS。ReFS现在只在工作站和服务器版本上可用。裁判不合适在Windows桌面上使用。这使得Windows成为唯一没有CoW文件系统的计算机操作系统。

我发现文件克隆很有趣,在接下来的几周内,我将探讨它的几个潜在用例。下一个问题是如何做到这一点标识克隆的文件。这是非常困难的,因为文件系统不跟踪它。