大家好,我正在 Azure VM 上打开一个小 FAMP 堆栈。4 个 Xeon 核心 16GB 内存。第二个 SSD 使用 ZFS,启动驱动器是 UFS2(默认)。当我将 if=/dev/zero of=testfile bs=1024 count=1024000 添加到位于启动驱动器上的主目录时,我可以看到一个完整的 1GB 文件。当对我的 ZFS 数据集执行相同的操作时,它似乎只写入 512b。不知道这里发生了什么。我可以毫无问题地将较大的文件从 UFS2 分区复制到 ZFS 数据集。
任何建议都会很好,因为在将其发布到生产环境之前这是我所关心的问题。
[谢谢]
当在启用压缩的 ZFS 数据集上写入全零文件时,它将被折叠成一个完全稀疏的文件,空间消耗最小 - 512B,如您所见。当读回文件时,它将与所有最初写入的零一起“重新水化”。
顺便说一句,即使使用 EXT4 或 XFS 等经典文件系统,您也可以执行类似的操作:尝试发出truncate -l 1G <filename>,您将仅使用 512B(或 4K)的实际空间以 1G 文件结束。
不要禁用压缩,而是尝试从中复制一些内容/dev/urandom,您将看到预期的空间使用情况。