]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/partition/test-repart.sh
Merge pull request #17185 from yuwata/ethtool-update
[thirdparty/systemd.git] / src / partition / test-repart.sh
CommitLineData
e29e4d57
ZJS
1#!/usr/bin/env bash
2set -ex
3
f17bdf82
DDM
4[[ -f /dev/loop-control ]] || exit 77
5
e29e4d57
ZJS
6repart=$1
7test -x $repart
8
a3709e37 9D=$(mktemp --tmpdir --directory "test-repart.XXXXXXXXXX")
e29e4d57
ZJS
10trap "rm -rf '$D'" EXIT INT QUIT PIPE
11mkdir -p $D/definitions
12
e29e4d57
ZJS
13SEED=e2a40bf9-73f1-4278-9160-49c031e7aef8
14
e4ec8b1f
ZJS
15echo "### Testing systemd-repart --empty=create ###"
16
05ae606b 17$repart $D/zzz --empty=create --size=1G --seed=$SEED
e29e4d57 18
46072ae3 19sfdisk -d $D/zzz | grep -v -e 'sector-size' -e '^$' >$D/empty
e29e4d57
ZJS
20
21cmp $D/empty - <<EOF
22label: gpt
23label-id: EF7F7EE2-47B3-4251-B1A1-09EA8BF12D5D
24device: $D/zzz
25unit: sectors
26first-lba: 2048
27last-lba: 2097118
28EOF
29
e4ec8b1f
ZJS
30echo "### Testing with root, root2, home, & swap ###"
31
e29e4d57
ZJS
32cat >$D/definitions/root.conf <<EOF
33[Partition]
26b0fda9 34Type=root-x86-64
e29e4d57
ZJS
35EOF
36
37ln -s root.conf $D/definitions/root2.conf
38
39cat >$D/definitions/home.conf <<EOF
40[Partition]
41Type=home
46072ae3
ZJS
42Label=home-first
43Label=home-always-too-long-xxxxxxxxxxxxxx-%v
e29e4d57
ZJS
44EOF
45
46072ae3 46cat >$D/definitions/swap.conf <<EOF
e29e4d57
ZJS
47[Partition]
48Type=swap
49SizeMaxBytes=64M
50PaddingMinBytes=92M
51EOF
52
53$repart $D/zzz --dry-run=no --seed=$SEED --definitions=$D/definitions
54
55sfdisk -d $D/zzz | grep -v -e 'sector-size' -e '^$' >$D/populated
56
57cmp $D/populated - <<EOF
58label: gpt
59label-id: EF7F7EE2-47B3-4251-B1A1-09EA8BF12D5D
60device: $D/zzz
61unit: sectors
62first-lba: 2048
63last-lba: 2097118
46072ae3 64$D/zzz1 : start= 2048, size= 591856, type=933AC7E1-2EB4-4F13-B844-0E14E2AEF915, uuid=A6005774-F558-4330-A8E5-D6D2C01C01D6, name="home-first"
e29e4d57
ZJS
65$D/zzz2 : start= 593904, size= 591856, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709, uuid=CE9C76EB-A8F1-40FF-813C-11DCA6C0A55B, name="root-x86-64"
66$D/zzz3 : start= 1185760, size= 591864, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709, uuid=AC60A837-550C-43BD-B5C4-9CB73B884E79, name="root-x86-64-2"
67$D/zzz4 : start= 1777624, size= 131072, type=0657FD6D-A4AB-43C4-84E5-0933C84B4F4F, uuid=2AA78CDB-59C7-4173-AF11-C7453737A5D1, name="swap"
68EOF
69
e4ec8b1f
ZJS
70echo "### Testing with root, root2, home, swap, & another partition ###"
71
e29e4d57
ZJS
72cat >$D/definitions/swap.conf <<EOF
73[Partition]
74Type=swap
75SizeMaxBytes=64M
76EOF
77
78cat >$D/definitions/extra.conf <<EOF
79[Partition]
80Type=linux-generic
7b5cb4ce
TH
81Label=custom_label
82UUID=a0a1a2a3a4a5a6a7a8a9aaabacadaeaf
e29e4d57
ZJS
83EOF
84
46072ae3
ZJS
85echo "Label=ignored_label" >>$D/definitions/home.conf
86echo "UUID=b0b1b2b3b4b5b6b7b8b9babbbcbdbebf" >>$D/definitions/home.conf
7b5cb4ce 87
e29e4d57
ZJS
88$repart $D/zzz --dry-run=no --seed=$SEED --definitions=$D/definitions
89
90sfdisk -d $D/zzz | grep -v -e 'sector-size' -e '^$' >$D/populated2
91
92cmp $D/populated2 - <<EOF
93label: gpt
94label-id: EF7F7EE2-47B3-4251-B1A1-09EA8BF12D5D
95device: $D/zzz
96unit: sectors
97first-lba: 2048
98last-lba: 2097118
46072ae3 99$D/zzz1 : start= 2048, size= 591856, type=933AC7E1-2EB4-4F13-B844-0E14E2AEF915, uuid=A6005774-F558-4330-A8E5-D6D2C01C01D6, name="home-first"
e29e4d57
ZJS
100$D/zzz2 : start= 593904, size= 591856, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709, uuid=CE9C76EB-A8F1-40FF-813C-11DCA6C0A55B, name="root-x86-64"
101$D/zzz3 : start= 1185760, size= 591864, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709, uuid=AC60A837-550C-43BD-B5C4-9CB73B884E79, name="root-x86-64-2"
102$D/zzz4 : start= 1777624, size= 131072, type=0657FD6D-A4AB-43C4-84E5-0933C84B4F4F, uuid=2AA78CDB-59C7-4173-AF11-C7453737A5D1, name="swap"
7b5cb4ce 103$D/zzz5 : start= 1908696, size= 188416, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=A0A1A2A3-A4A5-A6A7-A8A9-AAABACADAEAF, name="custom_label"
e29e4d57
ZJS
104EOF
105
e4ec8b1f
ZJS
106echo "### Resizing to 2G ###"
107
05ae606b 108$repart $D/zzz --size=2G --dry-run=no --seed=$SEED --definitions=$D/definitions
e29e4d57
ZJS
109
110sfdisk -d $D/zzz | grep -v -e 'sector-size' -e '^$' >$D/populated3
111
112cmp $D/populated3 - <<EOF
113label: gpt
114label-id: EF7F7EE2-47B3-4251-B1A1-09EA8BF12D5D
115device: $D/zzz
116unit: sectors
117first-lba: 2048
118last-lba: 4194270
46072ae3 119$D/zzz1 : start= 2048, size= 591856, type=933AC7E1-2EB4-4F13-B844-0E14E2AEF915, uuid=A6005774-F558-4330-A8E5-D6D2C01C01D6, name="home-first"
e29e4d57
ZJS
120$D/zzz2 : start= 593904, size= 591856, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709, uuid=CE9C76EB-A8F1-40FF-813C-11DCA6C0A55B, name="root-x86-64"
121$D/zzz3 : start= 1185760, size= 591864, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709, uuid=AC60A837-550C-43BD-B5C4-9CB73B884E79, name="root-x86-64-2"
122$D/zzz4 : start= 1777624, size= 131072, type=0657FD6D-A4AB-43C4-84E5-0933C84B4F4F, uuid=2AA78CDB-59C7-4173-AF11-C7453737A5D1, name="swap"
7b5cb4ce 123$D/zzz5 : start= 1908696, size= 2285568, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=A0A1A2A3-A4A5-A6A7-A8A9-AAABACADAEAF, name="custom_label"
e29e4d57 124EOF
757bc2e4
LP
125
126dd if=/dev/urandom of=$D/block-copy bs=4096 count=10240
127
e4ec8b1f
ZJS
128echo "### Testing with root, root2, home, swap, another partition, & partition copy ###"
129
757bc2e4
LP
130cat >$D/definitions/extra2.conf <<EOF
131[Partition]
132Type=linux-generic
133Label=block-copy
134UUID=2a1d97e1d0a346cca26eadc643926617
135CopyBlocks=$D/block-copy
136EOF
137
138$repart $D/zzz --size=3G --dry-run=no --seed=$SEED --definitions=$D/definitions
139
140sfdisk -d $D/zzz | grep -v -e 'sector-size' -e '^$' >$D/populated4
141
142cmp $D/populated4 - <<EOF
143label: gpt
144label-id: EF7F7EE2-47B3-4251-B1A1-09EA8BF12D5D
145device: $D/zzz
146unit: sectors
147first-lba: 2048
148last-lba: 6291422
46072ae3 149$D/zzz1 : start= 2048, size= 591856, type=933AC7E1-2EB4-4F13-B844-0E14E2AEF915, uuid=A6005774-F558-4330-A8E5-D6D2C01C01D6, name="home-first"
757bc2e4
LP
150$D/zzz2 : start= 593904, size= 591856, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709, uuid=CE9C76EB-A8F1-40FF-813C-11DCA6C0A55B, name="root-x86-64"
151$D/zzz3 : start= 1185760, size= 591864, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709, uuid=AC60A837-550C-43BD-B5C4-9CB73B884E79, name="root-x86-64-2"
152$D/zzz4 : start= 1777624, size= 131072, type=0657FD6D-A4AB-43C4-84E5-0933C84B4F4F, uuid=2AA78CDB-59C7-4173-AF11-C7453737A5D1, name="swap"
153$D/zzz5 : start= 1908696, size= 2285568, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=A0A1A2A3-A4A5-A6A7-A8A9-AAABACADAEAF, name="custom_label"
154$D/zzz6 : start= 4194264, size= 2097152, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=2A1D97E1-D0A3-46CC-A26E-ADC643926617, name="block-copy"
155EOF
156
157cmp --bytes=41943040 --ignore-initial=0:$((512*4194264)) $D/block-copy $D/zzz
e4ec8b1f 158
f7011e17
LP
159if [ `id -u` == 0 ] && type -P cryptsetup diff losetup > /dev/null ; then
160 echo "### Testing Format=/Encrypt=/CopyFiles="
161
162 # These tests require privileges unfortunately
163
164 cat >$D/definitions/extra3.conf <<EOF
165[Partition]
166Type=linux-generic
167Label=luks-format-copy
168UUID=7b93d1f2-595d-4ce3-b0b9-837fbd9e63b0
169Format=ext4
170Encrypt=yes
171CopyFiles=$D/definitions:/def
172SizeMinBytes=48M
173EOF
174
175 $repart $D/zzz --size=auto --dry-run=no --seed=$SEED --definitions=$D/definitions
176
177 sfdisk -d $D/zzz | grep -v -e 'sector-size' -e '^$' >$D/populated5
178
179 cmp $D/populated5 - <<EOF
180label: gpt
181label-id: EF7F7EE2-47B3-4251-B1A1-09EA8BF12D5D
182device: $D/zzz
183unit: sectors
184first-lba: 2048
185last-lba: 6389726
186$D/zzz1 : start= 2048, size= 591856, type=933AC7E1-2EB4-4F13-B844-0E14E2AEF915, uuid=A6005774-F558-4330-A8E5-D6D2C01C01D6, name="home-first"
187$D/zzz2 : start= 593904, size= 591856, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709, uuid=CE9C76EB-A8F1-40FF-813C-11DCA6C0A55B, name="root-x86-64"
188$D/zzz3 : start= 1185760, size= 591864, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709, uuid=AC60A837-550C-43BD-B5C4-9CB73B884E79, name="root-x86-64-2"
189$D/zzz4 : start= 1777624, size= 131072, type=0657FD6D-A4AB-43C4-84E5-0933C84B4F4F, uuid=2AA78CDB-59C7-4173-AF11-C7453737A5D1, name="swap"
190$D/zzz5 : start= 1908696, size= 2285568, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=A0A1A2A3-A4A5-A6A7-A8A9-AAABACADAEAF, name="custom_label"
191$D/zzz6 : start= 4194264, size= 2097152, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=2A1D97E1-D0A3-46CC-A26E-ADC643926617, name="block-copy"
192$D/zzz7 : start= 6291416, size= 98304, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=7B93D1F2-595D-4CE3-B0B9-837FBD9E63B0, name="luks-format-copy"
193EOF
194
195 LOOP=`losetup -P --show --find $D/zzz`
196 VOLUME=test-repart-$RANDOM
197
198 touch $D/empty-password
199 cryptsetup open --type=luks2 --key-file=$D/empty-password ${LOOP}p7 $VOLUME
200 mkdir $D/mount
201 mount -t ext4 /dev/mapper/$VOLUME $D/mount
202 diff -r $D/mount/def $D/definitions > /dev/null
203 umount $D/mount
204 cryptsetup close $VOLUME
205 losetup -d $LOOP
206else
207 echo "### Skipping Format=/Encrypt=/CopyFiles= test, lacking privileges or missing cryptsetup/diff/losetup"
208fi
209
e4ec8b1f
ZJS
210echo "### Testing json output ###"
211$repart $D/zzz --size=3G --dry-run=no --seed=$SEED --definitions=$D/definitions --json=help
212$repart $D/zzz --size=3G --dry-run=no --seed=$SEED --definitions=$D/definitions --json=pretty
213$repart $D/zzz --size=3G --dry-run=no --seed=$SEED --definitions=$D/definitions --json=short