如何轻松地为“zfs create -V”命令提供所有可用空间?

如何轻松地为“zfs create -V”命令提供所有可用空间?

我需要在 zpool 上创建一个 ext4 fs。我想使用所有(或几乎所有)可用空间,如下所示。

# zpool list
NAME      SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
nat2012  1,81T   124K  1,81T        -         -     0%     0%  1.00x    ONLINE  -
# zfs list
NAME      USED  AVAIL     REFER  MOUNTPOINT
nat2012   105K  1,76T       24K  none
# zfs create -V 1.75T nat2012/backup
bad volume size '1.75T': invalid numeric suffix '.75T'
# zfs get avail nat2012
NAME     PROPERTY   VALUE  SOURCE
nat2012  available  1,76T  -
# zfs get -H avail nat2012
nat2012 available   1,76T   -

我的问题是“1.75T”不被接受为卷大小。(但它显示为大小。)其值四舍五入为 0.01T,即 10G。我接下来尝试获取可用大小(以字节、兆字节、千兆字节或块为单位),或者几乎任何能告诉我确切大小的单位,并且可以与“zfs create -V”一起使用。当我看到没有“zfs get”选项时,我感到很惊讶。根据文档,“-H”选项应该“以更容易被脚本解析的形式显示输出”。它省略了标题并使用制表符分隔字段,但格式很糟糕。大小仍然以 TBytes 为单位显示,并以 +/- 10G 的精度四舍五入。问题较小,但它使用当前语言环境进行格式化(在我的情况下,小数点“。”被替换为“,”)。它将是 KB 中的整数。

请注意,在这种特殊情况下无法使用“df”命令,因为没有安装任何内容。我可以这样做以千字节为单位显示可用块:

# mkdir -p /nat2012
# zfs set mountpoint=/nat2012 nat2012
# df -k | grep nat2012
nat2012        1885339520        128 1885339392   1% /nat2012

但这会产生错误的结果。如您所见,它现在已安装为 zfs 文件系统,并且数据集已使用了 1% 的可用空间。这并没有告诉我可用于创建新 ext4 卷的确切大小。(-V 选项是必需的 - 如果您不指定它,则 ext4.mkfs 将无法格式化它。)

当然,我可以随时进行尝试,例如:

# zfs create -V 1760G nat2012/backup
cannot create 'nat2012/backup': out of space
# zfs create -V 1755G nat2012/backup
cannot create 'nat2012/backup': out of space
# zfs create -V 1750G nat2012/backup
cannot create 'nat2012/backup': out of space
# zfs create -V 1740G nat2012/backup
# zfs destroy nat2012/backup
# zfs create -V 1745G nat2012/backup
cannot create 'nat2012/backup': out of space
# zfs create -V 1744G nat2012/backup
cannot create 'nat2012/backup': out of space
# zfs create -V 1743G nat2012/backup

此时,我可以确定最多还有 1G 空间未使用。这是非常笨拙。我可以忍受这种情况,但在未来的多次驾驶中我必须做同样的事情。

有没有更好的方法来“利用所有可用空间”来创建一个固定大小体积?

相关内容