ZFS/Zpool 的磁盘使用量有限吗?

ZFS/Zpool 的磁盘使用量有限吗?

我有一台服务器,其 JBOD 包含 36 x 14TB 磁盘,总使用容量为 12.7TB(磁盘为 WUH721414AL5201)

我创建了两个 zpool:

  • zpool1 包含 3 个 vdev(每个有 8 个磁盘并且是 raidz-1),并且池有 3 个热备用。

  pool: zpool1
 state: ONLINE
config:

        NAME                        STATE     READ WRITE CKSUM
        zpool1                      ONLINE       0     0     0
          raidz1-0                  ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
          raidz1-1                  ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
          raidz1-2                  ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
        spares
          scsi-35000                AVAIL
          scsi-35000                AVAIL
          scsi-35000                AVAIL

  • zpool2 包含 1 个 vdev(有 9 个磁盘并且是 raidz-2)

pool: zpool2
 state: ONLINE
config:

        NAME                        STATE     READ WRITE CKSUM
        zpool2                      ONLINE       0     0     0
          raidz2-0                  ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0
            scsi-35000              ONLINE       0     0     0


如您所见,根据 zfs,zpool1 的总可用大小约为 306 TB,zpool2 的总可用大小约为 115 TB,两个池都声称拥有多个 TB 的可用空间。


root:~# zpool list
NAME     SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
zpool1   306T   296T  9.55T        -         -    47%    96%  1.00x    ONLINE  -
zpool2   115T   110T  4.46T        -         -    26%    96%  1.00x    ONLINE  -

但是当我运行 df -hi 时得到以下信息:

root:~# df -h
Filesystem           Size  Used Avail Use% Mounted on
zpool1               250T  250T  5.5M 100% /zpool1
zpool2                85T   84T  684G 100% /zpool2

当我尝试向池中添加更多数据时,文件系统会抛出磁盘已满异常,从而引发此问题。

有人能确认我在 Linux 或 zfs 上是否遇到了一些限制吗?我最初的想法是存在 250TB 的限制,但是这并不能解释为什么当池中只有 85TB 的数据时 zpool2 的容量也是 100%。

如果我的计算正确,那么pool1 应该至少有 266.7TB 的可用空间,而pool2 应该有 88.9TB,这是基于以下计算的:

池1:3 x raidz-1 vdevs(8 个磁盘,7 个可用)= 7 * 3 = 21 个磁盘 * 每个 12.7TB = 266.7

池2:1 x raidz-2 vdev(9 个磁盘,7 个可用)= 7 * 每个 12.7TB = 88.9TB

附言:抱歉写了这么长的文章,我对存储还很陌生,所以我尝试尽可能多地解释(可能太多了!)

为 Zoredache 添加:

root:~# zfs list
NAME     USED  AVAIL     REFER  MOUNTPOINT
zpool1   249T  2.45M      249T   /zpool1
zpool2   83.9T   683G     83.9T  /zpool2

答案1

df 命令是一种古老的工具,它并不真正理解 ZFS,对于 ZFS 文件系统,df 的输出几乎毫无价值。ZFS 的分配比该df命令所能理解的要复杂得多。ZFS 具有快照、压缩、重复数据删除等功能,这些功能都会影响使用情况和可用容量,但不会改变“df”角度的明显使用情况。

你应该使用zfs listzpool list检查池和 zfs 文件系统。您的 zpool 输出清楚地显示您已接近最大容量。该zfs list命令将为您提供每个数据集的更多详细信息。

还请考虑数据集可以有配额。它们将为关键文件系统存储保留一定量的空间,以防止系统崩溃。

相关的是,您不应该让池达到像您那样满的程度。这会损害池的性能。

相关内容