我有一个旧的zfs池(创建于05-2012),它在debian 7.6上运行,并且有dF报告的26Gbytes(58Tbytes)。我刚刚重新安装了os(debian 8.7),现在游泳池在df中显示为0字节,但是1.04Tbyte" FREE"与zpool列表。
我有两个问题:
1)zpool list(= 1.04Tbytes)中的FREE与zfs list(= 0)中的AVAIL有什么区别?
2)有什么办法可以使用这个1Tbyte的可用空间吗?我删除了所有快照,这没有任何区别......
提前致谢。
% 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
答案 0 :(得分:1)
在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 docs。
然而(再次),这些通常适用于在逻辑数据大小扩展的情况下冗余和元数据存储所需的空间(即镜像池显示available
空间的一半free
空间} space,因为您写入数据集的每个字节都必须复制到两个地方)。由于您的数据集available
为零,显然这不仅仅是考虑到未来写入的预测开销。
这让我得出最后的解释。 ZFS在其空间会话中内置了一个安全机制,以防止用户填满超过63/64的游戏池(这让我觉得非常接近你的情况下的比例,因此几乎可以肯定你正在达到的限制)。因为ZFS总是需要新的空间来修改磁盘状态(因为写时复制),如果你超出了这个限制,那么池可能不再能够删除东西以释放新的写入空间,使其变为只读 - 永久。虽然可以修补ZFS或更改可调参数以绕过限制,但我不推荐它!