我正在读rmlint
手册,重复的处理程序之一是克隆和引用链接:
· 克隆:仅限 btrfs。尝试使用 BTRFS_IOC_FILE_EXTENT_SAME ioctl(3p) 克隆这两个文件。这将物理删除重复的范围。至少需要内核 4.2。
· reflink:尝试将重复文件重新链接到原始文件。另请参阅 man 1 cp 中的 --reflink。如果文件系统不支持则失败。
这个克隆到底有什么作用,它与引用链接有何不同? BTRFS_IOC_FILE_EXTENT_SAME ioctl 的作用是什么?
答案1
差异有些微妙。
Reflink 删除重复文件并在其位置创建一个新文件,该新文件是原始文件的克隆。尽管 rmlint 尽最大努力通过一些技巧来保留元数据,但副本的元数据丢失了touch -mr
。
克隆使用 BTRFS_IOC_FILE_EXTENT_SAME ioctl(或者,在最新版本中,使用 FIDEDUPERANGE ioctl),它要求内核检查文件是否相同,如果相同,则使它们共享相同的数据范围。他们保留原始元数据。它可以说比 reflink 更安全,因为它是由内核自动完成的,并且它检查文件是否仍然相同。