我在基于 Linux RAID 的 NAS 上的 LVM 上有一个 ext4,已经十多年了,它运行 syncthing 并同步我家实验室中的数十台设备。效果很好。我终于基于 ZFS RAID 构建了它的替代品(第一次使用 ZFS),所以有很多东西要学。
我知道:
- 在极少数情况下,重复数据删除是一个好主意(我知道 RAM 的影响。假设我等到快速重复数据删除稳定下来并进入我的系统)
- 我的大部分同步活动都是对现有文件进行小修改
- 在 zraid2 上,随机异步写入更难/更慢。同步将始终存在,但新 NAS 上的负载会很轻。
- Syncthing 的工作方式是默认创建新文件然后删除旧文件,但也许 copy_file_range 会改变这一点?
我的问题是:
- 看看 ZFS 是 COW 的,并且 syncthing 会不断地用对现有文件的小随机写入来淹没阵列,从我的 syncthing 数据中创建数据集并仅在那里启用重复数据删除不是更有效率吗?
- 此 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_range
或reflink
,请不要使用它,因为该功能不完全稳定并且可能导致(罕见的)文件损坏。
答案2
ZFS 重复数据删除并不是最厉害的工具……它占用大量内存,而且会占用大量读取 IOPS,这对于 RAIDZx 来说并不好。如果您确实需要重复数据删除,无论在何种情况下(我想是文件服务器?),您最好使用虚拟化并启用操作系统级重复数据删除(Linux 为 VDO,Windows Server 为微软本周所称的)。我们运行了几个 Proxmox+ZFS 主机,它们正是这样做的,并且对性能(KVM)、可靠性(ZFS)和空间节省(VDO)非常满意。祝你好运!