是否存在可以智能处理冗余块以节省磁盘空间和即时复制的文件系统?

是否存在可以智能处理冗余块以节省磁盘空间和即时复制的文件系统?

如果我想要复制一个数 GB 的非常大的连续文件,那么我的磁盘必须分配所有必要的空间并写入每个块的副本。

为什么复制不能“快速”到只复制对块的引用并且仅在发生更改时写入新块?

我理解这会导致磁盘上的数据量(由于块引用)与磁盘可能包含的数据超出其实际容量的脱钩。这也可能导致写入时占用大量空间,因为当它们从源块更改时必须写入全新的块。

这样的文件系统肯定会有独特的惩罚,但这听起来像一个有趣的用例。

目前是否存在采用类似方式处理数据的文件系统?

请注意,我不是文件系统专家,所以我的一些假设可能非常错误。欢迎在评论中提出任何更正。

答案1

你指的是reflink。每Linuxcp手册页

指定时--reflink[=always],执行轻量级复制,即仅在修改时复制数据块。如果无法做到这一点,则复制失败;如果--reflink=auto指定,则退回到标准复制。用于--reflink=never确保执行标准复制。

在 Linux 上,这是通过以下方式实现的:电话FICLONE ioctl()

如果文件系统支持在多个文件之间共享物理存储(“reflink”),则ioctl(2)可以通过共享底层存储来使用此操作使src_fd文件中的某些数据显示在文件中dest_fd ,这比单独复制数据要快。两个文件必须位于同一文件系统中。如果文件写入共享区域,则文件系统必须确保更改对于正在写入的文件保持私密。此行为通常称为“写时复制”。

BTRFS 支持 Reflink,并且Linux 内核 4.8 中的 XFS

2016 年 8 月,Linux 内核 4.8 添加了一项新功能“反向映射”。这是大量计划功能的基础:快照、写时复制 (COW) 数据、数据重复数据删除、重新链接副本、在线数据和元数据清理、高度准确地报告数据丢失或坏扇区,以及显著改善受损或损坏的文件系统的重建。这项工作需要更改 XFS 的磁盘格式。

cp -z ...功能reflink()在 Solaris 11.4 的 ZFS 上可用。ZFS reflink 支持可能在某个时候在 OpenZFS 和 ZFSonLinux 中可用。请参阅https://github.com/zfsonlinux/zfs/issues/405

答案2

您指的是“写时复制”或 COW 的文件系统,而您所指的特定功能是 reflink 文件复制。

COW 文件系统无需复制文件内容,而是可以让新文件引用另一个文件的内容,只记录两个文件之间的相互差异。这使得您所说的复制过程几乎是即时的。

COW 文件系统也能够使用相同的模型对现有数据进行重复数据删除。有关示例,请参阅带有 bedup 的 BTRFS 或 ZFS。

这种方法的缺点是需要维护元数据来维护此类文件链接 - COW 文件系统往往会消耗大量磁盘空间来存储元数据。它还需要大量 CPU 时间来支持此功能和其他相关功能。

答案3

只需添加几个指向@Spooler 答案的链接:

相关内容