repart: Clarify and test that --copy-from= argument respects grain size

The --copy-from= argument currently is documented as "copied partitions will have
the same size". This doesn't hold true in the case where a different grain-size is
passed to repart. Because `partition_min/max_size()` currently do rounding, the
size is implicitly rounded to grain size, and therefore partitions are enlarged
to align to grain size whenever possible.

Clarify this behavior and change the manpage, and also add a test for it.
This commit is contained in:
Jonas Dreßler
2026-07-13 12:09:43 +02:00
parent 2b1be5d909
commit 0df5ebc079
2 changed files with 40 additions and 5 deletions
+34
View File
@@ -493,6 +493,40 @@ EOF
assert_in "$imgs/copy_to2 : start= 51200, size= 10240, type=${xbootldr_guid}," "$output"
}
testcase_copy_from_respects_new_grain() {
local defs imgs output
defs="$(mktemp --directory "/tmp/test-repart.defs.XXXXXXXXXX")"
imgs="$(mktemp --directory "/var/tmp/test-repart.imgs.XXXXXXXXXX")"
# shellcheck disable=SC2064
trap "rm -rf '$defs' '$imgs'" RETURN
chmod 0755 "$defs"
truncate -s 80MiB "$imgs/copy_from"
sfdisk "$imgs/copy_from" <<EOF
label: gpt
size=20480, type=${root_guid}, uuid=837c3d67-21b3-478e-be82-7e7f83bf96d3
size=10240, type=${xbootldr_guid}, uuid=4985c03e-eecb-4fe0-9f65-3f6345782214
EOF
truncate -s 100MiB "$imgs/copy_to"
output=$(systemd-repart --offline="$OFFLINE" \
--empty=allow \
--definitions="$defs" \
--seed="$seed" \
--dry-run=no \
--json=pretty \
--copy-from="$imgs/copy_from" \
--grain-size=4194304 \
"$imgs/copy_to")
output=$(sfdisk --dump "$imgs/copy_to")
assert_in "$imgs/copy_to1 : start= 8192, size= 24576, type=${root_guid}," "$output"
assert_in "$imgs/copy_to2 : start= 32768, size= 16384, type=${xbootldr_guid}," "$output"
}
testcase_dropin() {
local defs imgs output