我有一个通过 NFS 连接到 Macintosh 的 ZFS 系统。系统几乎已满,但我发现大量重复文件jdupes
。
我不知道这些副本是如何制作的,有可能是从互联网上重新下载的,也有可能是用cp
.如果它们是在本地复制的,则它们不应使用任何额外的空间,因为 ZFS 是写时复制文件系统,但如果重新下载它们,则它们应该使用相同的空间两次。我的 NFS 服务器没有足够的 RAM 用于 ZFS 重复数据删除。
我想更换任何物理上重复的具有写时复制副本的副本。
如何判断哪些文件重复项是彼此的写入时复制重复项?
答案1
您似乎在这里混淆了 ZFS 的两个属性:
- 写时复制 (CoW)是对文件系统在修改文件时如何工作的描述。传统(非 CoW)文件系统具有读取-修改-写入周期,其中文件的更新是就地完成的,这意味着文件的唯一副本被直接修改(将更新的字节写入文件内的指定位置) )。如果断电,可能会发生损坏。 ZFS 等 CoW 文件系统的情况并非如此,对文件的任何修改都不会影响文件:更改的字节只是简单地附加,如果成功,旧部分将被标记为可删除。这可以防止以更多碎片为代价而失去完整性(因为每次更改都需要新的不同空间)。
- 重复数据删除是可以在 ZFS 文件系统上启用的可选功能(默认为禁用)。如果启用,将首先在重复数据删除表 (DDT) 上查找要写入的任何数据。如果它已经存在,则不会再次写入,仅链接。这适用于传输(读取和写入),但不适用于已经重复存储的“旧”数据。它也有一些你可以在互联网上阅读的缺点,所以我不会在这里概述它们。
如果您从未在文件系统上启用重复数据删除,则任何副本(如cp
Finder 中的副本等)都将创建新数据并减少可用空间。没有内置的默认重复数据删除(甚至默认情况下禁用推荐的压缩!)。您可以通过复制 1 MB 的文件 1000 次来亲自检查这一点,您将损失 1000 MB 的空间,而不是 1 MB。
如何判断哪些文件重复项是彼此的写入时复制重复项?
你不能,但你可以像你一样使用重复检查器来查找精确的重复项(就像在任何其他文件系统上一样)。您还可以zdb -b poolname
使用估计重复数据删除的好处看看增加 RAM 是否适合您的情况。此外,启用压缩在任何情况下都会有所帮助,因此如果您尚未使用它,请启用它。