Ceph配置bluestore_min_alloc_size为4096后OSD未生效 仍使用64k块大小
问题根因
bluestore_min_alloc_size、bluestore_min_alloc_size_hdd、bluestore_min_alloc_size_ssd属于OSD初始化阶段的固化参数,只会在OSD首次创建、初始化磁盘的时候读取配置写入OSD本地元数据。运行阶段修改集群配置、重启OSD都不会更新OSD本地已经固化的参数值,你通过ceph config get查询到的是mon节点存储的全局/实例配置,不是OSD实际运行加载的生效值。
验证方式
执行以下命令查看指定OSD实际运行时加载的参数值,确认实际生效的分配大小:
ceph daemon osd.0 config show | grep bluestore_min_alloc_size
生效配置操作步骤
如果需要让4K最小分配配置生效,需要重新初始化所有OSD,操作如下:
- 先设置集群禁止OSD下线自动迁移数据,避免操作过程中不必要的资源消耗:
ceph osd set noout ceph osd set norebalance
- 逐个下线OSD,清理OSD对应磁盘的所有分区与残留数据,再重新初始化部署OSD,新部署的OSD会读取当前配置的4K参数完成初始化
- 所有OSD重建完成后,取消集群保护状态:
ceph osd unset noout ceph osd unset norebalance
注意事项
- 配置生效后,仅对新写入集群的对象生效,配置生效前已经写入的旧对象仍然按照之前64K的最小分配大小占用空间,若要让旧对象也按4K分配存储,需要将旧数据重新写入集群。
- 若你使用Rook部署Ceph,重建OSD需要通过Rook的CR规则执行,禁止直接在节点上手动删除OSD进程或数据。
内容的提问来源于stack exchange,提问作者Hackaholic
相关产品推荐
相关产品推荐

