我有一个 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
减少)。AVAIL
backup/data