读的

 

 

 

 

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)到最后)。
     *
     **/
     ...
}
posted @ 2021-12-07 18:25  苏格拉底的落泪  阅读(211)  评论(0编辑  收藏  举报