Zoned Storage-Linux Kernel Support 之 设备映射器
设备映射器Device Mapper
首先需要明确的是设备映射器是工作在block级别而不是file级别的。
分区块设备支持已添加到内核版本 4.13 中的设备映射器子系统中。 两个现有的目标获得了支持:dm-linear 目标和 dm-flakey 目标。 ZBD 支持还添加了一个新的目标驱动程序,dm-zoned。
dm-linear
dm-linear 目标将设备映射器设备的线性范围的blocks映射到后端设备上的线性范围。 dm-linear 是 LVM 等逻辑卷管理器的基本构建块。
Zoned Block Device Restrictions 分区块设备限制
当与分区块设备一起使用时,创建的 dm-linear 设备也将是分区块设备,其区域大小与底层设备相同。 在创建 dm-linear 目标设备期间,设备映射器核心管理代码会强制执行几个条件。
- 用于映射目标设备不同范围的所有后端设备必须具有相同的区域模型。
- 如果后端设备是分区块设备,则所有设备必须具有相同的区域大小。
- 映射的范围必须是区域对齐的,也就是说,部分区域映射是不可能的。
示例:创建一个小型Host Managed Disk
此示例说明如何从大型高容量主机托管磁盘创建使用区域范围的小型Host Managed 磁盘。 使用的后端设备的区域信息如下所示:
# cat /sys/block/sdb/queue/zoned
host-managed
# cat /sys/block/sdb/queue/chunk_sectors
524288
# blkzone report /dev/sdb
start: 0x000000000, len 0x080000, wptr 0x000000 reset:0 non-seq:0, zcond: 0(nw) [type: 1(CONVENTIONAL)]
start: 0x000080000, len 0x080000, wptr 0x000000 reset:0 non-seq:0, zcond: 0(nw) [type: 1(CONVENTIONAL)]
start: 0x000100000, len 0x080000, wptr 0x000000 reset:0 non-seq:0, zcond: 0(nw) [type: 1(CONVENTIONAL)]
start: 0x000180000, len 0x080000, wptr 0x000000 reset:0 non-seq:0, zcond: 0(nw) [type: 1(CONVENTIONAL)]
...
start: 0x010580000, len 0x080000, wptr 0x000000 reset:0 non-seq:0, zcond: 0(nw) [type: 1(CONVENTIONAL)]
start: 0x010600000, len 0x080000, wptr 0x000000 reset:0 non-seq:0, zcond: 1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x010680000, len 0x080000, wptr 0x000000 reset:0 non-seq:0, zcond: 1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x010700000, len 0x080000, wptr 0x000000 reset:0 non-seq:0, zcond: 1(em) [type: 2(SEQ_WRITE_REQUIRED)]
...
start: 0x6d2300000, len 0x080000, wptr 0x000000 reset:0 non-seq:0, zcond: 1(em) [type: 2(SEQ_WRITE_REQUIRED)]
start: 0x6d2380000, len 0x080000, wptr 0x000000 reset:0 non-seq:0, zcond: 1(em) [type: 2(SEQ_WRITE_REQUIRED)]
接下来,要创建一个名为“small-sdb”的 dm-linear 设备,它将后端设备的前 5 个常规区域(5*524288=2621440)与前 10 个连续区域连接起来,请使用以下命令。
# echo "0 2621440 linear /dev/sdb 0
2621440 5242880 linear /dev/sdb 274726912" | dmsetup create small-sdb
生成的设备区域模型是主机管理的,有 15 个区域,如下所示。
# cat /sys/block/dm-0/queue/zoned
host-managed