是否有任何文件系统为 CP 实现了写时复制机制?

Mri*_*rma 21 linux filesystems ext4 xfs copy-on-write

我们已经看到操作系统在 fork 进程时进行 Copy on Write 优化。原因是大多数情况下 fork 都在 exec 之前,所以我们不想承担页面分配和从调用者地址空间不必要地复制数据的成本。

那么在带有 ext4 或 xfs(日志)文件系统的 linux 上执行 CP 时,是否也会发生这种情况?如果它没有发生,那为什么不呢?

seb*_*sth 16

cp 手册页

当指定 --reflink[=always] 时,执行轻量级复制,其中数据块仅在修改时复制。如果这不可能,则复制失败,或者如果指定了 --reflink=auto,则回退到标准副本。

这适用于支持写时复制reflink)的文件系统,目前主要是 BTRFS。XFS reflink 实现正在开发中[1] [2]

  • 某些网络文件系统(如 NFS、CIFS、OCFS2)也可能会将这些文件传递给服务器。 (2认同)

sou*_*edi 11

要搜索的关键字是reflink。它最近在 XFS 中实现。

编辑:XFS 实现最初被标记为实验性的。这个警告在内核版本 4.16 中被删除,在我写完上面的几个月后:-)。


小智 7

Linux 有一个系统调用,允许用户空间进程告诉内核在写时复制文件副本。FICLONERANGE 和 FICLONE 用作 ioctl 的选项,允许在写入时复制文件和文件内的范围。

cp --reflink 使用它来制作文件系统支持的副本。