16cf2a73cSMauro Carvalho Chehab================================
26cf2a73cSMauro Carvalho ChehabEarly creation of mapped devices
36cf2a73cSMauro Carvalho Chehab================================
46cf2a73cSMauro Carvalho Chehab
56cf2a73cSMauro Carvalho ChehabIt is possible to configure a device-mapper device to act as the root device for
66cf2a73cSMauro Carvalho Chehabyour system in two ways.
76cf2a73cSMauro Carvalho Chehab
86cf2a73cSMauro Carvalho ChehabThe first is to build an initial ramdisk which boots to a minimal userspace
96cf2a73cSMauro Carvalho Chehabwhich configures the device, then pivot_root(8) in to it.
106cf2a73cSMauro Carvalho Chehab
116cf2a73cSMauro Carvalho ChehabThe second is to create one or more device-mappers using the module parameter
126cf2a73cSMauro Carvalho Chehab"dm-mod.create=" through the kernel boot command line argument.
136cf2a73cSMauro Carvalho Chehab
146cf2a73cSMauro Carvalho ChehabThe format is specified as a string of data separated by commas and optionally
156cf2a73cSMauro Carvalho Chehabsemi-colons, where:
166cf2a73cSMauro Carvalho Chehab
176cf2a73cSMauro Carvalho Chehab - a comma is used to separate fields like name, uuid, flags and table
186cf2a73cSMauro Carvalho Chehab   (specifies one device)
196cf2a73cSMauro Carvalho Chehab - a semi-colon is used to separate devices.
206cf2a73cSMauro Carvalho Chehab
216cf2a73cSMauro Carvalho ChehabSo the format will look like this::
226cf2a73cSMauro Carvalho Chehab
236cf2a73cSMauro Carvalho Chehab dm-mod.create=<name>,<uuid>,<minor>,<flags>,<table>[,<table>+][;<name>,<uuid>,<minor>,<flags>,<table>[,<table>+]+]
246cf2a73cSMauro Carvalho Chehab
256cf2a73cSMauro Carvalho ChehabWhere::
266cf2a73cSMauro Carvalho Chehab
276cf2a73cSMauro Carvalho Chehab	<name>		::= The device name.
286cf2a73cSMauro Carvalho Chehab	<uuid>		::= xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | ""
296cf2a73cSMauro Carvalho Chehab	<minor>		::= The device minor number | ""
306cf2a73cSMauro Carvalho Chehab	<flags>		::= "ro" | "rw"
316cf2a73cSMauro Carvalho Chehab	<table>		::= <start_sector> <num_sectors> <target_type> <target_args>
326cf2a73cSMauro Carvalho Chehab	<target_type>	::= "verity" | "linear" | ... (see list below)
336cf2a73cSMauro Carvalho Chehab
346cf2a73cSMauro Carvalho ChehabThe dm line should be equivalent to the one used by the dmsetup tool with the
356cf2a73cSMauro Carvalho Chehab`--concise` argument.
366cf2a73cSMauro Carvalho Chehab
376cf2a73cSMauro Carvalho ChehabTarget types
386cf2a73cSMauro Carvalho Chehab============
396cf2a73cSMauro Carvalho Chehab
406cf2a73cSMauro Carvalho ChehabNot all target types are available as there are serious risks in allowing
416cf2a73cSMauro Carvalho Chehabactivation of certain DM targets without first using userspace tools to check
426cf2a73cSMauro Carvalho Chehabthe validity of associated metadata.
436cf2a73cSMauro Carvalho Chehab
446cf2a73cSMauro Carvalho Chehab======================= =======================================================
456cf2a73cSMauro Carvalho Chehab`cache`			constrained, userspace should verify cache device
466cf2a73cSMauro Carvalho Chehab`crypt`			allowed
476cf2a73cSMauro Carvalho Chehab`delay`			allowed
486cf2a73cSMauro Carvalho Chehab`era`			constrained, userspace should verify metadata device
496cf2a73cSMauro Carvalho Chehab`flakey`		constrained, meant for test
506cf2a73cSMauro Carvalho Chehab`linear`		allowed
516cf2a73cSMauro Carvalho Chehab`log-writes`		constrained, userspace should verify metadata device
526cf2a73cSMauro Carvalho Chehab`mirror`		constrained, userspace should verify main/mirror device
536cf2a73cSMauro Carvalho Chehab`raid`			constrained, userspace should verify metadata device
546cf2a73cSMauro Carvalho Chehab`snapshot`		constrained, userspace should verify src/dst device
556cf2a73cSMauro Carvalho Chehab`snapshot-origin`	allowed
566cf2a73cSMauro Carvalho Chehab`snapshot-merge`	constrained, userspace should verify src/dst device
576cf2a73cSMauro Carvalho Chehab`striped`		allowed
586cf2a73cSMauro Carvalho Chehab`switch`		constrained, userspace should verify dev path
596cf2a73cSMauro Carvalho Chehab`thin`			constrained, requires dm target message from userspace
606cf2a73cSMauro Carvalho Chehab`thin-pool`		constrained, requires dm target message from userspace
616cf2a73cSMauro Carvalho Chehab`verity`		allowed
626cf2a73cSMauro Carvalho Chehab`writecache`		constrained, userspace should verify cache device
636cf2a73cSMauro Carvalho Chehab`zero`			constrained, not meant for rootfs
646cf2a73cSMauro Carvalho Chehab======================= =======================================================
656cf2a73cSMauro Carvalho Chehab
666cf2a73cSMauro Carvalho ChehabIf the target is not listed above, it is constrained by default (not tested).
676cf2a73cSMauro Carvalho Chehab
686cf2a73cSMauro Carvalho ChehabExamples
696cf2a73cSMauro Carvalho Chehab========
706cf2a73cSMauro Carvalho ChehabAn example of booting to a linear array made up of user-mode linux block
716cf2a73cSMauro Carvalho Chehabdevices::
726cf2a73cSMauro Carvalho Chehab
736cf2a73cSMauro Carvalho Chehab  dm-mod.create="lroot,,,rw, 0 4096 linear 98:16 0, 4096 4096 linear 98:32 0" root=/dev/dm-0
746cf2a73cSMauro Carvalho Chehab
756cf2a73cSMauro Carvalho ChehabThis will boot to a rw dm-linear target of 8192 sectors split across two block
766cf2a73cSMauro Carvalho Chehabdevices identified by their major:minor numbers.  After boot, udev will rename
776cf2a73cSMauro Carvalho Chehabthis target to /dev/mapper/lroot (depending on the rules). No uuid was assigned.
786cf2a73cSMauro Carvalho Chehab
796cf2a73cSMauro Carvalho ChehabAn example of multiple device-mappers, with the dm-mod.create="..." contents
806cf2a73cSMauro Carvalho Chehabis shown here split on multiple lines for readability::
816cf2a73cSMauro Carvalho Chehab
826cf2a73cSMauro Carvalho Chehab  dm-linear,,1,rw,
836cf2a73cSMauro Carvalho Chehab    0 32768 linear 8:1 0,
846cf2a73cSMauro Carvalho Chehab    32768 1024000 linear 8:2 0;
856cf2a73cSMauro Carvalho Chehab  dm-verity,,3,ro,
866cf2a73cSMauro Carvalho Chehab    0 1638400 verity 1 /dev/sdc1 /dev/sdc2 4096 4096 204800 1 sha256
876cf2a73cSMauro Carvalho Chehab    ac87db56303c9c1da433d7209b5a6ef3e4779df141200cbd7c157dcb8dd89c42
886cf2a73cSMauro Carvalho Chehab    5ebfe87f7df3235b80a117ebc4078e44f55045487ad4a96581d1adb564615b51
896cf2a73cSMauro Carvalho Chehab
906cf2a73cSMauro Carvalho ChehabOther examples (per target):
916cf2a73cSMauro Carvalho Chehab
926cf2a73cSMauro Carvalho Chehab"crypt"::
936cf2a73cSMauro Carvalho Chehab
946cf2a73cSMauro Carvalho Chehab  dm-crypt,,8,ro,
956cf2a73cSMauro Carvalho Chehab    0 1048576 crypt aes-xts-plain64
966cf2a73cSMauro Carvalho Chehab    babebabebabebabebabebabebabebabebabebabebabebabebabebabebabebabe 0
976cf2a73cSMauro Carvalho Chehab    /dev/sda 0 1 allow_discards
986cf2a73cSMauro Carvalho Chehab
996cf2a73cSMauro Carvalho Chehab"delay"::
1006cf2a73cSMauro Carvalho Chehab
1016cf2a73cSMauro Carvalho Chehab  dm-delay,,4,ro,0 409600 delay /dev/sda1 0 500
1026cf2a73cSMauro Carvalho Chehab
1036cf2a73cSMauro Carvalho Chehab"linear"::
1046cf2a73cSMauro Carvalho Chehab
1056cf2a73cSMauro Carvalho Chehab  dm-linear,,,rw,
1066cf2a73cSMauro Carvalho Chehab    0 32768 linear /dev/sda1 0,
1076cf2a73cSMauro Carvalho Chehab    32768 1024000 linear /dev/sda2 0,
1086cf2a73cSMauro Carvalho Chehab    1056768 204800 linear /dev/sda3 0,
1096cf2a73cSMauro Carvalho Chehab    1261568 512000 linear /dev/sda4 0
1106cf2a73cSMauro Carvalho Chehab
1116cf2a73cSMauro Carvalho Chehab"snapshot-origin"::
1126cf2a73cSMauro Carvalho Chehab
1136cf2a73cSMauro Carvalho Chehab  dm-snap-orig,,4,ro,0 409600 snapshot-origin 8:2
1146cf2a73cSMauro Carvalho Chehab
1156cf2a73cSMauro Carvalho Chehab"striped"::
1166cf2a73cSMauro Carvalho Chehab
1176cf2a73cSMauro Carvalho Chehab  dm-striped,,4,ro,0 1638400 striped 4 4096
1186cf2a73cSMauro Carvalho Chehab  /dev/sda1 0 /dev/sda2 0 /dev/sda3 0 /dev/sda4 0
1196cf2a73cSMauro Carvalho Chehab
1206cf2a73cSMauro Carvalho Chehab"verity"::
1216cf2a73cSMauro Carvalho Chehab
1226cf2a73cSMauro Carvalho Chehab  dm-verity,,4,ro,
1236cf2a73cSMauro Carvalho Chehab    0 1638400 verity 1 8:1 8:2 4096 4096 204800 1 sha256
1246cf2a73cSMauro Carvalho Chehab    fb1a5a0f00deb908d8b53cb270858975e76cf64105d412ce764225d53b8f3cfd
1256cf2a73cSMauro Carvalho Chehab    51934789604d1b92399c52e7cb149d1b3a1b74bbbcb103b2a0aaacbed5c08584
126*035641b0SPeter Korsgaard
127*035641b0SPeter KorsgaardFor setups using device-mapper on top of asynchronously probed block
128*035641b0SPeter Korsgaarddevices (MMC, USB, ..), it may be necessary to tell dm-init to
129*035641b0SPeter Korsgaardexplicitly wait for them to become available before setting up the
130*035641b0SPeter Korsgaarddevice-mapper tables. This can be done with the "dm-mod.waitfor="
131*035641b0SPeter Korsgaardmodule parameter, which takes a list of devices to wait for::
132*035641b0SPeter Korsgaard
133*035641b0SPeter Korsgaard  dm-mod.waitfor=<device1>[,..,<deviceN>]
134