ZFS 上的 Syncthing 是重复数据删除的一个很好的例子吗?

ZFS 上的 Syncthing 是重复数据删除的一个很好的例子吗?

我在基于 Linux RAID 的 NAS 上的 LVM 上有一个 ext4,已经十多年了,它运行 syncthing 并同步我家实验室中的数十台设备。效果很好。我终于基于 ZFS RAID 构建了它的替代品(第一次使用 ZFS),所以有很多东西要学。

我知道:

  1. 在极少数情况下,重复数据删除是一个好主意(我知道 RAM 的影响。假设我等到快速重复数据删除稳定下来并进入我的系统)
  2. 我的大部分同步活动都是对现有文件进行小修改
  3. 在 zraid2 上,随机异步写入更难/更慢。同步将始终存在,但新 NAS 上的负载会很轻。
  4. Syncthing 的工作方式是默认创建新文件然后删除旧文件,但也许 copy_file_range 会改变这一点?

我的问题是:

  1. 看看 ZFS 是 COW 的,并且 syncthing 会不断地用对现有文件的小随机写入来淹没阵列,从我的 syncthing 数据中创建数据集并仅在那里启用重复数据删除不是更有效率吗?
  2. 此 syncthing 设置如何与 ZFS 重复数据删除设置交互?复制文件范围它会覆盖 ZFS 设置吗或者两者都需要启用?

更新:版本信息(可能):

  • Ubuntu 22.04 或 24.04
  • 内核 6.5+
  • syncthing 1.27.5
  • OpenZFS 2.3

答案1

除了具有大量 RAM 的快速 NVMe 阵列外,不要在任何其他设备上使用 ZFS 重复数据删除,即使在这种情况下,也要准备好付出巨大的性能代价。在 NAS(我认为它在 HDD 上运行)上,不要使用它。真的。这不仅仅是一个内存问题——即使有无限的内存,你也需要加载首先是重复数据删除表。如果没有(非常)快速的存储,这将是一个缓慢的过程。

此外,重复数据删除发生在记录大小块中 - 默认情况下为 128K,降低记录大小以增加重复数据删除率(即:4K 或 8K)会带来其他紧迫问题(压缩率更低和 CPU / MEM 开销更高)。

最后,如果syncthing默认删除旧/更新文件,则使用重复数据删除不会获得太多空间。相反,请确保使用 lz4 或 zstd 压缩并为其创建特定数据集syncthing

关于copy_file_rangereflink,请不要使用它,因为该功能不完全稳定并且可能导致(罕见的)文件损坏。

答案2

ZFS 重复数据删除并不是最厉害的工具……它占用大量内存,而且会占用大量读取 IOPS,这对于 RAIDZx 来说并不好。如果您确实需要重复数据删除,无论在何种情况下(我想是文件服务器?),您最好使用虚拟化并启用操作系统级重复数据删除(Linux 为 VDO,Windows Server 为微软本周所称的)。我们运行了几个 Proxmox+ZFS 主机,它们正是这样做的,并且对性能(KVM)、可靠性(ZFS)和空间节省(VDO)非常满意。祝你好运!

相关内容