在 FreeBSD 13 上使用 dd 将 1GB 文件写入 zfs 数据集时出现问题

在 FreeBSD 13 上使用 dd 将 1GB 文件写入 zfs 数据集时出现问题

大家好,我正在 Azure VM 上启动一个小型 FAMP 堆栈。4 个 Xeon 核心 16GB 内存。第二个 SSD 使用 ZFS,启动驱动器是 UFS2(默认)。当我将 if=/dev/zero of=testfile bs=1024 count=1024000 dd 到位于启动驱动器上的主目录时,我可以看到一个完整的 1GB 文件。当我对我的 ZFS 数据集执行相同操作时,它似乎只写入 512b。不确定这里发生了什么。我可以毫无问题地将较大的文件从 UFS2 分区复制到 ZFS 数据集。

任何建议都很好,因为在我将其投入生产之前,这是我关心的一个问题。

[谢谢]

答案1

在启用压缩的 ZFS 数据集上写入全零文件时,它将被压缩为完全稀疏的文件,占用空间最小 - 512B,如您所见。读回文件时,它将被“重新水化”,所有最初写入的零将被全部水化。

附注:即使使用 EXT4 或 XFS 等传统文件系统,您也可以做类似的事情:尝试发出truncate -l 1G <filename>,您将最终得到一个仅使用 512B(或 4K)实际空间的 1G 文件。

不要禁用压缩,而是尝试复制一些内容/dev/urandom,然后您将看到预期的空间使用情况。

答案2

我关闭了 lz4 压缩,dd 工作正常。显然这与 dd if=/dev/zero 有关。我不认为这会成为今后的问题,因此最有可能重新打开压缩。

相关内容