我的文件系统(FS)(特别是ZFS)支持写时复制(COW),即如果正确执行,复制操作非常便宜且恒定,实际上并不会复制底层内容。只有在我编写/修改新文件时才会复制内容。
实际上,我刚发现,ZFS-on-Linux实际上尚未为用户空间实现该功能(对吗?)。 但例如BTRFS或XFS有。 (请参见这里, 这里, 这里, 这里。)
对于(GNU)cp
实用程序,您将传递--reflink = always
选项
(请参见这里。)
cp
调用ioctl(dest_fd,FICLONE,src_fd)
(请参见这里,这里)。
如何在Python中实现此行为(如果可能)?
我假设“零拷贝”(例如这里的 os.sendfile
)不会导致这种行为,对吗?因为查看shutil
的_fastcopy_sendfile
实现(这里),它仍然是一个循环,围绕os.sendfile
使用一些自定义字节计数(应该是块大小max(os.fstat(infd).st_size, 2 ** 23)
)。还是会有类似行为的吗?
写时复制(COW)是在文件级别还是块级别上进行的?
如果可能的话,我希望这个方案是通用的和跨平台的,尽管我的问题有点偏向于Linux。 关于Mac的相关问题,可以参考这里。 MacOSX的cp
命令有一个-c
选项可以克隆文件。