尽管还有足够的空间,但由于“空间不足”而无法创建 zvol

尽管还有足够的空间,但由于“空间不足”而无法创建 zvol

在我的一台服务器上,我运行 ZFS - 两年内没有出现任何问题。然而,今天我想创建一个额外的 zvol,这只会导致一条错误消息,指出我们“空间不足”。奇怪的是,肯定有足够的空间:

root@cerberus:/vm-images# zfs list -r -t all
NAME            USED  AVAIL  REFER  MOUNTPOINT
rpool           956G   842G    96K  none
rpool/stretch   926G   842G   926G  /
rpool/swap     29.8G   869G  2.82G  -

root@cerberus:/vm-images# zfs create -b 512 -o checksum=on -o compression=off -o primarycache=none -o redundant_metadata=all -o secondarycache=none -o logbias=latency -o snapdev=hidden -o sync=standard -V 600G rpool/vm-garak
cannot create 'rpool/vm-garak': out of space

因此我们有 842 GB 的可用空间,但它拒绝创建大小为 600 GB 的 zvol。

知道我做错了什么吗?

编辑1(根据@Jim L.的要求):

没有使用预订:

root@cerberus:/vm-images# zfs list -o name,reservation -r
NAME           RESERV
rpool            none
rpool/stretch    none
rpool/swap       none

答案1

使用该-b选项似乎会增加 ZVOL 消耗的空间,与指定的块大小成反比。我-b 512看到尺寸膨胀了大约 50%,因此您的 600G ZVOL 需要大约。 900G可用空间。

我将在我的笔记本电脑上使用一个较小的示例,该示例的可用空间要少得多,但比率相似-b 512

# zfs list
NAME   USED  AVAIL  REFER  MOUNTPOINT
tank   191G  38.0G    88K  none
(...snip...)
# zfs create -b 512 -V 30g tank/zvol
cannot create 'tank/zvol': out of space
# zfs create -b 512 -V 24g tank/zvol
# zfs list tank/zvol
NAME        USED  AVAIL  REFER  MOUNTPOINT
tank/zvol  36.0G  38.0G    56K  -

ZVOL-b 512占用的空间比其提供的存储空间多 50%。但-b 128k例如,开销要低得多:

# zfs destroy tank/zvol
# zfs create -b 128k -V 36g tank/zvol
# zfs list tank/zvol
NAME        USED  AVAIL  REFER  MOUNTPOINT
tank/zvol  36.1G  38.0G    56K  -

答案2

https://github.com/openzfs/zfs/issues/548讨论 volblocksize (-b) 和 ashift 之间的相互作用。

这是zfsonlinux还是solaris(solaris 11不支持设置ashift - 它就是这样)?

zpool status 说什么?

是池raidz吗?

相关内容