我无法理解 ceph 原始空间的使用情况。
我在 7 台服务器上有 14 个 HDD(14 个 OSD),每个 HDD 3TB,总共 42 TB 原始空间。
ceph -s
osdmap e4055: 14 osds: 14 up, 14 in
pgmap v8073416: 1920 pgs, 6 pools, 16777 GB data, 4196 kobjects
33702 GB used, 5371 GB / 39074 GB avail
我创建了 4 个块设备,每个 5 TB:
df -h
/dev/rbd1 5.0T 2.7T 2.4T 54% /mnt/part1
/dev/rbd2 5.0T 2.7T 2.4T 53% /mnt/part2
/dev/rbd3 5.0T 2.6T 2.5T 52% /mnt/part3
/dev/rbd4 5.0T 2.9T 2.2T 57% /mnt/part4
df 显示总共使用了 10.9 TB,ceph 显示使用了 33702 GB。如果我有 2 个副本,那应该是 ~ 22 TB,但现在我已经使用了 33.7 TB - 少了 11 TB。
ceph osd pool get archyvas size
size: 2
ceph df
GLOBAL:
SIZE AVAIL RAW USED %RAW USED
39074G 5326G 33747G 86.37
POOLS:
NAME ID USED %USED MAX AVAIL OBJECTS
data 0 0 0 1840G 0
metadata 1 0 0 1840G 0
archyvas 3 4158G 10.64 1840G 1065104
archyvas2 4 4205G 10.76 1840G 1077119
archyvas3 5 3931G 10.06 1840G 1006920
archyvas4 6 4483G 11.47 1840G 1148291
块设备和 OSD FS - XFS
答案1
一个可能造成混淆的因素是 GB 与 GiB/TB 与 TiB(以 10 为基数/以 2 为基数),但这并不能解释这里的所有差异。
Ceph/RBD 将尝试“懒惰地”为您的卷分配空间。这就是为什么尽管您创建了四个 5TB 卷,但它报告使用了 16TB,而不是 20TB。但 16TB 大于 RBD 支持的文件系统的“活动”内容的总和,正如您所说,只有大约 11TB。需要注意以下几点:
当您删除 RBD 支持的文件系统中的文件时,文件系统会在内部将块标记为空闲,但通常不会尝试将它们“返回”到底层块设备 (RBD)。如果您的内核 RBD 版本足够新(3.18 或更新),您应该能够使用将fstrim
释放的块返回到 RBD。我怀疑您在这些文件系统上创建并删除了其他文件,对吗?
除了 所示的净数据使用量之外,还有一些文件系统开销df
。除了“超级块”和其他文件系统内部数据结构之外,RBD 分配数据的粒度也会产生一些开销。我认为 RBD 总是会分配 4MB 的块,即使只使用了其中的一部分。
答案2
我不是 ceph 专家,但让我猜一下。
如果没有选项,则无法挂载块设备discard
。因此,您写入和删除的任何数据都不会显示在文件系统上 ( /mnt/part1
),但由于它曾经被写入且未被修剪,因此它会保留在底层文件系统上。
如果您查看USED
池并将其相加,您会得到 16777GB,这与ceph -s
显示的值相等。如果将其乘以二(两个副本),您会得到 33554GB,这几乎就是已使用的空间。