ZFS列表 vs ZFS池

4
我是一名软件工程师,最近我构建了我的Linux操作系统,并想要探索更多系统管理员类型的任务。我已经探索并阅读了很多关于ZFS的内容,但每篇文章都以不同方式描述它,让我感到越来越困惑。

一切都工作得很好,但我不知道ZFS引擎如何计算空间,类似的命令让我感到困惑。

$ df -h

Filesystem                                      Size  Used Avail Use% Mounted on
devtmpfs                                         16G     0   16G   0% /dev
tmpfs                                            16G  8.0K   16G   1% /dev/shm
tmpfs                                            16G  122M   16G   1% /run
tmpfs                                            16G     0   16G   0% /sys/fs/cgroup
/dev/mapper/centos_b4--2e--99--49--d4--6d-root   50G  7.8G   43G  16% /
/dev/nvme0n1p2                                 1014M  189M  826M  19% /boot
/dev/nvme0n1p1                                  200M   12M  189M   6% /boot/efi
/dev/mapper/centos_b4--2e--99--49--d4--6d-home  399G  122M  399G   1% /home
mypool                                          9.5T  256K  9.5T   1% /mypool
mypool/data                                     11T   833G  9.5T   8% /mypool/data
tmpfs                                           3.2G     0  3.2G   0% /run/user/1000


$ zpool list

NAME                SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
mypool              14.5T 1.12T  13.4T        -         -     0%     7%  1.00x    ONLINE  -

$ zfs list

NAME                     USED  AVAIL     REFER  MOUNTPOINT
mypool        834G  9.42T      145K  /mypool
mypool/data   834G  9.42T      834G  /mypool/data

$ zpool status mypool

 pool: mypool
 state: ONLINE
  scan: none requested
config:

        NAME               STATE     READ WRITE CKSUM
        mypool  ONLINE       0     0     0
          raidz1-0         ONLINE       0     0     0
            sda            ONLINE       0     0     0
            sdb            ONLINE       0     0     0
            sdc            ONLINE       0     0     0
            sdd            ONLINE       0     0     0

不同的ZFS存储计算器给出的答案不同,这让情况更加混乱:

enter image description here
enter image description here
2个回答

2

ZPOOL是大气泡,然后ZFS可以是多个内部气泡,或者在您的情况下,可以只是一个气泡。

/usr/sbin/zfs list仅在列出mypool时报告所有zfs的总和(例如,如果您有第二个zfs,mypool/data2,并且它恰好使用了0.6TB,则mypool行将显示10TB已用,而mypool/data仍将使用9.4TB);而/usr/sbin/zpool list则不受影响,仍将显示14.5T大小。

内部气泡的大小不必始终与外部气泡相同;除非您打开配额,否则zfs将按其能力增长;即能够限制这些内部气泡的能力;请注意,您还可以移动或删除该限制。

/usr/sbin/zfs get quota,logicalused mypool/data
sudo zfs set quota=10T mypool/data
sudo zfs set quota=12T mypool/data
sudo zfs set quota=10T mypool/data
/usr/sbin/zfs get quota,logicalused mypool/data
sudo zfs set quota=none mypool/data
/usr/sbin/zfs get quota,logicalused mypool/data

0

关于zpool listzfs list之间的区别,请参见this answer。现在,让我们来看看您特定的存储池和容量数字。

首先,逻辑视图和物理视图的空间使用有什么区别?物理视图(zpool list)是最简单的——它告诉您当前在磁盘上存储了多少字节。然而,这通常不是您实际想要的数字,因为它没有考虑到开销,并且没有告诉您数据使用情况来自哪里,而逻辑视图(zfs list)则知道。让我们一次解释:

开销:当您创建RAIDZ1池时,大致意味着池中的4个磁盘之一将保留用于存储奇偶校验数据,因此,如果磁盘损坏,则仍然可以使用池/交换新磁盘并修复池。这就是为什么计算器告诉您在池中将有12TiB可用(实际上只有4个磁盘中的3个可以实际存储数据;3 * 4TiB = 12TiB)。这也是为什么由zpool list报告的总容量使用/可用情况比zfs list报告的要大约多出4/3。还有其他一些开销,例如ZFS存储文件系统元数据、分片使RAID条带的小片段无法分配等,zfs list知道这些开销,并从“可用”数字中减去它们。
使用情况来源:在您的情况下,这仍然相对容易:所有mypool/data的存储使用情况都计入其父级mypool的使用情况。如果您想限制在父级下的所有文件系统使用的存储空间,这是非常有用的,因为您可以在该父级文件系统上设置配额,而所有子文件系统的总和必须保持较低,尽管值得注意的是,这也会减少您看到的AVAIL数字(与创建预留相反)。当您开始在系统上创建快照和克隆时,情况也可能变得更加复杂,因为多个文件系统/快照可以同时使用相同的数据。关于使用情况的两个主要视图与快照是“我的快照引用哪些数据?”和“我的快照唯一引用哪些数据?”我鼓励您阅读zfs手册页面,以获取有关ZFS可以报告容量使用情况的许多方式的更多详细信息。
最后,忽略 df -h 的输出——它只是向您显示 ZFS 可以向您报告的重复内容,而我永远不记得它是在告诉您逻辑层还是物理层的存储使用情况。在您的示例中,它似乎告诉您逻辑总可用空间和逻辑引用数据,但正如我上面所说,如果您开始使用更高级的功能,这些值会变得棘手,因此最好几乎所有目的都使用 zfs list,这样就更清楚如何解释给定的值了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接