为什么 ZVOL 的重新保留会减少父级的可用空间,即使它低于 ZVOL 已引用的空间?

为什么 ZVOL 的重新保留会减少父级的可用空间,即使它低于 ZVOL 已引用的空间?

我无法理解如何refreservation工作。从文档:

设置保证数据集(不包括后代,例如快照和克隆)的最小磁盘空间量。当使用的磁盘空间量低于此值时,数据集将被视为占用了 refreservation 指定的空间量。 [...]

据我了解,refreservation只有当高于数据集已经引用的空间时才应该有效,或者相反,当低于该空间时应该不执行任何操作。举个例子,如果我有一个 ZVOL,它已经指的是 60 GB,然后我在 ZVOL 中添加一个refreservationof 50 GB,这应该做什么?毕竟,通过添加refreservation,我保证这个 ZVOL 至少可以引用50 GB,但既然它已经引用了60 GB,那不应该改变任何东西,不是吗?

就我而言,该操作正在占用父数据集中的可用空间。请考虑以下命令列表及其输出(我删除了有关其他一些 ZVOL 和数据集的行,因为它们会分散注意力并且无助于理解行为):

root@cerberus:~/qemu-kvm# zfs list -o name,type,creation,volsize,available,used,referenced,reservation,refreservation,usedbydataset,usedbyrefreservation,usedbysnapshots,usedbychildren
NAME                    TYPE        CREATION               VOLSIZE  AVAIL   USED  REFER  RESERV  REFRESERV  USEDDS  USEDREFRESERV  USEDSNAP  USEDCHILD
rpool                   filesystem  Mon Jan 16  9:45 2017        -   672G  1.10T    96K    none       none     96K              0         0      1.10T
rpool/zvol-morn-system  volume      Tue Sep 15 20:43 2020      72G   722G   113G  63.0G    none        50G   63.0G          49.8G      238M          0
root@cerberus:~/qemu-kvm# zfs set refreservation=none rpool/zvol-morn-system
root@cerberus:~/qemu-kvm# zfs list -o name,type,creation,volsize,available,used,referenced,reservation,refreservation,usedbydataset,usedbyrefreservation,usedbysnapshots,usedbychildren
NAME                    TYPE        CREATION               VOLSIZE  AVAIL   USED  REFER  RESERV  REFRESERV  USEDDS  USEDREFRESERV  USEDSNAP  USEDCHILD
rpool                   filesystem  Mon Jan 16  9:45 2017        -   722G  1.05T    96K    none       none     96K              0         0      1.05T
rpool/zvol-morn-system  volume      Tue Sep 15 20:43 2020      72G   722G  63.2G  63.0G    none       none   63.0G              0      258M          0

在第一个输出中,rpool/zvol-morn-system引用63 GB并具有refreservationof 50 GB,给出了 的总体用法113 GB(这是我不明白的第一件事),并且父级中的可用空间rpool672 GB。在第二个输出中,我删除了,这refreservation增加了父级中的可用空间。我不明白为什么,因为该 ZVOL 的实际引用空间已经超过,所以 a不应该有任何效果。rpool50 GB50 GBrefreservation50 GB

有人可以解释一下我错在哪里吗?

我研究了 ZFS 的文档和手册页,并研究了 SO 和相关站点上的几个问题。我找到了很多关于ZFS空间核算的信息,但找不到这个具体理解问题的解释。

答案1

问题似乎是从快照和数据集本身引用的块(因此,如果删除文件,它们消耗的空间将显示在 USEDSNAP 下,但在此之前,它们会显示在 REFER 下)。

我想,尽管如此,它们仍然属于“快照和克隆消耗的磁盘空间”,因此不会减少您的 USEDREFRESERV。您可以zfs list -t snapshot在您所描述的情况下检查它们。

第一个问题的答案更简单:Refreservations 无论如何都属于“已使用”的定义,因此会增加 USED,就像所有其他 USED* 列一样。

相关内容