ZFS显示可用空间,不能删除

我有一个旧的zfs池(创build于05-2012),在debian 7.6上运行,并有df报告的26Gbytes(58Tbytes)。 我刚刚重新安装了操作系统(debian 8.7),现在游泳池在df中显示为0字节,但在zpool list中为1.04Tbyte“FREE”。

我有两个问题:

1)zpool list(= 1.04Tbytes)中的FREE和zfs list(= 0)中的AVAIL之间有什么区别?

2)有什么我可以使用这个1TB的可用空间吗? 我删除了所有的快照,这没有什么区别…

提前致谢。

% df -h /contentA Filesystem Size Used Avail Use% Mounted on contentA 58T 58T 0 100% /contentA % zpool list contentA NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT contentA 65T 64.0T 1.04T 16.0E - 98% 1.00x ONLINE - % zfs list contentA NAME USED AVAIL REFER MOUNTPOINT contentA 58.0T 0 58.0T /contentA % uname -a Linux myserver 3.16.0-4-amd64 #1 SMP Debian 3.16.39-1+deb8u2 (2017-03-07) x86_64 GNU/Linux % cat /etc/debian_version 8.7 

zfs(8)手册页, available手段:

 The amount of space available to the dataset and all its children, assuming that there is no other activity in the pool. Because space is shared within a pool, availability can be limited by any number of factors, including physical pool size, quotas, reservations, or other datasets within the pool. 

一般来说,查找差异的首要地方是数据集之外的内容,例如在同一个池中的不同数据集上设置预留。

但是,从您的帖子看起来,您所运行的数据集list可能是您的池的根数据集,应该考虑其中的所有其他子数据集。 在某些情况下,您的池配置可能会导致这样的差异,详见Oracle文档 。

但是(再次),这些通常适用于冗余和元数据存储所需的空间,以便在您的逻辑数据大小扩展的情况下(即,镜像池显示的available空间是available空间的一半,因为您写入数据集的每个字节必须复制到两个地方)。 由于您的数据集available为零,显然这不仅仅是占用未来写入的预测开销。

这让我最后的解释。 ZFS在其空间会计中建立了一个安全机制,以防止用户填满游泳池超过63/64的满额(这令我感到难以置信的接近你的情况,因此几乎可以肯定你打的极限)。 因为ZFS总是需要新的空间来修改磁盘上的状态(因为写时拷贝),所以如果超出了这个限制,池可能不再能够删除东西来释放新写入的空间,使其成为只读 – 永久 。 尽管可能对ZFS进行修补或者改变可调参数以绕过限制,但我不会推荐它!