我有一台服务器,其 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 list
并zpool list
检查池和 zfs 文件系统。您的 zpool 输出清楚地显示您已接近最大容量。该zfs list
命令将为您提供每个数据集的更多详细信息。
还请考虑数据集可以有配额。它们将为关键文件系统存储保留一定量的空间,以防止系统崩溃。
相关的是,您不应该让池达到像您那样满的程度。这会损害池的性能。