映射设备的早期创建

有两种方法可以配置设备映射器设备作为系统的根设备。

第一种方法是构建一个初始 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>]