summaryrefslogtreecommitdiff
path: root/man/repart.d.xml
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2021-03-23 14:12:38 +0100
committerLennart Poettering <lennart@poettering.net>2021-04-19 23:16:02 +0200
commit5c08da586fc8fe7cda4010e0057cb79ba1d74335 (patch)
tree330292d8e48a510db4014b9617aeacc8155def3d /man/repart.d.xml
parente81acfd251eb9e6afc6cc7ee589f89e9553935f5 (diff)
downloadsystemd-5c08da586fc8fe7cda4010e0057cb79ba1d74335.tar.gz
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.xml25
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