为什么将文件复制到我的 ZFS 数据集时总可用大小会缩小?

为什么将文件复制到我的 ZFS 数据集时总可用大小会缩小?

我有一个 2TB 的 USB 硬盘,用作备份磁盘。该磁盘包含一个 GPT 分区表,其中有一个分区,类型为 bf00。在该分区上,我创建了一个启用了加密和压缩的 ZFS 池和一个数据集。

当我将文件同步到磁盘时,我注意到全部的挂载数据集的大小变得越来越小(请注意:这是奇怪的部分,它真的是全部的大小,而不是可用的大小)。怎么会这样?我怎样才能使用全部容量?

这是的输出df -h,总大小已经降至1.2T(rsync此刻仍在复制):

backup/DATA             1,2T    380G  834G   32% /backup

这是zpool list

# zpool list
NAME        SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
backup     1,81T   964G   892G        -         -     3%    51%  1.01x    ONLINE  -

这是zfs list

# zfs list
NAME                     USED  AVAIL     REFER  MOUNTPOINT
backup                   973G   832G       98K  none
backup/DATA              381G   832G      381G  /backup

因此,似乎有大约三分之一的容量缺失,这是怎么回事?我能以某种方式回收空间吗?它去哪儿了?我正在使用 Arch Linux (5.3.8-arch1-1) 和 zfs-dkms 0.8.2-1。

顺便说一句:我不是在谈论 2 TB 与 1.8 TebiByte 的问题,这是其他问题。

更新:

以下是 zpool status 的输出:

zpool status
  pool: backup
 state: ONLINE
  scan: none requested
config:

    NAME           STATE     READ WRITE CKSUM
    backup         ONLINE       0     0     0
      BackupDisk1  ONLINE       0     0     0

errors: No known data errors

zfs list -o space
NAME                    AVAIL   USED  USEDSNAP  USEDDS  USEDREFRESERV  USEDCHILD
backup                   793G  1011G        0B     98K             0B      1011G
backup/DATA              793G   422G        0B    422G             0B         0B

最新消息:

好的,我让系统自己运行了一整夜,只是想看看会发生什么。上次查看时,数字与上文类似,在向其复制几百 GB 数据时,数据集备份/数据的总空间正在缩小。即使 rsync 完成,驱动器也很忙(LED 指示)。后台 CPU 使用率也很高。

当我今天早上查看时,备份/数据的总大小回到了 1.8TB,并且所有后台工作显然已经完成。太棒了!:-)

我认为什么可能发生的情况是:rsync 向数据集发送了大量文件。ZFS 似乎收到并缓冲需要写入的文件。此缓冲区可能会在存在时缩小总可用大小。由于我在池和数据集上启用了压缩和加密,因此这可能需要一段时间(rsync 完成后很长时间),即使在我相当不错的工作站(12 核,32 GB RAM)上也是如此,也许是因为 USB 驱动器确实不快。

有人能确认这是怎么回事吗(或类似的事情)?我认为对于遇到类似问题的每个人来说,了解这一点都是有益的。

答案1

您仅有 ~600 GB 由数据集引用backup,另外还有 422 GB 由 引用backup/data

zfs 用于“发布”文件系统上正确数量的可用空间的方法,正如传统实用程序所看到的df是更改​​总可用磁盘空间。虽然有点令人困惑,但它会产生正确数量的可用空间,并且方式比说更清晰,BTRFS 的作用

在您的具体情况下,当您写入backup(而不是backup/data)时,其他数据集/文件系统的总可用空间会相应减少。

编辑:由于 OP 确认他确实没有在 上写任何东西backup,我提供了额外的解释。ZFS 具有某种“删除节流阀”功能,其中已删除的文件在后台取消分配。当 rsync 创建并删除短时间内创建了很多临时文件,所以那些已被删除但还未释放的文件可能会被计入根数据集(backup减少)。AVAILbackup/data

相关内容