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.
Loading
Please register or sign in to comment