我正在使用 LVM Thinpool 进行 docker 存储(dm.thinpooldev),到目前为止,元数据池的空间已经用完几次。这很容易对抗,因为我可以使用大量元数据重新创建瘦池,但我只是在猜测(并且可能过度猜测)它有多大。
有人对 Docker 元数据的相对大小有什么建议吗?看起来 lvcreate 中的默认值还不够:
--poolmetadatasize MetadataVolumeSize[bBsSkKmMgG] 设置池的元数据逻辑卷的大小。精简池支持的值介于 2MiB 和 16GiB 之间,缓存池支持的值最高为 16GiB。最小值是根据池的数据大小计算得出的。精简池的默认值为 (Pool_LV_size / Pool_LV_chunk_size * 64b)。默认单位是兆字节。
我使用的基本命令是:
DISK=/dev/xvdf
VG=docker_vg
LV=docker_pool
pvcreate $DISK
vgcreate $VG $DISK
lvcreate -l 100%FREE --thinpool $LV $VG
或替换任意元数据大小
lvcreate -l 100%FREE --poolmetadatasize 200M --thinpool $LV $VG
[编辑] 好吧,没有回应,所以我现在只选择 1%。到目前为止,这对我们有用,尽管可能仍然过度配置。
DISK=/dev/xvdf
VG=docker_vg
LV=docker_pool
DOCKER_POOL_METADATA_PERCENTAGE=1
DISK_SIZE=$(blockdev --getsize64 ${DISK})
META_DATA_SIZE=$(echo "scale=0;${DISK_SIZE}*${DOCKER_POOL_METADATA_PERCENTAGE}/100" | bc)
pvcreate ${DISK}
vgcreate ${DOCKER_VG} ${DISK}
# This metadata sizing is in k because bytes doesn't seem to translate properly
lvcreate -l 100%FREE --poolmetadatasize $((${META_DATA_SIZE}/1024))k --thinpool ${DOCKER_POOL} ${DOCKER_VG}