映射设备的早期创建¶
有两种方法可以配置设备映射器设备作为系统的根设备。
第一种方法是构建一个初始 ramdisk,它引导到一个配置设备的最小用户空间,然后通过 pivot_root(8) 切换到该设备。
第二种方法是通过内核启动命令行参数,使用模块参数 “dm-mod.create=” 来创建一个或多个设备映射器。
格式被指定为由逗号分隔的数据字符串,并可选择使用分号分隔,其中
逗号用于分隔字段,例如 name、uuid、flags 和 table(指定一个设备)
分号用于分隔设备。
因此,格式将如下所示:
dm-mod.create=<name>,<uuid>,<minor>,<flags>,<table>[,<table>+][;<name>,<uuid>,<minor>,<flags>,<table>[,<table>+]+]
其中
<name> ::= The device name.
<uuid> ::= xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | ""
<minor> ::= The device minor number | ""
<flags> ::= "ro" | "rw"
<table> ::= <start_sector> <num_sectors> <target_type> <target_args>
<target_type> ::= "verity" | "linear" | ... (see list below)
dm 行应与 dmsetup 工具使用 --concise 参数时所用的行等效。
目标类型¶
并非所有目标类型都可用,因为在不先使用用户空间工具检查相关元数据有效性的情况下,允许激活某些 DM 目标存在严重风险。
缓存 |
受限,用户空间应验证缓存设备 |
加密 |
允许 |
延迟 |
允许 |
era |
受限,用户空间应验证元数据设备 |
不稳定 |
受限,仅用于测试 |
线性 |
允许 |
日志写入 |
受限,用户空间应验证元数据设备 |
镜像 |
受限,用户空间应验证主/镜像设备 |
RAID |
受限,用户空间应验证元数据设备 |
快照 |
受限,用户空间应验证源/目标设备 |
快照源 |
允许 |
快照合并 |
受限,用户空间应验证源/目标设备 |
条带化 |
允许 |
切换 |
受限,用户空间应验证设备路径 |
精简 |
受限,需要来自用户空间的 dm 目标消息 |
精简池 |
受限,需要来自用户空间的 dm 目标消息 |
verity |
允许 |
写入缓存 |
受限,用户空间应验证缓存设备 |
归零 |
受限,不适用于根文件系统 |
如果目标未在上述列表中,则默认受限(未测试)。
示例¶
引导到由用户模式 Linux 块设备组成的线性阵列的示例
dm-mod.create="lroot,,,rw, 0 4096 linear 98:16 0, 4096 4096 linear 98:32 0" root=/dev/dm-0
这将引导到一个 rw dm-linear 目标,该目标由 8192 个扇区组成,分布在两个由其主:次号码标识的块设备上。引导后,udev 会将此目标重命名为 /dev/mapper/lroot(取决于规则)。未分配 UUID。
多个设备映射器的示例,其中 dm-mod.create=”...” 的内容在此处为了可读性而拆分为多行显示
dm-linear,,1,rw,
0 32768 linear 8:1 0,
32768 1024000 linear 8:2 0;
dm-verity,,3,ro,
0 1638400 verity 1 /dev/sdc1 /dev/sdc2 4096 4096 204800 1 sha256
ac87db56303c9c1da433d7209b5a6ef3e4779df141200cbd7c157dcb8dd89c42
5ebfe87f7df3235b80a117ebc4078e44f55045487ad4a96581d1adb564615b51
其他示例(按目标)
“加密”
dm-crypt,,8,ro,
0 1048576 crypt aes-xts-plain64
babebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabe 0
/dev/sda 0 1 allow_discards
“延迟”
dm-delay,,4,ro,0 409600 delay /dev/sda1 0 500
“线性”
dm-linear,,,rw,
0 32768 linear /dev/sda1 0,
32768 1024000 linear /dev/sda2 0,
1056768 204800 linear /dev/sda3 0,
1261568 512000 linear /dev/sda4 0
“快照源”
dm-snap-orig,,4,ro,0 409600 snapshot-origin 8:2
“条带化”
dm-striped,,4,ro,0 1638400 striped 4 4096
/dev/sda1 0 /dev/sda2 0 /dev/sda3 0 /dev/sda4 0
“verity”
dm-verity,,4,ro,
0 1638400 verity 1 8:1 8:2 4096 4096 204800 1 sha256
fb1a5a0f00deb908d8b53cb270858975e76cf64105d412ce764225d53b8f3cfd
51934789604d1b92399c52e7cb149d1b3a1b74bbbcb103b2a0aaacbed5c08584
对于在异步探测的块设备(MMC、USB 等)之上使用 device-mapper 的设置,可能需要明确告诉 dm-init 等待它们可用后再设置 device-mapper 表。这可以通过 “dm-mod.waitfor=” 模块参数完成,该参数接受一个要等待的设备列表。
dm-mod.waitfor=<device1>[,..,<deviceN>]