diff options
author | Lennart Poettering <lennart@poettering.net> | 2021-03-23 14:12:38 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2021-04-19 23:16:02 +0200 |
commit | 5c08da586fc8fe7cda4010e0057cb79ba1d74335 (patch) | |
tree | 330292d8e48a510db4014b9617aeacc8155def3d /man/repart.d.xml | |
parent | gpt: add some simple helpers for categorizing GPT partition types (diff) | |
download | systemd-5c08da586fc8fe7cda4010e0057cb79ba1d74335.tar.xz systemd-5c08da586fc8fe7cda4010e0057cb79ba1d74335.zip |
repart: add CopyBlocks=auto support
When using systemd-repart as an installer that replicates the install
medium on another medium it is useful to reference the root
partition/usr partition or verity data that is currently booted, in
particular in A/B scenarios where we have two copies and want to
reference the one we currently use. Let's add a CopyBlocks=auto for this
case: for a partition that uses that we'll copy a suitable partition
from the host.
CopyBlocks=auto finds the partition to copy like this: based on the
configured partition type uuid we determine the usual mount point (i.e.
for the /usr partition type we determine /usr/, and so on). We then
figure out the block device behind that path, through dm-verity and
dm-crypt if necessary. Finally, we compare the partition type uuid of
the partition found that way with the one we are supposed to fill and
only use it if it matches (the latter is primarily important on
dm-verity setups where a volume is likely backed by two partitions and
we need to find the right one).
This is particularly fun to use in conjunction with --image= (where
we'll restrict the device search onto the specify device, for security
reasons), as this allows "duplicating" an image like this:
# systemd-repart --image=source.raw --empty=create --size=auto target.raw
If the right repart data is embedded into "source.raw" this will be able
to create and initialize a partition table on target.raw that carrries
all needed partitions, and will stream the source's file systems onto it
as configured.
Diffstat (limited to 'man/repart.d.xml')
-rw-r--r-- | man/repart.d.xml | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/man/repart.d.xml b/man/repart.d.xml index 43540234a7..d404645588 100644 --- a/man/repart.d.xml +++ b/man/repart.d.xml @@ -422,12 +422,25 @@ <varlistentry> <term><varname>CopyBlocks=</varname></term> - <listitem><para>Takes a path to a regular file, block device node or directory. If specified and the - partition is newly created the data from the specified path is written to the newly created - partition, on the block level. If a directory is specified the backing block device of the file - system the directory is on is determined and the data read directly from that. This option is useful - to efficiently replicate existing file systems on the block level on a new partition, for example to - build a simple OS installer or OS image builder.</para> + <listitem><para>Takes a path to a regular file, block device node or directory, or the special value + <literal>auto</literal>. If specified and the partition is newly created, the data from the specified + path is written to the newly created partition, on the block level. If a directory is specified, the + backing block device of the file system the directory is on is determined, and the data read directly + from that. This option is useful to efficiently replicate existing file systems onto new partitions + on the block level — for example to build a simple OS installer or an OS image builder.</para> + + <para>If the special value <literal>auto</literal> is specified, the source to copy from is + automatically picked up from the running system (or the image specified with + <option>--image=</option> — if used). A partition that matches both the configured partition type (as + declared with <varname>Type=</varname> above), and the currently mounted directory appropriate for + that partition type is determined. For example, if the partition type is set to + <literal>root</literal> the partition backing the root directory (<filename>/</filename>) is used as + source to copy from — if its partition type is set to <literal>root</literal> as well. If the + declared type is <literal>usr</literal> the partition backing <filename>/usr/</filename> is used as + source to copy blocks from — if its partition type is set to <literal>usr</literal> too. The logic is + capable of automatically tracking down the the backing partitions for encrypted and Verity-enabled + volumes. <literal>CopyBlocks=auto</literal> is useful for implementing "self-replicating" systems, + i.e. systems that are their own installer.</para> <para>The file specified here must have a size that is a multiple of the basic block size 512 and not be empty. If this option is used, the size allocation algorithm is slightly altered: the partition is |