提前创建映射设备

可以通过两种方式配置设备映射器设备以充当系统的根设备。

第一种是构建一个初始 ramdisk,该磁盘引导到一个最小的用户空间,该用户空间配置设备,然后 pivot_root(8) 到其中。

第二种是使用模块参数“dm-mod.create=”通过内核引导命令行参数创建一个或多个设备映射器。

格式指定为以逗号和可选的分号分隔的数据字符串,其中

  • 逗号用于分隔字段,如名称、uuid、标志和表(指定一个设备)

  • 分号用于分隔设备。

因此,格式如下所示

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 行应等效于带有 --concise 参数的 dmsetup 工具使用的行。

目标类型

并非所有目标类型都可用,因为在没有先使用用户空间工具检查关联元数据的有效性的情况下允许激活某些 DM 目标存在严重风险。

cache

受约束,用户空间应验证缓存设备

crypt

允许

delay

允许

era

受约束,用户空间应验证元数据设备

flakey

受约束,用于测试

linear

允许

log-writes

受约束,用户空间应验证元数据设备

mirror

受约束,用户空间应验证主/镜像设备

raid

受约束,用户空间应验证元数据设备

snapshot

受约束,用户空间应验证 src/dst 设备

snapshot-origin

允许

snapshot-merge

受约束,用户空间应验证 src/dst 设备

striped

允许

switch

受约束,用户空间应验证 dev 路径

thin

受约束,需要来自用户空间的 dm 目标消息

thin-pool

受约束,需要来自用户空间的 dm 目标消息

verity

允许

writecache

受约束,用户空间应验证缓存设备

zero

受约束,不适用于 rootfs

如果目标未在上面列出,则默认情况下会受到约束(未测试)。

示例

一个引导到由用户模式 Linux 块设备组成的线性阵列的示例

dm-mod.create="lroot,,,rw, 0 4096 linear 98:16 0, 4096 4096 linear 98:32 0" root=/dev/dm-0

这将引导到由其主次编号标识的两个块设备拆分的 8192 个扇区的 rw dm-linear 目标。引导后,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

其他示例(按目标)

“crypt”

dm-crypt,,8,ro,
  0 1048576 crypt aes-xts-plain64
  babebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabe 0
  /dev/sda 0 1 allow_discards

“delay”

dm-delay,,4,ro,0 409600 delay /dev/sda1 0 500

“linear”

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

“snapshot-origin”

dm-snap-orig,,4,ro,0 409600 snapshot-origin 8:2

“striped”

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、..)之上使用设备映射器的设置,可能需要告诉 dm-init 显式等待它们变为可用,然后再设置设备映射器表。这可以使用“dm-mod.waitfor=”模块参数完成,该参数采用要等待的设备列表

dm-mod.waitfor=<device1>[,..,<deviceN>]