int BlueStore::_minimal_open_bluefs(bool create)
{
bluefs = new BlueFS(cct);
/**
* 在这里,会创建三个块设备block.db、block、block.wal
*
* bluefs->add_block_device用于创建一个块设备,进行open初始化,添加此新建的块设备到bdev[id]=b,
* 创建IOcontext到ioc[id] = new IOContext(cct, NULL)。
*
* block.db: 通过调用add_block_device将block.db设备加入到bluefs的管理之中,block.db负责存储BlueStore内部产生的元数据。
* 会调用_check_or_set_bdev_label函数把一些label写入到block.db设备中,或从block.db设读取一些label。如果是创建osd,
* 则还需要调用add_block_extent将这个磁盘设备中的空间加入到bluefs的管理之中,其空间为SUPER_RESERVED(8192字节)后的空间,
* 前SUPER_RESERVED字节空间负责存放一些label信息和bluefs的super块信息。
*
* block: block设备与bluestore共享,在BlueStore::mkfs()的_open_bdev()中也创建了该设备。
* 调用bluefs->add_block_device将block设备加入到bluefs的管理之中,block设备主要用于存储对象数据。
* 并计算block设备中给bluefs使用的空间,还要将这些空间加入到bluefs_extents中,osd上电启动时,_open_fm函数会将
* bluefs_extents中的空间使用记录持久化到rocksdb中,同时bluestore的allocator会将这些空间从空闲块btree中删除,以免重复分配。
*
* block.wal: 调用bluefs->add_block_device将block.wal设备加入到bluefs的管理之中,调用_check_or_set_bdev_label函数把一些
* label写入到block.db设备中,或从block.db设备中读取一些label。同时调用add_block_extent来将这个磁盘设备中的空间加入到bluefs
* 的管理之中(默认从BDEV_LABEL_BLOCK_SIZE(4096)到最后)。
*
**/
...
}