【问题标题】:ZFS list vs ZFS PoolZFS 列表与 ZFS 池
【发布时间】:2020-05-31 00:23:54
【问题描述】:

我是一名软件工程师,最近我构建了我的 Linux 机器并想探索更多系统管理员类型的任务。我已经探索并阅读了很多关于 ZFS 的内容,但我越来越困惑,因为每篇文章对它的描述都不同。

一切正常,但我不知道 ZFS Engine 是如何计算空格的,类似的命令让我感到困惑。

$ 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 存储计算器的不同答案:

【问题讨论】:

    标签: zfs


    【解决方案1】:

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

    /usr/sbin/zfs list 只是在列出 mypool 时报告所有 zfs 的总和(例如,如果您有第二个 zfs,mypool/data2,并且恰好是 0.6TB USED,那么您的 mypool 行将显示 10TB USED,并且mypool/data 仍将是 9.4TB 使用);而且,您的 /usr/sbin/zpool list 不会受到影响,仍然显示 14.5T SIZE

    内层气泡不必总是与外层气泡大小相同; 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
    

    【讨论】:

      【解决方案2】:

      关于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 数量您会看到(与创建预订一样,与配额相反)。当您开始在系统上创建快照和克隆时,这也会变得更加棘手,因为多个文件系统/快照可以同时使用相同的数据。使用快照的使用数据的两个主要视图是“我的快照引用了哪些数据?”和“我的快照唯一引用了哪些数据?”我建议您阅读 zfsman 页面,以获取有关 ZFS 报告容量使用情况的多种方式的更多详细信息。

      最后,忽略df -h 输出——它只是向您显示 ZFS 可以向您报告的内容的重复,我不记得它是否告诉您有关逻辑层或物理层的存储使用情况。在您的示例中,它看起来像是告诉您逻辑总可用空间和逻辑引用数据,但就像我上面所说的,如果您开始使用更高级的功能,这些值会变得很棘手,所以最好将zfs list 用于几乎所有目的所以如何解释给定值会更清楚。

      【讨论】:

        猜你喜欢
        • 2018-09-30
        • 2022-12-04
        • 2017-05-29
        • 2023-01-04
        • 2014-05-10
        • 1970-01-01
        • 1970-01-01
        • 2011-10-02
        • 2018-10-07
        相关资源
        最近更新 更多