]>
Commit | Line | Data |
---|---|---|
a827807a | 1 | #!@BUILD_SHEBANG@ |
7d44ff7d VS |
2 | |
3 | set -e | |
4 | ||
5 | fs="$1" | |
6 | ||
7 | GRUBFSTEST="@builddir@/grub-fstest" | |
8 | ||
9 | tempdir=`mktemp -d "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1 | |
10 | ||
11 | # This wrapper is to ease insertion of valgrind or time statistics | |
12 | run_it () { | |
4656ced4 | 13 | LC_ALL=C "$GRUBFSTEST" "$@" |
7d44ff7d VS |
14 | } |
15 | ||
37865c2c VS |
16 | range() { |
17 | range_counter="$1" | |
18 | while test "$range_counter" -le "$2"; do | |
19 | echo "$range_counter" | |
20 | range_counter="$((range_counter + $3))" | |
21 | done | |
22 | } | |
23 | ||
24 | powrange() { | |
25 | range_counter="$1" | |
26 | while test "$range_counter" -le "$2"; do | |
27 | echo "$range_counter" | |
28 | range_counter="$((range_counter * 2))" | |
29 | done | |
30 | } | |
31 | ||
7d44ff7d | 32 | run_grubfstest () { |
37865c2c VS |
33 | need_images= |
34 | for i in $(range 0 $((NEED_IMAGES_N-1)) 1); do | |
35 | need_images="$need_images $FSIMAGEP${i}.img"; | |
36 | done | |
37 | ||
38 | run_it -c $NEED_IMAGES_N $need_images "$@" | |
7d44ff7d VS |
39 | } |
40 | ||
41 | # OS LIMITATION: GNU/Linux has no AFS support, so we use a premade image and a reference tar file. I.a. no multiblocksize test | |
42 | ||
43 | MINLOGSECSIZE=9 | |
44 | MAXLOGSECSIZE=9 | |
45 | case x"$fs" in | |
46 | xntfs*) | |
47 | MINLOGSECSIZE=8 | |
48 | MAXLOGSECSIZE=12;; | |
49 | xvfat*|xmsdos*) | |
50 | MINLOGSECSIZE=9 | |
51 | # OS LIMITATION: It could go up to 32768 but Linux rejects sector sizes > 4096 | |
52 | MAXLOGSECSIZE=12;; | |
53 | xext*) | |
54 | MINLOGSECSIZE=8 | |
55 | MAXLOGSECSIZE=12;; | |
56 | xbtrfs*) | |
57 | MINLOGSECSIZE=8 | |
58 | # OS LIMITATION: It could go up to 32768 but Linux rejects sector sizes > 4096 | |
59 | MAXLOGSECSIZE=12;; | |
60 | xxfs) | |
61 | MINLOGSECSIZE=9 | |
62 | # OS LIMITATION: GNU/Linux doesn't accept > 4096 | |
63 | MAXLOGSECSIZE=12;; | |
900fca88 VS |
64 | xxfs_crc) |
65 | MINLOGSECSIZE=9 | |
66 | # OS LIMITATION: GNU/Linux doesn't accept > 1024 | |
67 | MAXLOGSECSIZE=10;; | |
7d44ff7d VS |
68 | xzfs*) |
69 | # OS LIMITATION: zfs-fuse hangs when creating zpool with sectors <=256B. | |
70 | MINLOGSECSIZE=9 | |
71 | # OS LIMITATION: zfs-fuse fails with >= 32K sectors. | |
72 | # OS limitation: zfs-fuse always uses ashift=9 with loop devices | |
73 | MAXLOGSECSIZE=9;; | |
74 | esac | |
37865c2c | 75 | for LOGSECSIZE in $(range "$MINLOGSECSIZE" "$MAXLOGSECSIZE" 1); do |
7d44ff7d VS |
76 | SECSIZE="$((1 << LOGSECSIZE))" |
77 | MINBLKSIZE=512 | |
78 | MAXBLKSIZE=512 | |
79 | BLKSTEP=0 | |
80 | case x"$fs" in | |
81 | xntfs*) | |
82 | MINBLKSIZE=$SECSIZE | |
83 | MAXBLKSIZE=65536 | |
84 | if [ x"$SECSIZE" = x256 ]; then | |
85 | MINBLKSIZE=512 | |
86 | MAXBLKSIZE=32768 | |
87 | fi | |
88 | ;; | |
89 | xvfat* | xmsdos*) | |
90 | MINBLKSIZE=$SECSIZE | |
91 | MAXBLKSIZE=$((128*SECSIZE)) | |
92 | ;; | |
93 | xexfat*) | |
94 | MINBLKSIZE=$SECSIZE | |
95 | # It could go further but it requires more and more space | |
96 | MAXBLKSIZE=8286208 | |
97 | ;; | |
98 | xhfs) | |
99 | MINBLKSIZE=512 | |
100 | # OS LIMITATION: should be 1048576 but linux hangs on unmnount with | |
101 | # >= 524288 | |
102 | MAXBLKSIZE=262144 | |
103 | ;; | |
104 | xhfsplus | xhfsplus_casesens | xhfsplus_wrap) | |
105 | MINBLKSIZE=512 | |
106 | MAXBLKSIZE=1048576 | |
107 | ;; | |
108 | xnilfs2) | |
5412028d VS |
109 | # nilfs2 supports blocksizes from 1024 to 4096 |
110 | # but non-4096 results in kernel oops in some cases, | |
111 | # avoid it. | |
112 | MINBLKSIZE=4096 | |
7d44ff7d VS |
113 | MAXBLKSIZE=4096 |
114 | ;; | |
115 | xsfs*) | |
116 | MINBLKSIZE=512 | |
117 | MAXBLKSIZE=4096 | |
118 | ;; | |
119 | xaffs | xaffs_intl) | |
120 | MINBLKSIZE=512 | |
121 | MAXBLKSIZE=4096 | |
122 | ;; | |
123 | xreiserfs*) | |
124 | MINBLKSIZE=512 | |
125 | # OS LIMITATION: 8192 isn't supported. | |
126 | MAXBLKSIZE=4096 | |
127 | ;; | |
128 | x"mdraid"*) | |
129 | MINBLKSIZE=4096 | |
130 | # OS LIMITATION: Linux oopses with >=32768K | |
131 | MAXBLKSIZE=$((16384*1024)) | |
132 | ;; | |
19c4156d | 133 | x"lvm_raid1"* | x"lvm_raid4" | x"lvm_raid5" | x"lvm_raid6") |
7d44ff7d VS |
134 | # OS LIMITATION: Linux crashes with less than 16384 |
135 | MINBLKSIZE=16384 | |
136 | # Could go further but what's the point? | |
137 | MAXBLKSIZE=$((65536*1024)) | |
138 | ;; | |
139 | x"lvm_mirrorall") | |
140 | MINBLKSIZE=2048 | |
141 | # Could go further but what's the point? | |
142 | MAXBLKSIZE=$((65536*1024)) | |
143 | ;; | |
144 | x"lvm_mirror1") | |
145 | MINBLKSIZE=4096 | |
146 | # Could go further but what's the point? | |
147 | MAXBLKSIZE=$((65536*1024)) | |
148 | ;; | |
149 | x"lvm_stripe") | |
150 | MINBLKSIZE=4096 | |
151 | # Could go further but what's the point? | |
152 | MAXBLKSIZE=$((65536*1024)) | |
153 | ;; | |
154 | x"lvm"*) | |
155 | MINBLKSIZE=1024 | |
156 | # Could go further but what's the point? | |
157 | MAXBLKSIZE=$((65536*1024)) | |
158 | ;; | |
73466823 EB |
159 | xext4_encrypt) |
160 | # OS LIMITATION: Linux currently only allows the 'encrypt' feature | |
161 | # in combination with block_size = PAGE_SIZE (4096 bytes on x86). | |
162 | MINBLKSIZE=$(getconf PAGE_SIZE) | |
163 | MAXBLKSIZE=$MINBLKSIZE | |
164 | ;; | |
7d44ff7d VS |
165 | xext*) |
166 | MINBLKSIZE=1024 | |
167 | if [ $MINBLKSIZE -lt $SECSIZE ]; then | |
168 | MINBLKSIZE=$SECSIZE | |
169 | fi | |
170 | MAXBLKSIZE=4096 | |
171 | ;; | |
172 | xsquash*) | |
173 | MINBLKSIZE=4096 | |
174 | MAXBLKSIZE=1048576;; | |
71f9e4ac | 175 | xxfs|xf2fs) |
7d44ff7d VS |
176 | MINBLKSIZE=$SECSIZE |
177 | # OS Limitation: GNU/Linux doesn't accept > 4096 | |
178 | MAXBLKSIZE=4096;; | |
900fca88 VS |
179 | xxfs_crc) |
180 | # OS Limitation: GNU/Linux doesn't accept != 1024 | |
181 | MINBLKSIZE=1024 | |
182 | MAXBLKSIZE=1024;; | |
7d44ff7d VS |
183 | xudf) |
184 | MINBLKSIZE=1024 | |
185 | MAXBLKSIZE=4096;; | |
186 | xbfs) | |
187 | MINBLKSIZE=1024 | |
188 | MAXBLKSIZE=8192;; | |
189 | xufs*) | |
190 | MINBLKSIZE=4096 | |
191 | # OS Limitation: Linux rejects 65536 blocks. | |
192 | MAXBLKSIZE=32768;; | |
193 | xminix3) | |
194 | # OS LIMITATION: Linux rejects non-power-of-two blocks. | |
195 | # OS LIMITATION: Linux rejects > 4096. | |
196 | MINBLKSIZE=1024 | |
197 | MAXBLKSIZE=4096;; | |
198 | esac | |
37865c2c VS |
199 | if test "$BLKSTEP" -eq 0; then |
200 | blksizes="$(powrange "$MINBLKSIZE" "$MAXBLKSIZE")" | |
201 | else | |
202 | blksizes="$(range "$MINBLKSIZE" "$MAXBLKSIZE" "$BLKSTEP")" | |
203 | fi | |
204 | for BLKSIZE in $blksizes; do | |
7d44ff7d VS |
205 | MAXDEVICES=1 |
206 | MINDEVICES=1 | |
207 | export fs | |
208 | case x"$fs" in | |
209 | x"zfs_raidz" | x"zfs_stripe" | x"zfs_mirror" | xbtrfs_raid0 \ | |
210 | | xbtrfs_raid1 | x"mdraid"*"_raid4" | x"mdraid"*"_raid5" \ | |
211 | | x"mdraid"*"_linear" \ | |
19c4156d | 212 | | x"mdraid"*"_raid10" | xlvm_raid1* | xlvm_mirror1 | xlvm_mirrorall) |
7d44ff7d VS |
213 | MINDEVICES=2 |
214 | MAXDEVICES=7 | |
215 | ;; | |
216 | xbtrfs_raid10) | |
217 | MINDEVICES=4 | |
218 | MAXDEVICES=7 | |
219 | ;; | |
220 | x"zfs_raidz2"| xlvm_raid5 | xlvm_raid4) | |
221 | MINDEVICES=3 | |
222 | MAXDEVICES=7;; | |
223 | x"zfs_raidz3" | x"mdraid"*"_raid6") | |
224 | MINDEVICES=4 | |
225 | MAXDEVICES=7;; | |
226 | xlvm_raid6) | |
227 | MINDEVICES=5 | |
228 | MAXDEVICES=7;; | |
229 | x"mdraid"*"_raid0" | x"mdraid"*"_raid1" | x"lvm" | xlvm_stripe) | |
230 | MINDEVICES=1 | |
231 | MAXDEVICES=7;; | |
232 | esac | |
233 | ||
37865c2c | 234 | for NDEVICES in $(range "$MINDEVICES" "$MAXDEVICES" 1); do |
7d44ff7d | 235 | export NDEVICES |
37865c2c VS |
236 | unset FSIMAGEP |
237 | FSIMAGEP="${tempdir}/${fs}_${SECSIZE}_${BLKSIZE}_${NDEVICES}_" | |
238 | export FSIMAGEP | |
7d44ff7d VS |
239 | unset NEED_IMAGES; |
240 | ||
241 | case x$fs in | |
242 | # RAID 1 has to work with even one device of the set. | |
19c4156d | 243 | xzfs_mirror | x"mdraid"*"_raid1" | xlvm_mirrorall | xlvm_raid1all) |
7d44ff7d VS |
244 | NEED_IMAGES_N=1;; |
245 | # Degrade raidz by removing 3 devices | |
246 | xzfs_raidz3) | |
247 | NEED_IMAGES_N=$((NDEVICES-3));; | |
248 | # Degrade raidz by removing 2 devices | |
249 | xzfs_raidz2 | x"mdraid"*"_raid6" | x"lvm_raid6") | |
250 | NEED_IMAGES_N=$((NDEVICES-2));; | |
251 | # Degrade raidz and btrfs RAID1 by removing one device | |
252 | xbtrfs_raid1 | xbtrfs_raid10 | xzfs_raidz | x"mdraid"*"_raid4" \ | |
253 | | x"mdraid"*"_raid5" | x"mdraid"*"_raid10" | xlvm_mirror1 \ | |
19c4156d | 254 | | x"lvm_raid1" | x"lvm_raid4" | x"lvm_raid5") |
7d44ff7d VS |
255 | NEED_IMAGES_N=$((NDEVICES-1));; |
256 | *) | |
257 | NEED_IMAGES_N=$NDEVICES;; | |
258 | esac | |
7d44ff7d | 259 | export NEED_IMAGES_N |
7d44ff7d VS |
260 | |
261 | MNTPOINTRO="${tempdir}/${fs}_ro" | |
262 | MNTPOINTRW="${tempdir}/${fs}_rw" | |
263 | MOUNTOPTS="" | |
264 | MOUNTFS="$fs" | |
265 | MASTER="${tempdir}/master" | |
266 | FSLABEL="grub_;/testé莭莽茝😁киритi urewfceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoifoirefoireoifoijfoirereoireoivoioirevoinvoinreoinvnoieoinreoinveoinveoinreoinvoineoinoinoineoinernoiveoinvreoiioewdioewoirvnoireoivfoirewfewoifoijewoijfoijewfoijfewoijoijoijoijoijoijoijfewceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoifoirefoireoifoijfoirereoireoivoioirevoinvoinreoinvnoieoinreoinveoinveoinreoinvoineoinoinoineoinernoiveoinvreoiioewdioewoirvnoireoivfoirewfewoifoijewoijfoijewfoijfewoijoijoijoijoijoijoijfewrewfceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoifoirefoireoifoijfoirereoireoivoioirevoinvoinreoinvnoieoinreoinveoinveoinreoinvoineoinoinoineoinernoiveoinvreoiioewdioewoirvnoireoivfoirewfewoifoijewoijfoijewfoijfewoijoijoijoijoijoijoijfewceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoifoirefoireoifoijfoirereoireoivoioirevoinvoinreoinvnoieoinreoinveoinveoinreoinvoineoinoinoineoinernoiveoinvreoiioewdioewoirvnoireoivfoirewfewoifoijewoijfoijewfoijfewoijoijoijoijoijoijoijfew" | |
37865c2c | 267 | CFILESRC= |
1073ddb1 | 268 | for cand in /usr/share/dict/american-english /usr/share/dict/linux.words /data/data/com.termux/files/usr/share/hunspell/en_US.dic; do |
37865c2c VS |
269 | if test -f "$cand" ; then |
270 | CFILESRC="$cand" | |
271 | break | |
272 | fi | |
273 | done | |
274 | if test "$CFILESRC" = "" ; then | |
275 | echo "Couldn't find compressible file" >&2 | |
276 | exit 1 | |
7d44ff7d VS |
277 | fi |
278 | case x"$fs" in | |
279 | # FS LIMITATION: 8.3 names | |
280 | xmsdos*) | |
37865c2c | 281 | CFILE="american.eng";; |
7d44ff7d | 282 | xiso9660) |
37865c2c | 283 | CFILE="american_english";; |
7d44ff7d | 284 | *) |
37865c2c | 285 | CFILE="american-english";; |
7d44ff7d VS |
286 | esac |
287 | # OS LIMITATION: Limited by NAME_MAX (usually 255) in GNU/Linux | |
bf0e59ce | 288 | LONGNAME="qwertzuiopasdfghjklyxcvbnm1234567890qwertzuiopasdfghjklyxcvbnm1234567890oiewqfiewioqoiqoiurqruewqoiuwoieoiiuewqroreqiufieiuwrnureweriuvceoiroiewqoiricdsalkcndsakfirefoiwqeoircorejwoijfreoijojoiewjfwnfcoirenfoirefnreoifenoiwfnoi" |
7d44ff7d VS |
289 | rm -rf "$MASTER" |
290 | ||
291 | case x"$fs" in | |
292 | # FS LIMITATION: HFS+ label is at most 255 UTF-16 chars | |
293 | # OS LIMITATION: Linux HFS+ tools check UTF-8 length and don't | |
294 | # handle out-of-BMP characters | |
295 | x"hfsplus" | x"hfsplus_casesens" | x"hfsplus_wrap") | |
296 | FSLABEL="grub_;/testé䏌䐓䏕киритi urewfceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoifoiq" | |
297 | ;; | |
298 | # FS LIMITATION: btrfs label is at most 255 UTF-8 chars | |
299 | x"btrfs"*) | |
c65d35b0 | 300 | FSLABEL="grub_;/testé莭莽😁киритi urewfceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoi";; |
7d44ff7d | 301 | |
71f9e4ac JK |
302 | # FS LIMITATION: f2fs label is at most 512 UTF-16 chars |
303 | x"f2fs") | |
304 | FSLABEL="grub_;/testé䏌䐓䏕киритiurewfceniuewruewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoirvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoircreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoifoiq";; | |
305 | ||
7d44ff7d VS |
306 | # FS LIMITATION: exfat is at most 15 UTF-16 chars |
307 | x"exfat") | |
308 | FSLABEL="géт ;/莭莽😁кир";; | |
309 | # FS LIMITATION: ntfs label is at most ?? UTF-16 chars | |
310 | x"ntfs"*) | |
311 | FSLABEL="grub_;/testéтi u莭😁茝кириrewfceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvniwnivrewiuvcrewvnuewvrrrewniureifiuewifjiww";; | |
312 | # FS LIMITATION: nilfs2 label is at most 80 UTF-8 characters | |
313 | x"nilfs2") | |
314 | FSLABEL="grub_;/testéтi u😁莽茝кириrewfceniuewruevrewnuuireurevueurnievrewfne";; | |
315 | # FS LIMITATION: afs and iso9660 label is at most 32 UTF-8 characters | |
316 | x"afs" | xiso9660 | xrockridge | xrockridge_joliet\ | |
317 | | xiso9660_1999 | xrockridge_1999 | xrockridge_joliet_1999) | |
318 | FSLABEL="gr_;/é莭莽😁кирит u";; | |
319 | # FS LIMITATION: bfs label is at most 32 UTF-8 characters | |
320 | # OS LIMITATION: bfs label can't contain ; or / | |
321 | x"bfs") | |
322 | FSLABEL="grub_é莭莽😁кирит u";; | |
323 | # FS LIMITATION: Joliet label is at most 16 UTF-16 characters | |
324 | # OS LIMITATION: xorriso doesn't handle out-of-BMP characters | |
325 | xjoliet | xjoliet_1999) | |
326 | FSLABEL="g;/_é䏌䐓䏕䎛䎾䏴кит u" | |
327 | #FSLABEL="g;/_é莭莽😁кит u" | |
328 | ;; | |
329 | # FS LIMITATION: reiserfs, extN and jfs label is at most 16 UTF-8 characters | |
e20aa39e | 330 | x"reiserfs_old" | x"reiserfs" | x"ext"* | x"lvm"* | x"mdraid"* | x"jfs" | x"jfs_caseins") |
7d44ff7d VS |
331 | FSLABEL="g;/éт 莭😁";; |
332 | # FS LIMITATION: No underscore, space, semicolon, slash or international characters in UFS* in label. Limited to 32 UTF-8 characters | |
333 | x"ufs1" | x"ufs1_sun" | x"ufs2") | |
334 | FSLABEL="grubtest""ieurrucnenreeiurueurewf";; | |
335 | # FS LIMITATION: XFS label is at most 12 UTF-8 characters | |
900fca88 | 336 | x"xfs"|x"xfs_crc") |
7d44ff7d VS |
337 | FSLABEL="géт 😁к";; |
338 | # FS LIMITATION: FAT labels limited to 11 characters, no international characters or lowercase | |
339 | x"vfat"* | xmsdos*) | |
340 | FSLABEL="GRUBTEST ;_";; | |
341 | # FS LIMITATION: AFFS is latin1. At most 29 characters | |
342 | x"affs" | xaffs_intl) | |
343 | FSLABEL="grub_tt? #*w;/e£@¡¤½¾{[]}<>.,";; | |
344 | # FS LIMITATION: SFS is latin1. At most 30 characters | |
345 | x"sfs"*) | |
346 | FSLABEL="GRUB tt öäüé;/àèç åø¿ª©þð׫»µ¬";; | |
347 | # FS LIMITATION: HFS is Mac-Roman. At most 27 characters | |
348 | x"hfs") | |
349 | FSLABEL="grub_t;/estéàèèéie fiucnree";; | |
350 | # FS LIMITATION: UDF label is either up to 127 latin1 characters or 63 UTF-16 ones | |
351 | # OS LIMITATION: Linux UDF tools force ASCII label ... | |
352 | x"udf") | |
353 | FSLABEL="grub_;/testurewfceniuewruevrewnuuireurevueurnievr";; | |
354 | # FS LIMITATION: ZFS doesn't accept non-ASCII in label | |
355 | # FIXME: since this is used as a path component for mount it's very limited in length | |
356 | xzfs_* | xzfs) | |
357 | FSLABEL="grub_testieufiue r";; | |
358 | esac | |
359 | case x"$fs" in | |
360 | xmdraid*) | |
361 | DISKSIZE=314572800;; | |
362 | xlvm*) | |
363 | LVMBLKMUL=$(((5800 * 1048576) / (8 * BLKSIZE * NDEVICES))) | |
364 | DISKSIZE=$((8*BLKSIZE*LVMBLKMUL));; | |
365 | # FS LIMITATION: some fs have disk size limit | |
366 | x"vfat12" | xmsdos12) | |
367 | DISKSIZE=$((4000*BLKSIZE));; | |
368 | x"vfat12a" | xmsdos12a) | |
369 | if [ $BLKSIZE -ge 2048 ]; then | |
370 | DISKSIZE=$((2500*BLKSIZE)) | |
371 | else | |
372 | DISKSIZE=$((3000*BLKSIZE)) | |
373 | fi | |
374 | if [ $DISKSIZE -gt $((60000*SECSIZE)) ]; then | |
375 | DISKSIZE=$((60000*SECSIZE)) | |
376 | fi;; | |
377 | x"vfat16" | xmsdos16) | |
378 | DISKSIZE=$((65000*BLKSIZE));; | |
379 | x"vfat16a" | xmsdos16a) | |
380 | DISKSIZE=$((60000*SECSIZE)) | |
381 | ;; | |
382 | *) | |
383 | DISKSIZE=10737418240;; | |
384 | esac | |
385 | ||
386 | if [ $DISKSIZE -ge $(((5800/NDEVICES)*1048576)) ]; then | |
387 | DISKSIZE=$(((5800/NDEVICES)*1048576)) | |
388 | fi | |
389 | ||
390 | case x"$fs" in | |
391 | xvfat* | xmsdos* | xexfat* | xhfs | xhfsplus | xhfsplus_wrap | xaffs \ | |
392 | | xaffs_intl | xjfs_caseins | xsfs_caseins \ | |
393 | | xzfs_caseins | xiso9660) | |
394 | CASESENS=n;; | |
395 | *) | |
396 | CASESENS=y;; | |
397 | esac | |
398 | ||
399 | BIGBLOCKCNT=$((5000 * 1048576)) | |
400 | case x"$fs" in | |
401 | # FS LIMITATION: small filesystems | |
402 | x"vfat12" | xmsdos12) | |
403 | if [ $BLKSIZE -le 4096 ]; then | |
404 | BIGBLOCKCNT=0 | |
405 | elif [ $BLKSIZE = 8192 ]; then | |
406 | BIGBLOCKCNT=1500000 | |
407 | else | |
408 | BIGBLOCKCNT=$((2000*BLKSIZE)) | |
409 | fi | |
410 | ;; | |
411 | x"vfat12a" | xmsdos12a) | |
412 | if [ $BLKSIZE -le 4096 ] || [ $((128*SECSIZE)) = $BLKSIZE ]; then | |
413 | BIGBLOCKCNT=0 | |
414 | else | |
415 | BIGBLOCKCNT=700000 | |
416 | fi;; | |
417 | x"vfat16a" | xmsdos16a) | |
418 | if [ $((128*SECSIZE)) = $BLKSIZE ]; then | |
419 | BIGBLOCKCNT=0 | |
420 | else | |
421 | BIGBLOCKCNT=$((2500*SECSIZE)) | |
422 | fi | |
423 | ;; | |
424 | x"vfat16" | xmsdos16) | |
425 | BIGBLOCKCNT=$((25000 * BLKSIZE)) | |
37865c2c VS |
426 | if [ $BIGBLOCKCNT -gt 4294967295 ]; then |
427 | BIGBLOCKCNT=4294967295 | |
7d44ff7d VS |
428 | fi |
429 | ;; | |
430 | x"minix") | |
431 | BIGBLOCKCNT=30000000;; | |
432 | ||
433 | xexfat) | |
434 | # Big blocks waste really a lot of space. | |
435 | # Not much is left. | |
436 | if [ $BLKSIZE = 2097152 ]; then | |
437 | BIGBLOCKCNT=4500000000 | |
438 | fi | |
439 | if [ $BLKSIZE = 4194304 ]; then | |
440 | BIGBLOCKCNT=3500000000 | |
441 | fi | |
442 | ;; | |
443 | # FS LIMITATION: romfs image is limited to 4G. | |
444 | x"romfs") | |
445 | BIGBLOCKCNT=$((4000 * 1048576));; | |
446 | # FS LIMITATION: These FS have uint32 as file size field | |
447 | x"vfat"* | xmsdos* | x"cpio_crc" | x"cpio_newc" | x"cpio_bin" | x"cpio_hpbin" | xsfs*) | |
37865c2c | 448 | BIGBLOCKCNT=4294967295;; |
7d44ff7d VS |
449 | # FS LIMITATION: These FS have int32 as file size field |
450 | # FIXME: not so sure about AFFS | |
451 | # OS LIMITATION: minix2/minix3 could be formatted in a way to permit more. | |
452 | x"minix3" | x"minix2" | x"hfs"| x"affs" | xaffs_intl | xreiserfs_old | xext2_old) | |
453 | BIGBLOCKCNT=$((16#7fffffff));; | |
454 | ||
455 | # FS LIMITATION: redundant storage | |
456 | # We have only limited space. Mirroring multiplies it very effectively. | |
457 | xmdraid* | xlvm* | xzfs_mirror | xbtrfs_raid1) | |
458 | BIGBLOCKCNT=$((100 * 1048576));; | |
459 | # We already test the FS for big files separately. Save some time here. | |
460 | x"zfs_raid"* | x"zfs_stripe"* | x"zfs_mirror"* | x"btrfs_raid"*) | |
461 | BIGBLOCKCNT=$((100 * 1048576));; | |
462 | ||
463 | # OS LIMITATION: bfs_fuse bugs beyond that | |
464 | xbfs) | |
465 | BIGBLOCKCNT=$((800 * 1048576));; | |
466 | esac | |
467 | ||
468 | NOSYMLINK=n | |
469 | case x"$fs" in | |
470 | # FS LIMITATION: no symlinks on FAT, exFAT, HFS, plain ISO9660 and Joliet | |
471 | # OS LIMITATION: ntfs-3g creates interix symlinks which aren't real symlinks | |
472 | x"vfat"* | xmsdos* | x"hfs" | x"exfat" | x"ntfs"* \ | |
473 | | xiso9660 | xjoliet| xiso9660_1999 | xjoliet_1999) | |
474 | NOSYMLINK=y;; | |
475 | esac | |
476 | NOHARDLINK=n | |
477 | case x"$fs" in | |
478 | # FS LIMITATION: no hardlinks on BFS, exfat, fat, hfs and SFS | |
479 | xbfs | xexfat | x"vfat"* | xmsdos* | xhfs | xsfs | xsfs_caseins) | |
480 | NOHARDLINK=y;; | |
481 | # GRUB LIMITATION: no hardlink support on newc and hfs+ | |
482 | xcpio_crc | xcpio_newc | xhfsplus*) | |
483 | NOHARDLINK=y;; | |
484 | esac | |
485 | ||
486 | # FS LIMITATION: some filesystems limit file name size | |
487 | case x"$fs" in | |
488 | x"cpio_ustar") | |
489 | LONGNAME="`echo $LONGNAME |head -c 99`";; | |
490 | x"hfs") | |
491 | LONGNAME="`echo $LONGNAME |head -c 31`";; | |
492 | x"minix" | x"minix2" | x"affs" | xaffs_intl | xiso9660) | |
493 | LONGNAME="`echo $LONGNAME |head -c 30`";; | |
494 | x"sfs"*) | |
495 | LONGNAME="`echo $LONGNAME |head -c 105`";; | |
496 | x"minix3") | |
497 | LONGNAME="`echo $LONGNAME |head -c 60`";; | |
498 | x"udf") | |
499 | LONGNAME="`echo $LONGNAME |head -c 192`";; | |
500 | # GRUB LIMITATION: GRUB prefers Joliet over ISO9660:1999 | |
501 | xjoliet | xjoliet_1999) | |
502 | LONGNAME="`echo $LONGNAME |head -c 103`";; | |
503 | xiso9660_1999) | |
504 | LONGNAME="`echo $LONGNAME |head -c 207`";; | |
505 | # FS LIMITATION: 8.3 | |
506 | xmsdos*) | |
507 | LONGNAME="qwertzui.opa";; | |
508 | esac | |
509 | NOFILETIME=n | |
510 | NOFSTIME=n | |
511 | case x"$fs" in | |
512 | # FIXME: Not sure about BtrFS, NTFS, JFS, AFS, UDF and SFS. Check it. | |
513 | # FS LIMITATION: as far as I know those FS don't store their last modification date. | |
900fca88 | 514 | x"jfs_caseins" | x"jfs" | x"xfs" | x"xfs_crc" | x"btrfs"* | x"reiserfs_old" | x"reiserfs" \ |
71f9e4ac | 515 | | x"bfs" | x"afs" | x"f2fs" \ |
7d44ff7d VS |
516 | | x"tarfs" | x"cpio_"* | x"minix" | x"minix2" \ |
517 | | x"minix3" | x"ntfs"* | x"udf" | x"sfs"*) | |
518 | NOFSTIME=y;; | |
519 | # OS LIMITATION: Linux doesn't update fstime. | |
520 | # OS LIMITATION: Linux apparently uses localtime instead of UTC | |
521 | xhfs) | |
522 | NOFILETIME=y; NOFSTIME=y;; | |
523 | # GRUB LIMITATION: FAT and exFAT use localtime. Unusable for GRUB | |
524 | x"vfat"* | x"msdos"* | x"exfat") | |
525 | NOFILETIME=y; NOFSTIME=y;; | |
526 | # FS LIMITATION: romfs has no timestamps. | |
527 | x"romfs") | |
528 | NOFILETIME=y; NOFSTIME=y;; | |
529 | esac | |
530 | ||
531 | NOFSLABEL=n | |
532 | case x"$fs" in | |
533 | # FS LIMITATION: these filesystems have no label. | |
534 | x"cpio_"* | x"tarfs" | x"squash4_"* | x"minix" | x"minix2" \ | |
535 | | x"minix3" | xreiserfs_old) | |
536 | NOFSLABEL=y;; | |
537 | esac | |
538 | ||
bf0e59ce VS |
539 | PDIRCOMPNUM=210 |
540 | PDIR2COMPNUM=210 | |
7d44ff7d VS |
541 | |
542 | case x$fs in | |
543 | # OS LIMITATION: bfs_fuse bugs beyond that | |
544 | xbfs) | |
545 | PDIRCOMPNUM=10 | |
546 | PDIR2COMPNUM=10;; | |
547 | # OS LIMITATION: Linux supports only inline symlinks | |
548 | xudf) | |
549 | if [ $BLKSIZE = 1024 ]; then | |
550 | PDIR2COMPNUM=113 | |
551 | fi ;; | |
552 | # FS LIMITATION: at most 255 on path length | |
553 | # FS LIMITATION: at most 100 on symlink length | |
554 | xcpio_ustar) | |
bf0e59ce | 555 | PDIRCOMPNUM=84 |
7d44ff7d VS |
556 | PDIR2COMPNUM=30;; |
557 | # OS LIMITATION: Linux supports only symlink at most one block long on reiserfs | |
558 | xreiserfs | xreiserfs_old) | |
559 | if [ $BLKSIZE = 512 ]; then | |
560 | PDIR2COMPNUM=114 | |
561 | fi ;; | |
562 | # FS LIMITATION: SFS assumes that symlink | |
563 | # with header fit in one block. | |
564 | # FIXME: not sure about it. | |
565 | xsfs | xsfs_caseins) | |
566 | if [ $BLKSIZE = 512 ]; then | |
567 | PDIR2COMPNUM=147 | |
568 | fi ;; | |
569 | # FS LIMITATION: AFFS assumes that symlink | |
570 | # with rather larger header fit in one block. | |
571 | # FIXME: not sure about it. | |
572 | xaffs | xaffs_intl) | |
573 | if [ $BLKSIZE = 512 ]; then | |
574 | PDIR2COMPNUM=97 | |
575 | fi ;; | |
576 | esac | |
577 | ||
578 | ||
579 | PDIR="" | |
580 | # OS LIMITATION: Limited by PATH_MAX (usually 1024) | |
37865c2c | 581 | for i in $(range 0 $((PDIRCOMPNUM-1)) 1); do |
7d44ff7d | 582 | PDIR="$PDIR/$i"; |
37865c2c | 583 | if test $((i%3)) = 0; then |
7d44ff7d VS |
584 | PDIR="$PDIR/" |
585 | fi | |
586 | done | |
587 | ||
588 | PDIR2="" | |
589 | # OS LIMITATION: Limited by PATH_MAX (usually 1024) | |
37865c2c | 590 | for i in $(range 0 $((PDIR2COMPNUM-1)) 1); do |
7d44ff7d | 591 | PDIR2="${PDIR2}/$i"; |
37865c2c | 592 | if test $((i%3)) = 0; then |
7d44ff7d VS |
593 | PDIR2="${PDIR2}/" |
594 | fi | |
595 | done | |
596 | ||
597 | PFIL="p.img" | |
598 | ||
599 | unset LODEVICES | |
600 | GENERATED=n | |
37865c2c VS |
601 | LODEVICES= |
602 | MOUNTDEVICE= | |
603 | ||
7d44ff7d VS |
604 | case x"$fs" in |
605 | x"tarfs" | x"cpio_"*| x"ziso9660" | x"romfs" | x"squash4_"*\ | |
606 | | x"iso9660" | xjoliet | xrockridge | xrockridge_joliet \ | |
607 | | x"iso9660_1999" | xjoliet_1999 | xrockridge_1999 \ | |
608 | | xrockridge_joliet_1999) | |
609 | MNTPOINTRW="$MASTER" | |
610 | MNTPOINTRO="$MASTER" | |
611 | GENERATED=y | |
612 | mkdir -p "$MASTER";; | |
613 | # No mkfs for GNU/Linux. Just unpack preformatted empty image | |
614 | *) | |
615 | mkdir -p "$MNTPOINTRW" | |
616 | mkdir -p "$MNTPOINTRO" | |
37865c2c VS |
617 | for i in $(range 0 $((NDEVICES-1)) 1); do |
618 | dd if=/dev/zero of="$FSIMAGEP${i}.img" count=1 bs=1 seek=$((DISKSIZE-1)) &> /dev/null | |
00835415 | 619 | LODEVICE=$(losetup --find --show "$FSIMAGEP${i}.img") |
37865c2c | 620 | LODEVICES="$LODEVICES $LODEVICE" |
37865c2c VS |
621 | if test "$i" = 0; then |
622 | MOUNTDEVICE="$LODEVICE" | |
623 | fi | |
7d44ff7d VS |
624 | done ;; |
625 | esac | |
626 | ||
7d44ff7d VS |
627 | case x"$fs" in |
628 | x"afs") | |
629 | ;; | |
630 | x"btrfs") | |
37865c2c | 631 | "mkfs.btrfs" -s $SECSIZE -L "$FSLABEL" "${MOUNTDEVICE}" ;; |
38612864 | 632 | x"btrfs_zlib" | x"btrfs_lzo" | x"btrfs_zstd") |
37865c2c | 633 | "mkfs.btrfs" -s $SECSIZE -L "$FSLABEL" "${MOUNTDEVICE}" |
7d44ff7d VS |
634 | MOUNTOPTS="compress=${fs/btrfs_/}," |
635 | MOUNTFS="btrfs" | |
636 | ;; | |
637 | x"btrfs_raid0") | |
37865c2c | 638 | "mkfs.btrfs" -s $SECSIZE -d raid0 -m raid0 -L "$FSLABEL" $LODEVICES |
7d44ff7d VS |
639 | MOUNTFS="btrfs" |
640 | ;; | |
641 | x"btrfs_raid1") | |
37865c2c | 642 | "mkfs.btrfs" -s $SECSIZE -d raid1 -m raid1 -L "$FSLABEL" $LODEVICES |
7d44ff7d VS |
643 | MOUNTFS="btrfs" |
644 | ;; | |
645 | x"btrfs_raid10") | |
37865c2c | 646 | "mkfs.btrfs" -s $SECSIZE -d raid10 -m raid10 -L "$FSLABEL" $LODEVICES |
7d44ff7d VS |
647 | MOUNTFS="btrfs" |
648 | ;; | |
649 | x"btrfs_single") | |
37865c2c | 650 | "mkfs.btrfs" -s $SECSIZE -d single -L "$FSLABEL" $LODEVICES |
7d44ff7d VS |
651 | MOUNTFS="btrfs" |
652 | ;; | |
653 | x"exfat") | |
37865c2c | 654 | "mkfs.$fs" -s $((BLKSIZE/512)) -n "$FSLABEL" "${MOUNTDEVICE}" |
7d44ff7d VS |
655 | MOUNTOPTS="iocharset=utf8," |
656 | MOUNTFS="exfat-fuse";; | |
657 | x"minix") | |
37865c2c | 658 | "mkfs.minix" "${MOUNTDEVICE}" |
7d44ff7d VS |
659 | ;; |
660 | # mkfs.hfs and mkfs.hfsplus don't fill UUID. | |
661 | x"hfsplus") | |
37865c2c VS |
662 | "mkfs.hfsplus" -b $BLKSIZE -v "$FSLABEL" "${MOUNTDEVICE}" |
663 | dd if=/dev/urandom of="${MOUNTDEVICE}" bs=1 seek=$((16#468)) conv=notrunc count=8 ;; | |
7d44ff7d | 664 | x"hfsplus_wrap") |
37865c2c VS |
665 | "mkfs.hfsplus" -w -b $BLKSIZE -v "$FSLABEL" "${MOUNTDEVICE}" |
666 | dd if=/dev/urandom of="${MOUNTDEVICE}" bs=1 seek=$((16#468)) conv=notrunc count=8 | |
7d44ff7d VS |
667 | MOUNTFS="hfsplus";; |
668 | x"hfsplus_casesens") | |
37865c2c VS |
669 | "mkfs.hfsplus" -s -b $BLKSIZE -v "$FSLABEL" "${MOUNTDEVICE}" |
670 | dd if=/dev/urandom of="${MOUNTDEVICE}" bs=1 seek=$((16#468)) conv=notrunc count=8 | |
7d44ff7d VS |
671 | MOUNTFS="hfsplus";; |
672 | x"hfs") | |
37865c2c VS |
673 | "mkfs.hfs" -b $BLKSIZE -v "`echo $FSLABEL |recode utf8..macroman`" -h "${MOUNTDEVICE}" |
674 | dd if=/dev/urandom of="${MOUNTDEVICE}" bs=1 seek=$((16#474)) conv=notrunc count=8 | |
7d44ff7d VS |
675 | MOUNTOPTS="iocharset=utf8,codepage=macroman," |
676 | ;; | |
677 | x"vfat"*|xmsdos*) | |
678 | BITS="${fs/vfat/}" | |
679 | BITS="${BITS/msdos/}" | |
680 | if [ "x${BITS:2:1}" = xa ]; then | |
681 | A=-A | |
682 | else | |
683 | A= | |
684 | fi | |
37865c2c | 685 | "mkfs.vfat" -a $A -S $SECSIZE -s $((BLKSIZE/SECSIZE)) -F "${BITS:0:2}" -n "$FSLABEL" "${MOUNTDEVICE}" |
7d44ff7d VS |
686 | MOUNTOPTS="iocharset=utf8,codepage=437," |
687 | MOUNTFS="$(echo "$fs"|sed 's,[0-9]*a\?$,,')";; | |
688 | x"minix2") | |
37865c2c | 689 | "mkfs.minix" -v "${MOUNTDEVICE}" |
7d44ff7d VS |
690 | MOUNTFS="minix";; |
691 | x"minix3") | |
37865c2c | 692 | "mkfs.minix" -B $BLKSIZE -3 "${MOUNTDEVICE}" |
7d44ff7d VS |
693 | MOUNTFS="minix";; |
694 | x"ntfs"*) | |
37865c2c | 695 | "mkfs.ntfs" -s "$SECSIZE" -c "$BLKSIZE" -L "$FSLABEL" -Q -q "${MOUNTDEVICE}" |
7d44ff7d VS |
696 | MOUNTOPTS="iocharset=utf8,compression," |
697 | MOUNTFS="ntfs-3g";; | |
698 | x"udf") | |
37865c2c | 699 | "mkudffs" --utf8 -b $BLKSIZE --lvid="$FSLABEL" "${MOUNTDEVICE}" |
7d44ff7d VS |
700 | MOUNTOPTS="iocharset=utf8,bs=$BLKSIZE,";; |
701 | x"ufs2") | |
37865c2c | 702 | "mkfs.ufs" -b $BLKSIZE -L "$FSLABEL" -O 2 "${MOUNTDEVICE}" |
7d44ff7d VS |
703 | MOUNTOPTS="ufstype=ufs2," |
704 | MOUNTFS="ufs";; | |
705 | x"ufs1") | |
37865c2c | 706 | "mkfs.ufs" -b $BLKSIZE -L "$FSLABEL" -O 1 "${MOUNTDEVICE}" |
7d44ff7d VS |
707 | MOUNTOPTS="ufstype=44bsd," |
708 | MOUNTFS="ufs";; | |
709 | x"ufs1_sun") | |
37865c2c | 710 | "mkfs.ufs" -b $BLKSIZE -L "$FSLABEL" -O 1 "${MOUNTDEVICE}" |
7d44ff7d VS |
711 | MOUNTOPTS="ufstype=sun," |
712 | MOUNTFS="ufs";; | |
713 | x"zfs") | |
37865c2c | 714 | "zpool" create -R "$MNTPOINTRW" "$FSLABEL" "${MOUNTDEVICE}" |
7d44ff7d VS |
715 | sleep 1 |
716 | "zfs" create "$FSLABEL"/"grub fs" | |
717 | sleep 1;; | |
718 | x"zfs_caseins") | |
37865c2c | 719 | "zpool" create -R "$MNTPOINTRW" "$FSLABEL" "${MOUNTDEVICE}" |
7d44ff7d VS |
720 | sleep 1 |
721 | "zfs" create -o casesensitivity=insensitive "$FSLABEL"/"grub fs" | |
722 | sleep 1;; | |
723 | x"zfs_lzjb" | xzfs_gzip | xzfs_zle) | |
37865c2c | 724 | "zpool" create -O compression=${fs/zfs_/} -R "$MNTPOINTRW" "$FSLABEL" "${MOUNTDEVICE}" |
7d44ff7d VS |
725 | sleep 1 |
726 | "zfs" create -o compression=${fs/zfs_/} "$FSLABEL"/"grub fs" | |
727 | sleep 1;; | |
728 | x"zfs_raidz") | |
37865c2c | 729 | "zpool" create -R "$MNTPOINTRW" "$FSLABEL" raidz1 $LODEVICES |
7d44ff7d VS |
730 | sleep 1 |
731 | "zfs" create "$FSLABEL"/"grub fs" | |
732 | sleep 1;; | |
733 | x"zfs_raidz2") | |
37865c2c | 734 | "zpool" create -R "$MNTPOINTRW" "$FSLABEL" raidz2 $LODEVICES |
7d44ff7d VS |
735 | sleep 1 |
736 | "zfs" create "$FSLABEL"/"grub fs" | |
737 | sleep 1;; | |
738 | x"zfs_raidz3") | |
37865c2c | 739 | "zpool" create -R "$MNTPOINTRW" "$FSLABEL" raidz3 $LODEVICES |
7d44ff7d VS |
740 | sleep 1 |
741 | "zfs" create "$FSLABEL"/"grub fs" | |
742 | sleep 1;; | |
743 | x"zfs_mirror") | |
37865c2c | 744 | "zpool" create -R "$MNTPOINTRW" "$FSLABEL" mirror $LODEVICES |
7d44ff7d VS |
745 | sleep 1 |
746 | "zfs" create "$FSLABEL"/"grub fs" | |
747 | sleep 1;; | |
748 | x"zfs_stripe") | |
37865c2c | 749 | "zpool" create -R "$MNTPOINTRW" "$FSLABEL" $LODEVICES |
7d44ff7d VS |
750 | sleep 1 |
751 | "zfs" create "$FSLABEL"/"grub fs" | |
752 | sleep 1;; | |
753 | x"tarfs" | x"cpio_"* | x"iso9660" | xjoliet | xrockridge | xrockridge_joliet | x"iso9660_1999" | xjoliet_1999 | xrockridge_1999 | xrockridge_joliet_1999 | x"ziso9660" | x"romfs" | x"squash4_"*) | |
754 | INSTDEVICE=/dev/null;; | |
755 | x"reiserfs") | |
37865c2c | 756 | "mkfs.reiserfs" --format=3.6 -b $BLKSIZE -l "$FSLABEL" -q "${MOUNTDEVICE}" ;; |
7d44ff7d | 757 | x"reiserfs_old") |
37865c2c | 758 | "mkfs.reiserfs" --format=3.5 -b $BLKSIZE -l "$FSLABEL" -q "${MOUNTDEVICE}" |
7d44ff7d VS |
759 | MOUNTFS=reiserfs;; |
760 | x"jfs") | |
37865c2c | 761 | "mkfs.jfs" -L "$FSLABEL" -q "${MOUNTDEVICE}" |
7d44ff7d VS |
762 | MOUNTOPTS="iocharset=utf8,";; |
763 | x"jfs_caseins") | |
37865c2c | 764 | "mkfs.jfs" -O -L "$FSLABEL" -q "${MOUNTDEVICE}" |
7d44ff7d VS |
765 | MOUNTFS=jfs |
766 | MOUNTOPTS="iocharset=utf8,";; | |
767 | x"mdraid"*) | |
37865c2c | 768 | mdadm -C --chunk=$((BLKSIZE/1024)) --force -e "${fs:6:1}.${fs:7:1}" "/dev/md/${fs}_${NDEVICES}" --level="${fs:13}" --raid-devices="$NDEVICES" $LODEVICES |
7d44ff7d VS |
769 | MOUNTDEVICE="/dev/md/${fs}_${NDEVICES}" |
770 | MOUNTFS=ext2 | |
771 | "mkfs.ext2" -L "$FSLABEL" -q "${MOUNTDEVICE}" ;; | |
772 | x"lvm"*) | |
37865c2c VS |
773 | for lodev in $LODEVICES; do |
774 | pvcreate "$lodev" | |
7d44ff7d | 775 | done |
37865c2c | 776 | vgcreate -s $((BLKSIZE/1024))K grub_test $LODEVICES |
7d44ff7d VS |
777 | if [ x$fs = xlvm ] ; then |
778 | lvcreate -l "$((NDEVICES*7*LVMBLKMUL))" -n testvol grub_test | |
779 | elif [ x$fs = xlvm_stripe ] ; then | |
780 | lvcreate -l "$((NDEVICES*7*LVMBLKMUL))" -i "$NDEVICES" -n testvol grub_test | |
19c4156d AB |
781 | elif [ x$fs = xlvm_mirror1 ] || [ x$fs = xlvm_raid1 ] ; then |
782 | lvcreate -m 1 -l "$((NDEVICES*2*LVMBLKMUL))" --type "${fs/lvm_/}" -n testvol grub_test | |
7d44ff7d | 783 | elif [ x$fs = xlvm_mirrorall ] ; then |
7c9309e5 | 784 | lvcreate -m "$((NDEVICES-1))" -l "$((6*LVMBLKMUL))" --type mirror -n testvol grub_test |
19c4156d AB |
785 | elif [ x$fs = xlvm_raid1all ] ; then |
786 | # Until version 2.02.103 LVM counts metadata segments | |
787 | # twice when checking available space. Reduce segment | |
788 | # count to work around it. | |
789 | lvcreate -m "$((NDEVICES-1))" -l "$((6*LVMBLKMUL - 1))" --type raid1 -n testvol grub_test | |
7d44ff7d VS |
790 | elif [ x$fs = xlvm_raid4 ] || [ x$fs = xlvm_raid5 ]; then |
791 | lvcreate -l "$(((NDEVICES-1) * 5*LVMBLKMUL))" -i "$((NDEVICES-1))" --type "${fs/lvm_/}" -n testvol grub_test | |
792 | elif [ x$fs = xlvm_raid6 ]; then | |
793 | lvcreate -l "$(((NDEVICES-2) * 5*LVMBLKMUL))" -i "$((NDEVICES-2))" --type "${fs/lvm_/}" -n testvol grub_test | |
794 | fi | |
795 | MOUNTDEVICE="/dev/mapper/grub_test-testvol" | |
796 | MOUNTFS=ext2 | |
797 | "mkfs.ext2" -L "$FSLABEL" -q "${MOUNTDEVICE}" ;; | |
71f9e4ac JK |
798 | xf2fs) |
799 | "mkfs.f2fs" -l "$FSLABEL" -q "${LODEVICES[0]}" ;; | |
7d44ff7d | 800 | xnilfs2) |
37865c2c | 801 | "mkfs.nilfs2" -L "$FSLABEL" -b $BLKSIZE -q "${MOUNTDEVICE}" ;; |
7d44ff7d | 802 | xext2_old) |
37865c2c | 803 | MKE2FS_DEVICE_SECTSIZE=$SECSIZE "mkfs.ext2" -r 0 -b $BLKSIZE -L "$FSLABEL" -q "${MOUNTDEVICE}" |
7d44ff7d VS |
804 | MOUNTFS=ext2 |
805 | ;; | |
e20aa39e | 806 | xext4_metabg) |
37865c2c | 807 | MKE2FS_DEVICE_SECTSIZE=$SECSIZE "mkfs.ext4" -O meta_bg,^resize_inode -b $BLKSIZE -L "$FSLABEL" -q "${MOUNTDEVICE}" |
e20aa39e VS |
808 | MOUNTFS=ext4 |
809 | ;; | |
73466823 EB |
810 | xext4_encrypt) |
811 | MKE2FS_DEVICE_SECTSIZE=$SECSIZE "mkfs.ext4" -O encrypt -b $BLKSIZE -L "$FSLABEL" -q "${MOUNTDEVICE}" | |
812 | MOUNTFS=ext4 | |
813 | ;; | |
7d44ff7d | 814 | xext*) |
37865c2c | 815 | MKE2FS_DEVICE_SECTSIZE=$SECSIZE "mkfs.$fs" -b $BLKSIZE -L "$FSLABEL" -q "${MOUNTDEVICE}" ;; |
7d44ff7d | 816 | xxfs) |
37865c2c | 817 | "mkfs.xfs" -m crc=0 -b size=$BLKSIZE -s size=$SECSIZE -L "$FSLABEL" -q "${MOUNTDEVICE}" ;; |
900fca88 VS |
818 | xxfs_crc) |
819 | MOUNTFS="xfs" | |
37865c2c | 820 | "mkfs.xfs" -m crc=1 -b size=$BLKSIZE -s size=$SECSIZE -L "$FSLABEL" -q "${MOUNTDEVICE}" ;; |
7d44ff7d VS |
821 | *) |
822 | echo "Add appropriate mkfs command here" | |
823 | exit 1 | |
824 | ;; | |
825 | esac | |
826 | BASEFILE="1.img" | |
827 | NASTYFILE=".?*\\!\"#%@\$%&'()+ ,-.:;<=>^{_}[]\`|~." | |
828 | case x"$fs" in | |
829 | ||
830 | # FS LIMITATION: AFFS and SFS don't accept : | |
831 | xsfs*) | |
832 | NASTYFILE=".?*\\!\"#%@\$%&'()+ ,-.;<=>^{_}[]\`|~.";; | |
833 | # FS LIMITATION: AFFS is limited in file name length (30) | |
834 | x"affs" | xaffs_intl) | |
835 | NASTYFILE=".?*\\!\"#@\$'()+ ,-;<=>^{_}[]\`|~.";; | |
836 | # FS LIMITATION: hfs, minix and minix2 are limited in file name length (30 or 31) | |
837 | x"hfs" | x"minix" | x"minix2") | |
838 | NASTYFILE=".?*\\!\"#@\$&'()+ ,-:;<=>{}[]\`|~.";; | |
839 | # FS LIMITATION: FAT doesn't accept ?, *, \, ", :, <, >, | | |
840 | # FS LIMITATION: FAT discards dots at the end. | |
841 | x"vfat"* | x"exfat") | |
842 | NASTYFILE=".!#%@\$%&'()+ ,-.;=^{_}[]\`~";; | |
843 | # FS LIMITATION: 8.3 limitations apply | |
844 | x"msdos"*) | |
845 | NASTYFILE="!#%@\$%&.;=^";; | |
846 | # FS LIMITATION: No ' ', '*', '/', ':', ';', '?', '\\' in joliet | |
847 | # GRUB LIMITATION: GRUB prefers Joliet over ISO9660:1999 | |
848 | xjoliet | xjoliet_1999) | |
849 | NASTYFILE=".!\"#%@\$%&'()+,-.<=>^{_}[]\`|~.";; | |
850 | # FS LIMITATION: iso9660 accepts only [0-9A-Z_]*, 32 characters at most | |
851 | xiso9660) | |
852 | NASTYFILE="0123456789_acefghijknopqrvwxyz";; | |
853 | esac | |
854 | ||
855 | case x"$fs" in | |
856 | # FS LIMITATION: HFS, AFFS and SFS use legacy codepage (mac-roman or latin1) | |
857 | x"sfs"* | x"hfs" | x"affs" | xaffs_intl) | |
858 | IFILE="éàèüöäëñ" | |
859 | ISYM="ëñéüöäàè" | |
860 | ;; | |
861 | # FS LIMITATION: filename length limitation. | |
862 | x"minix" | x"minix2") | |
863 | IFILE="éàèüö😁ñкиΕλκά" | |
864 | ISYM="Ελκάкиéà😁öäëñ" | |
865 | ;; | |
866 | xminix3) | |
867 | IFILE="éàèüöäëñкирица莭茝Ελλικά😁😜😒" | |
868 | ISYM="Ελλικά😁😜😒莭茝кирицаéàèüöäëñ";; | |
869 | # GRUB LIMITATION: HFS+ uses NFD. GRUB doesn't handle NF conversion. | |
870 | # OS LIMITATION: Linux doesn't handle out-of-BMP characters for UTF-16 | |
871 | x"hfsplus" | x"hfsplus_casesens" | x"hfsplus_wrap") | |
872 | IFILE="éàèüöäëñкирилица䏌䐓䏕Ελληνικα̍䏌䐓䏕" | |
873 | ISYM="Ελληνικα̍кирилица䏌䐓䏕éàèüöäëñ䏌䐓䏕" | |
874 | ;; | |
875 | # GRUB LIMITATION: On case-insensitive ZFS isn't supported with non-uppercase characters | |
876 | xzfs_caseins) | |
877 | IFILE="ÉÀÈÜÖÄËÑКИРИЛИЦА莭莽茝ΕΛΛΗΝΙΚΆ😁😜😒" | |
878 | ISYM="ΕΛΛΗΝΙΚΆКИРИЛИЦА😁😜😒ÉÀÈÜÖÄËÑ莭莽茝";; | |
879 | # FS LIMITATION: 8.3 CP437 | |
880 | x"msdos"*) | |
881 | IFILE="éàèüöäëñ.éàè" | |
882 | ;; | |
883 | # FS LIMITATION: iso9660 is ASCII-only. | |
884 | x"iso9660") | |
885 | IFILE="abcdefghijkmmnop" | |
886 | ;; | |
887 | # OS LIMITATION: Linux doesn't handle out-of-BMP characters for UTF-16 | |
888 | # OS LIMITATION: xorriso doesn't handle out-of-BMP characters | |
889 | xjoliet | xjoliet_1999 | x"vfat"* | x"jfs"* | x"udf"*) | |
890 | IFILE="éàèüöäëñкирилица䏌䐓䏕Ελληνικά䏌䐓䏕" | |
891 | ISYM="Ελληνικάкирилица䏌䐓䏕éàèüöäëñ䏌䐓䏕";; | |
892 | *) | |
893 | IFILE="éàèüöäëñкирилица莭莽茝Ελληνικά😁😜😒" | |
894 | ISYM="Ελληνικάкирилица😁😜😒éàèüöäëñ莭莽茝";; | |
895 | esac | |
896 | BIGFILE="big.img" | |
897 | BASESYM="sym" | |
898 | BASEHARD="hard" | |
899 | SSYM="///sdir////ssym" | |
900 | USYM="///sdir////usym" | |
901 | LONGSYM="longsym" | |
902 | PSYM="psym" | |
903 | OSDIR="" | |
904 | GRUBDEVICE=loop0 | |
905 | case x"$fs" in | |
906 | xmdraid*) | |
907 | GRUBDEVICE="mduuid/`mdadm --detail --export $MOUNTDEVICE | grep MD_UUID=|sed 's,MD_UUID=,,g;s,:,,g'`";; | |
908 | xlvm*) | |
909 | GRUBDEVICE="lvm/grub_test-testvol";; | |
910 | esac | |
911 | GRUBDIR="($GRUBDEVICE)" | |
912 | case x"$fs" in | |
913 | x"zfs"*) | |
914 | OSDIR="grub fs/" | |
915 | GRUBDIR="($GRUBDEVICE)/grub fs@";; | |
916 | x"tarfs" | x"cpio_"* | x"iso9660" | xjoliet | xrockridge | xrockridge_joliet | x"iso9660_1999" | xjoliet_1999 | xrockridge_1999 | xrockridge_joliet_1999 | x"ziso9660" | x"romfs" | x"squash4_"* | xafs) | |
917 | ;; | |
918 | *) | |
919 | if ! mount -t "$MOUNTFS" "${MOUNTDEVICE}" "$MNTPOINTRW" -o ${MOUNTOPTS}${SELINUXOPTS}rw ; then | |
920 | echo "MOUNT FAILED." | |
37865c2c VS |
921 | for lodev in $LODEVICES; do |
922 | while ! losetup -d "$lodev"; do | |
7d44ff7d VS |
923 | sleep 1 |
924 | done | |
37865c2c VS |
925 | done |
926 | for i in $(range 0 $((NDEVICES-1)) 1); do | |
927 | rm "$FSIMAGEP${i}.img" | |
7d44ff7d VS |
928 | done |
929 | exit 1; | |
930 | fi | |
931 | ;; | |
932 | esac | |
933 | case x"$fs" in | |
934 | # FS LIMITATION: redundant storage | |
935 | xmdraid* | xlvm*) | |
936 | BLOCKCNT=1048576;; | |
937 | x"zfs_raid"* | x"zfs_stripe"* | x"zfs_mirror"* | x"btrfs_raid"*) | |
938 | BLOCKCNT=1048576;; | |
939 | ||
940 | # FS LIMITATION: small filesystems | |
941 | x"vfat16a" | x"msdos16a") | |
942 | BLOCKCNT=65536;; | |
943 | x"vfat12a" | xmsdos12a) | |
944 | BLOCKCNT=32768;; | |
945 | xminix) | |
946 | BLOCKCNT=2621440;; | |
947 | xvfat16 | xmsdos16) | |
948 | if [ $BLKSIZE = 512 ] || [ $BLKSIZE = 1024 ]; then | |
949 | BLOCKCNT=1048576 | |
950 | else | |
951 | BLOCKCNT=5242880 | |
952 | fi | |
953 | ;; | |
954 | xvfat12 | xmsdos12) | |
955 | BLOCKCNT=$((100*BLKSIZE)) | |
956 | if [ $BLOCKCNT -gt 5242880 ]; then | |
957 | BLOCKCNT=5242880; | |
958 | fi | |
959 | ;; | |
960 | *) | |
961 | BLOCKCNT=5242880;; | |
962 | esac | |
f34ed1f5 AB |
963 | # Make sure file is not exact multiple of block size. This helps to force |
964 | # tail packing in case of squash4. | |
4f31bfe1 | 965 | BLOCKCNT="$((BLOCKCNT-1))" |
7d44ff7d VS |
966 | case x"$fs" in |
967 | x"ntfscomp") | |
968 | setfattr -h -v 0x00000800 -n system.ntfs_attrib_be "$MNTPOINTRW/$OSDIR";; | |
969 | esac | |
970 | # OS LIMITATION: No AFS support under GNU/Linux | |
971 | mkdir "$MNTPOINTRW/$OSDIR/sdir" | |
972 | mkdir -p "$MNTPOINTRW/$OSDIR/$PDIR" | |
973 | "@builddir@"/garbage-gen $BLOCKCNT > "$MNTPOINTRW/$OSDIR/sdir/2.img" | |
974 | "@builddir@"/garbage-gen $BLOCKCNT > "$MNTPOINTRW/$OSDIR/$BASEFILE" | |
975 | "@builddir@"/garbage-gen $BLOCKCNT > "$MNTPOINTRW/$OSDIR/$NASTYFILE" | |
976 | "@builddir@"/garbage-gen $BLOCKCNT > "$MNTPOINTRW/$OSDIR/$IFILE" | |
977 | "@builddir@"/garbage-gen $BLOCKCNT > "$MNTPOINTRW/$OSDIR/$LONGNAME" | |
978 | "@builddir@"/garbage-gen $BLOCKCNT > "$MNTPOINTRW/$OSDIR/$PDIR/$PFIL" | |
979 | if [ $PDIR != $PDIR2 ]; then | |
980 | "@builddir@"/garbage-gen $BLOCKCNT > "$MNTPOINTRW/$OSDIR/${PDIR2}/$PFIL" | |
981 | fi | |
982 | "@builddir@"/garbage-gen $BLOCKCNT > "$MNTPOINTRW/$OSDIR/CaSe" | |
983 | if [ x$CASESENS = xy ]; then | |
984 | "@builddir@"/garbage-gen $BLOCKCNT > "$MNTPOINTRW/$OSDIR/cAsE" | |
985 | fi | |
986 | if (test x$fs = xvfat12a || test x$fs = xmsdos12a) && test x$BLKSIZE = x131072; then | |
987 | # With this config there isn't enough space for full copy. | |
988 | # Copy as much as we can | |
37865c2c | 989 | cp "${CFILESRC}" "$MNTPOINTRW/$OSDIR/${CFILE}" &> /dev/null; |
7d44ff7d | 990 | else |
37865c2c VS |
991 | |
992 | cp "${CFILESRC}" "$MNTPOINTRW/$OSDIR/${CFILE}"; | |
993 | ||
7d44ff7d VS |
994 | fi |
995 | ||
996 | if [ x$NOSYMLINK != xy ]; then | |
997 | ln -s "$BASEFILE" "$MNTPOINTRW/$OSDIR/$BASESYM" | |
998 | ln -s "2.img" "$MNTPOINTRW/$OSDIR/$SSYM" | |
999 | ln -s "../1.img" "$MNTPOINTRW/$OSDIR/$USYM" | |
1000 | ln -s "$LONGNAME" "$MNTPOINTRW/$OSDIR/$LONGSYM" | |
1001 | ln -s "${PDIR2}/$PFIL" "$MNTPOINTRW/$OSDIR/$PSYM" | |
1002 | ln -s "$IFILE" "$MNTPOINTRW/$OSDIR/$ISYM" | |
1003 | fi | |
1004 | if [ x$NOHARDLINK != xy ]; then | |
1005 | ln "$MNTPOINTRW/$OSDIR/$BASEFILE" "$MNTPOINTRW/$OSDIR/$BASEHARD" | |
1006 | fi | |
1007 | ||
1008 | case x"$fs" in | |
1009 | x"afs") | |
1010 | ;; | |
1011 | x"zfs"*) | |
1012 | while ! zpool export "$FSLABEL" ; do | |
1013 | sleep 1; | |
1014 | done | |
1015 | sleep 2 | |
1016 | ;; | |
1017 | x"tarfs") | |
37865c2c | 1018 | (cd "$MASTER"; tar cf "${FSIMAGEP}0.img" .) ;; |
7d44ff7d | 1019 | x"cpio_"*) |
37865c2c | 1020 | (cd "$MASTER"; find . | cpio -o -H "$(echo ${fs} | sed 's@^cpio_@@')" > "${FSIMAGEP}0.img" ) ;; |
7d44ff7d VS |
1021 | x"ziso9660") |
1022 | FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00); | |
37865c2c | 1023 | xorriso -compliance rec_mtime -set_filter_r --zisofs -- -zisofs default -as mkisofs -iso-level 3 -graft-points -R -J -joliet-long -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGEP}0.img" -- -set_filter_r --zisofs -- -zisofs default -add /="$MASTER" ;; |
7d44ff7d VS |
1024 | x"iso9660") |
1025 | FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00); | |
37865c2c | 1026 | xorriso --rockridge off -compliance rec_mtime -as mkisofs -iso-level 3 -graft-points -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGEP}0.img" /="$MASTER" ;; |
7d44ff7d VS |
1027 | x"joliet") |
1028 | FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00); | |
37865c2c | 1029 | xorriso --rockridge off -compliance rec_mtime -as mkisofs -iso-level 3 -graft-points -J -joliet-long -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGEP}0.img" /="$MASTER" ;; |
7d44ff7d VS |
1030 | x"rockridge") |
1031 | FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00); | |
37865c2c | 1032 | xorriso --rockridge on -compliance rec_mtime -as mkisofs -iso-level 3 -graft-points -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGEP}0.img" /="$MASTER" ;; |
7d44ff7d VS |
1033 | x"rockridge_joliet") |
1034 | FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00); | |
37865c2c | 1035 | xorriso --rockridge on -compliance rec_mtime -as mkisofs -iso-level 3 -graft-points -J -joliet-long -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGEP}0.img" /="$MASTER" ;; |
7d44ff7d VS |
1036 | x"iso9660_1999") |
1037 | FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00); | |
37865c2c | 1038 | xorriso --rockridge off -compliance rec_mtime -as mkisofs -iso-level 4 -graft-points -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGEP}0.img" /="$MASTER" ;; |
7d44ff7d VS |
1039 | x"joliet_1999") |
1040 | FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00); | |
37865c2c | 1041 | xorriso --rockridge off -compliance rec_mtime -as mkisofs -iso-level 4 -graft-points -J -joliet-long -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGEP}0.img" /="$MASTER" ;; |
7d44ff7d VS |
1042 | x"rockridge_1999") |
1043 | FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00); | |
37865c2c | 1044 | xorriso --rockridge on -compliance rec_mtime -as mkisofs -iso-level 4 -graft-points -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGEP}0.img" /="$MASTER" ;; |
7d44ff7d VS |
1045 | x"rockridge_joliet_1999") |
1046 | FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00); | |
37865c2c | 1047 | xorriso --rockridge on -compliance rec_mtime -as mkisofs -iso-level 4 -graft-points -J -joliet-long -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGEP}0.img" /="$MASTER" ;; |
7d44ff7d | 1048 | x"romfs") |
37865c2c | 1049 | genromfs -V "$FSLABEL" -f "${FSIMAGEP}0.img" -d "$MASTER" ;; |
7d44ff7d | 1050 | xsquash4_*) |
37865c2c VS |
1051 | echo mksquashfs "$MASTER" "${FSIMAGEP}0.img" -always-use-fragments -comp "${fs/squash4_/}" -b $BLKSIZE |
1052 | mksquashfs "$MASTER" "${FSIMAGEP}0.img" -always-use-fragments -comp "${fs/squash4_/}" -b $BLKSIZE ;; | |
7d44ff7d VS |
1053 | x"bfs") |
1054 | sleep 1 | |
1055 | fusermount -u "$MNTPOINTRW" | |
1056 | ;; | |
1057 | xlvm*) | |
1058 | sleep 1 | |
37865c2c | 1059 | for try in $(range 0 20 1); do |
7d44ff7d VS |
1060 | if umount "$MNTPOINTRW" ; then |
1061 | break; | |
1062 | fi | |
1063 | sleep 1; | |
1064 | done | |
fa07d919 | 1065 | UMOUNT_TIME=$(date -u "+%Y-%m-%d %H:%M:%S") |
7d44ff7d VS |
1066 | sleep 1 |
1067 | vgchange -a n grub_test | |
1068 | ;; | |
1069 | xmdraid*) | |
1070 | sleep 1 | |
37865c2c | 1071 | for try in $(range 0 20 1); do |
7d44ff7d VS |
1072 | if umount "$MNTPOINTRW" ; then |
1073 | break; | |
1074 | fi | |
1075 | sleep 1; | |
1076 | done | |
fa07d919 | 1077 | UMOUNT_TIME=$(date -u "+%Y-%m-%d %H:%M:%S") |
7d44ff7d VS |
1078 | sleep 1 |
1079 | mdadm --stop /dev/md/"${fs}_$NDEVICES" | |
1080 | ;; | |
1081 | *) | |
1082 | sleep 1 | |
37865c2c | 1083 | for try in $(range 0 20 1); do |
7d44ff7d VS |
1084 | if umount "$MNTPOINTRW" ; then |
1085 | break; | |
1086 | fi | |
1087 | sleep 1; | |
1088 | done | |
1089 | ;; | |
1090 | esac | |
1091 | sleep 1 | |
1092 | ||
1093 | case x"$fs" in | |
1094 | x"zfs"*) | |
1095 | "zpool" import -d /dev -R "$MNTPOINTRO" "$FSLABEL" | |
1096 | ;; | |
1097 | x"tarfs") | |
1098 | ;; | |
1099 | x"cpio_"*) | |
1100 | ;; | |
1101 | x"ziso9660") | |
1102 | ;; | |
1103 | xiso9660 | xrockridge | xjoliet | xrockridge_joliet) | |
1104 | ;; | |
1105 | xiso9660_1999 | xrockridge_1999 | xjoliet_1999 | xrockridge_joliet_1999) | |
1106 | ;; | |
1107 | x"romfs") | |
1108 | ;; | |
1109 | xsquash4_*) | |
1110 | ;; | |
1111 | xlvm*) | |
1112 | vgchange -a y grub_test | |
1113 | sleep 1 | |
1114 | mount -t "$MOUNTFS" "${MOUNTDEVICE}" "$MNTPOINTRO" -o ${MOUNTOPTS}${SELINUXOPTS}ro ;; | |
1115 | xmdraid*) | |
37865c2c | 1116 | mdadm --assemble /dev/md/"${fs}_$NDEVICES" $LODEVICES |
7d44ff7d VS |
1117 | sleep 1 |
1118 | mount -t "$MOUNTFS" "${MOUNTDEVICE}" "$MNTPOINTRO" -o ${MOUNTOPTS}${SELINUXOPTS}ro ;; | |
1119 | *) | |
1120 | mount -t "$MOUNTFS" "${MOUNTDEVICE}" "$MNTPOINTRO" -o ${MOUNTOPTS}${SELINUXOPTS}ro ;; | |
1121 | esac | |
1122 | ||
1123 | run_grubfstest ls -- -la | |
1124 | case x"$fs" in | |
1125 | x"zfs"*) | |
1126 | LSROUT=$(run_grubfstest ls -- -la "($GRUBDEVICE)/grub fs@/");; | |
1127 | *) | |
1128 | LSROUT=$(run_grubfstest ls -- -la "($GRUBDEVICE)/");; | |
1129 | esac | |
1130 | if echo "$LSROUT" | grep -F " $BASEFILE" | grep "$BLOCKCNT" > /dev/null; then | |
1131 | : | |
1132 | else | |
1133 | echo LIST FAIL | |
1134 | echo "$LSROUT" | |
37865c2c | 1135 | TZ=UTC ls -l "$MNTPOINTRO" |
7d44ff7d VS |
1136 | exit 1 |
1137 | fi | |
1138 | ||
1139 | if echo "$LSROUT" | grep -F " $NASTYFILE" | grep "$BLOCKCNT"> /dev/null; then | |
1140 | : | |
1141 | else | |
1142 | echo NLIST FAIL | |
e2dd6daa | 1143 | echo "$LSROUT" |
37865c2c | 1144 | TZ=UTC ls -lA "$MNTPOINTRO" |
7d44ff7d VS |
1145 | exit 1 |
1146 | fi | |
1147 | ||
1148 | if echo "$LSROUT" | grep -F " $IFILE" | grep "$BLOCKCNT"> /dev/null; then | |
1149 | : | |
1150 | else | |
1151 | echo ILIST FAIL | |
1152 | echo "$LSROUT" | |
37865c2c | 1153 | TZ=UTC ls -l "$MNTPOINTRO" |
7d44ff7d VS |
1154 | exit 1 |
1155 | fi | |
1156 | ||
1157 | if echo "$LSROUT" | grep -F " $LONGNAME" | grep "$BLOCKCNT"> /dev/null; then | |
1158 | : | |
1159 | else | |
1160 | echo LONG LIST FAIL | |
e2dd6daa | 1161 | echo "$LSROUT" |
37865c2c | 1162 | TZ=UTC ls -l "$MNTPOINTRO" |
7d44ff7d VS |
1163 | exit 1 |
1164 | fi | |
1165 | ||
1166 | if [ x$NOFILETIME != xy ]; then | |
1167 | filtime=$(TZ=UTC ls --time-style=+%Y%m%d%H%M%S -l -d "$MNTPOINTRO/$OSDIR/$BASEFILE"|awk '{print $6; }') | |
1168 | if echo "$LSROUT" | grep -F "$filtime $BASEFILE" > /dev/null; then | |
1169 | : | |
1170 | else | |
1171 | echo TIME FAIL | |
1172 | echo "$LSROUT" | |
37865c2c | 1173 | TZ=UTC ls -l "$MNTPOINTRO" |
7d44ff7d VS |
1174 | exit 1 |
1175 | fi | |
1176 | ||
1177 | filtime=$(TZ=UTC ls --time-style=+%Y%m%d%H%M%S -l -d "$MNTPOINTRO/$OSDIR/$LONGNAME"|awk '{print $6; }') | |
1178 | if echo "$LSROUT" | grep -F "$filtime $LONGNAME" > /dev/null; then | |
1179 | : | |
1180 | else | |
1181 | echo LONG TIME FAIL | |
1182 | echo "$LSROUT" | |
37865c2c | 1183 | TZ=UTC ls -l "$MNTPOINTRO" |
7d44ff7d VS |
1184 | exit 1 |
1185 | fi | |
1186 | fi | |
1187 | ||
7af839a1 AB |
1188 | case x"$fs" in |
1189 | x"zfs"*) | |
1190 | LSROUT=$(run_grubfstest ls -- -la "($GRUBDEVICE)/grub fs@/.");; | |
1191 | *) | |
1192 | LSROUT=$(run_grubfstest ls -- -la "($GRUBDEVICE)/.");; | |
1193 | esac | |
1194 | if echo "$LSROUT" | grep -F " $BASEFILE" | grep "$BLOCKCNT" > /dev/null; then | |
1195 | : | |
1196 | else | |
1197 | echo DOT IN ROOTDIR FAIL | |
1198 | echo "$LSROUT" | |
37865c2c | 1199 | TZ=UTC ls -l "$MNTPOINTRO" |
7af839a1 AB |
1200 | exit 1 |
1201 | fi | |
1202 | ||
1203 | case x"$fs" in | |
1204 | x"zfs"*) | |
333855c6 | 1205 | ;; |
7af839a1 | 1206 | *) |
333855c6 VS |
1207 | LSROUT=$(run_grubfstest ls -- -la "($GRUBDEVICE)/.."); |
1208 | if echo "$LSROUT" | grep -F " $BASEFILE" | grep "$BLOCKCNT" > /dev/null; then | |
1209 | : | |
1210 | else | |
1211 | echo DOTDOT IN ROOTDIR FAIL | |
1212 | echo "$LSROUT" | |
37865c2c | 1213 | TZ=UTC ls -l "$MNTPOINTRO" |
333855c6 VS |
1214 | exit 1 |
1215 | fi | |
1216 | ;; | |
7af839a1 | 1217 | esac |
7af839a1 | 1218 | |
7d44ff7d VS |
1219 | case x"$fs" in |
1220 | x"zfs"*) | |
1221 | LSROUT=$(run_grubfstest ls -- -l "($GRUBDEVICE)/grub fs@/////sdir");; | |
1222 | *) | |
1223 | LSROUT=$(run_grubfstest ls -- -l "($GRUBDEVICE)/////sdir");; | |
1224 | esac | |
1225 | if echo "$LSROUT" | grep -F " 2.img" | grep $BLOCKCNT > /dev/null; then | |
1226 | : | |
1227 | else | |
1228 | echo SLIST FAIL | |
1229 | echo "$LSROUT" | |
37865c2c | 1230 | TZ=UTC ls -l "$MNTPOINTRO/sdir" |
7d44ff7d VS |
1231 | exit 1 |
1232 | fi | |
1233 | ||
1234 | case x"$fs" in | |
1235 | x"zfs"*) | |
1236 | LSROUT=$(run_grubfstest ls -- -l "($GRUBDEVICE)/grub fs@/$PDIR");; | |
1237 | *) | |
1238 | LSROUT=$(run_grubfstest ls -- -l "($GRUBDEVICE)/$PDIR");; | |
1239 | esac | |
1240 | if echo "$LSROUT" | grep -F " p.img" | grep $BLOCKCNT > /dev/null; then | |
1241 | : | |
1242 | else | |
1243 | echo PLIST FAIL | |
1244 | echo "$LSROUT" | |
37865c2c | 1245 | TZ=UTC ls -l "$MNTPOINTRO/$PDIR" |
7d44ff7d VS |
1246 | exit 1 |
1247 | fi | |
1248 | ||
7af839a1 AB |
1249 | case x"$fs" in |
1250 | x"zfs"*) | |
1251 | LSROUT=$(run_grubfstest ls -- -l "($GRUBDEVICE)/grub fs@/sdir/.");; | |
1252 | *) | |
1253 | LSROUT=$(run_grubfstest ls -- -l "($GRUBDEVICE)/sdir/.");; | |
1254 | esac | |
1255 | if echo "$LSROUT" | grep -F " 2.img" | grep $BLOCKCNT > /dev/null; then | |
1256 | : | |
1257 | else | |
1258 | echo DOT IN SUBDIR FAIL | |
1259 | echo "$LSROUT" | |
37865c2c | 1260 | TZ=UTC ls -l "$MNTPOINTRO/$OSDIR/sdir" |
7af839a1 AB |
1261 | exit 1 |
1262 | fi | |
1263 | ||
1264 | case x"$fs" in | |
1265 | x"zfs"*) | |
1266 | LSROUT=$(run_grubfstest ls -- -l "($GRUBDEVICE)/grub fs@/sdir/../sdir");; | |
1267 | *) | |
1268 | LSROUT=$(run_grubfstest ls -- -l "($GRUBDEVICE)/sdir/../sdir");; | |
1269 | esac | |
1270 | if echo "$LSROUT" | grep -F " 2.img" | grep $BLOCKCNT > /dev/null; then | |
1271 | : | |
1272 | else | |
1273 | echo DOTDOT IN SUBDIR FAIL | |
1274 | echo "$LSROUT" | |
37865c2c | 1275 | TZ=UTC ls -l "$MNTPOINTRO/$OSDIR/ssdir" |
7af839a1 AB |
1276 | exit 1 |
1277 | fi | |
1278 | ||
7d44ff7d VS |
1279 | LSOUT=`run_grubfstest ls -- -l "($GRUBDEVICE)"` |
1280 | if [ x"$NOFSLABEL" = xy ]; then | |
1281 | : | |
1282 | elif echo "$LSOUT" | grep -F "Label \`$FSLABEL'" > /dev/null; then | |
1283 | : | |
1284 | else | |
1285 | echo LABEL FAIL | |
1286 | echo "$LSOUT" | |
1287 | blkid "${MOUNTDEVICE}" | |
1288 | exit 1 | |
1289 | fi | |
1290 | ||
1291 | # Inconsistencies between GRUB and blkid. | |
1292 | case x"$fs" in | |
1293 | x"iso9660" | x"ziso9660" | xrockridge | xjoliet | xrockridge_joliet | x"iso9660_1999" | xrockridge_1999 | xjoliet_1999 | xrockridge_joliet_1999) ;; | |
1294 | x"zfs"*) | |
37865c2c VS |
1295 | for lodev in $LODEVICES; do |
1296 | FSUUID=$(printf "%016x\n" $(blkid -o export "$lodev" |grep -F UUID=|sed s,UUID=,,g)) | |
7d44ff7d VS |
1297 | if [ "$FSUUID" != 0000000000000000 ]; then |
1298 | break; | |
1299 | fi | |
1300 | done;; | |
1301 | *) | |
1302 | FSUUID=`blkid -o export "${MOUNTDEVICE}" |grep -F UUID=|sed s,UUID=,,g` | |
1303 | ;; | |
1304 | esac | |
1305 | case x"$fs" in | |
1306 | x"hfs"*) | |
1307 | GRUBUUID="`run_grubfstest xnu_uuid "$GRUBDEVICE"`" | |
1308 | if [ x"$GRUBUUID" = x"$FSUUID" ]; then | |
1309 | : | |
1310 | else | |
1311 | echo UUID FAIL | |
1312 | echo "$LSOUT" | |
1313 | echo "$GRUBUUID" | |
37865c2c VS |
1314 | for lodev in $LODEVICES; do |
1315 | blkid "$lodev" | |
7d44ff7d VS |
1316 | done |
1317 | exit 1 | |
1318 | fi | |
1319 | ;; | |
1320 | # FS LIMITATION: romfs, cpio, tar, squash4, minix, AFS, old reiserfs and minix2 | |
1321 | # have no UUID. | |
1322 | # GRUB LIMITATION: use creation date for squash4, AFFS and SFS? | |
1323 | # GRUB LIMITATION: use tags serials on UDF? | |
1324 | # GRUB LIMITATION: use root ctime on cpio, tar, minix*, UDF, reiserfs_old? | |
1325 | # GRUB LIMITATION: Support Atari UUIDs | |
1326 | x"romfs" | x"cpio_"* | x"tarfs" | x"squash4_"* | x"minix" \ | |
1327 | | x"minix2" | x"minix3" | x"affs" | xaffs_intl \ | |
1328 | | x"udf" | xvfat12a | xvfat16a | xmsdos12a | xmsdos16a | xafs | xsfs* \ | |
1329 | | xreiserfs_old) | |
1330 | ;; | |
1331 | *) | |
1332 | if [ x"$FSUUID" = x ]; then | |
1333 | echo "Warning: blkid couldn't retrieve UUID" | |
1334 | elif echo "$LSOUT" | grep -F 'UUID '"$FSUUID"' ' > /dev/null; then | |
1335 | : | |
1336 | else | |
1337 | echo UUID FAIL | |
1338 | echo "$FSUUID" | |
1339 | echo "$LSOUT" | |
37865c2c | 1340 | blkid "${MOUNTDEVICE}" |
7d44ff7d VS |
1341 | exit 1 |
1342 | fi | |
1343 | ;; | |
1344 | esac | |
1345 | ||
6dec3a26 VS |
1346 | if [ x$NOFSTIME != xy ]; then |
1347 | case x$fs in | |
1348 | xiso9660 | xziso9660 | xrockridge | xjoliet | xrockridge_joliet | xiso9660_1999 | xrockridge_1999 | xjoliet_1999 | xrockridge_joliet_1999) | |
1349 | FSTIME="$(date -d "$(echo ${FSUUID} | awk -F - '{ print $1"-"$2"-"$3" "$4":"$5":"$6 ;}')" '+%Y-%m-%d %H:%M:%S')";; | |
1350 | xlvm*|xmdraid*) | |
1351 | # With some abstractions like mdraid flushing to disk | |
1352 | # may be delayed for a long time. | |
1353 | FSTIME="$UMOUNT_TIME";; | |
1354 | *) | |
1355 | FSTIME="$(TZ=UTC ls --time-style="+%Y-%m-%d_%H:%M:%S" -l -d "${FSIMAGEP}0.img"|awk '{print $6; }'|sed 's,_, ,g')";; | |
1356 | esac | |
1357 | # With some abstractions like mdraid computing of UMOUNT_TIME | |
1358 | # is not precise. Account for small difference here. | |
1359 | FSTIMEM1="$(date -d "$FSTIME UTC -1 second" -u "+%Y-%m-%d %H:%M:%S")" | |
1360 | FSTIMEM2="$(date -d "$FSTIME UTC -2 second" -u "+%Y-%m-%d %H:%M:%S")" | |
1361 | FSTIMEM3="$(date -d "$FSTIME UTC -3 second" -u "+%Y-%m-%d %H:%M:%S")" | |
7d44ff7d | 1362 | |
6dec3a26 VS |
1363 | if echo "$LSOUT" | grep -F 'Last modification time '"$FSTIME" > /dev/null || echo "$LSOUT" | grep -F 'Last modification time '"$FSTIMEM1" > /dev/null || echo "$LSOUT" | grep -F 'Last modification time '"$FSTIMEM2" || echo "$LSOUT" | grep -F 'Last modification time '"$FSTIMEM3" > /dev/null; then |
1364 | : | |
1365 | else | |
1366 | echo FSTIME FAIL | |
1367 | echo "$FSTIME" | |
1368 | echo "$LSOUT" | |
1369 | exit 1 | |
1370 | fi | |
7d44ff7d VS |
1371 | fi |
1372 | ||
1373 | if [ x$NOHARDLINK != xy ]; then | |
1374 | if run_grubfstest cmp "$GRUBDIR/$BASEHARD" "$MNTPOINTRO/$OSDIR/$BASEFILE" ; then | |
1375 | : | |
1376 | else | |
1377 | echo HARDLINK FAIL | |
1378 | exit 1 | |
1379 | fi | |
1380 | fi | |
1381 | ||
1382 | if [ x$NOSYMLINK != xy ]; then | |
1383 | if run_grubfstest cmp "$GRUBDIR/$BASESYM" "$MNTPOINTRO/$OSDIR/$BASEFILE" ; then | |
1384 | : | |
1385 | else | |
1386 | echo SYMLINK FAIL | |
1387 | exit 1 | |
1388 | fi | |
1389 | if run_grubfstest cmp "$GRUBDIR/$LONGSYM" "$MNTPOINTRO/$OSDIR/$LONGNAME" ; then | |
1390 | : | |
1391 | else | |
1392 | echo LONG SYMLINK FAIL | |
1393 | exit 1 | |
1394 | fi | |
1395 | if run_grubfstest cmp "$GRUBDIR/$ISYM" "$MNTPOINTRO/$OSDIR/$IFILE" ; then | |
1396 | : | |
1397 | else | |
1398 | echo INTL SYMLINK FAIL | |
1399 | exit 1 | |
1400 | fi | |
1401 | if run_grubfstest cmp "$GRUBDIR/$SSYM" "$MNTPOINTRO/$OSDIR/////sdir/////2.img" ; then | |
1402 | : | |
1403 | else | |
1404 | echo SDIR SYMLINK FAIL | |
1405 | exit 1 | |
1406 | fi | |
1407 | if run_grubfstest cmp "$GRUBDIR/$USYM" "$MNTPOINTRO/$OSDIR/1.img" ; then | |
1408 | : | |
1409 | else | |
1410 | echo SDIR SYMLINK FAIL | |
1411 | exit 1 | |
1412 | fi | |
1413 | if run_grubfstest cmp "$GRUBDIR/$PSYM" "$MNTPOINTRO/$OSDIR/${PDIR2}/$PFIL" ; then | |
1414 | : | |
1415 | else | |
1416 | echo PATH LONG SYMLINK FAIL | |
1417 | exit 1 | |
1418 | fi | |
1419 | fi | |
1420 | ||
1421 | if run_grubfstest cmp "$GRUBDIR/$BASEFILE" "$MNTPOINTRO/$OSDIR/$BASEFILE" ; then | |
1422 | : | |
1423 | else | |
1424 | echo READ FAIL | |
1425 | exit 1 | |
1426 | fi | |
1427 | if run_grubfstest cmp "$GRUBDIR/$NASTYFILE" "$MNTPOINTRO/$OSDIR/$NASTYFILE" ; then | |
1428 | : | |
1429 | else | |
1430 | echo NREAD FAIL | |
1431 | exit 1 | |
1432 | fi | |
1433 | # Reference archive contains original name | |
1434 | if run_grubfstest cmp "$GRUBDIR/$LONGNAME" "$MNTPOINTRO/$OSDIR/$LONGNAME" ; then | |
1435 | : | |
1436 | else | |
1437 | echo LONG NAME READ FAIL | |
1438 | exit 1 | |
1439 | fi | |
1440 | if run_grubfstest cmp "$GRUBDIR/////sdir/////2.img" "$MNTPOINTRO/$OSDIR/sdir/2.img" ; then | |
1441 | : | |
1442 | else | |
1443 | echo LONG NAME READ FAIL | |
1444 | exit 1 | |
1445 | fi | |
1446 | if run_grubfstest cmp "$GRUBDIR/$IFILE" "$MNTPOINTRO/$OSDIR/$IFILE" ; then | |
1447 | : | |
1448 | else | |
1449 | echo IREAD FAIL | |
1450 | exit 1 | |
1451 | fi | |
1452 | if run_grubfstest cmp "$GRUBDIR/$PDIR/$PFIL" "$MNTPOINTRO/$OSDIR/$PDIR/$PFIL" ; then | |
1453 | : | |
1454 | else | |
1455 | echo PREAD FAIL | |
1456 | echo cmp "$GRUBDIR/$PDIR/$PFIL" "$MNTPOINTRO/$OSDIR/$PDIR/$PFIL" | |
1457 | exit 1 | |
1458 | fi | |
1459 | ok=true | |
37865c2c VS |
1460 | if ! run_grubfstest cmp "$GRUBDIR/${CFILE}" "$MNTPOINTRO/$OSDIR/${CFILE}" ; then |
1461 | ok=false; | |
1462 | fi | |
7d44ff7d VS |
1463 | if test x$ok = xtrue; then |
1464 | : | |
1465 | else | |
1466 | echo CREAD FAIL | |
1467 | exit 1 | |
1468 | fi | |
1469 | ||
1470 | if [ x$CASESENS = xy ]; then | |
1471 | if run_grubfstest cmp "$GRUBDIR/CaSe" "$MNTPOINTRO/$OSDIR/CaSe" ; then | |
1472 | : | |
1473 | else | |
1474 | echo CASE1 READ FAIL | |
1475 | exit 1 | |
1476 | fi | |
1477 | if run_grubfstest cmp "$GRUBDIR/cAsE" "$MNTPOINTRO/$OSDIR/cAsE" ; then | |
1478 | : | |
1479 | else | |
1480 | exit 1 | |
1481 | fi | |
1482 | if cmp "$MNTPOINTRO/$OSDIR/cAsE" "$MNTPOINTRO/$OSDIR/CaSe" > /dev/null ; then | |
1483 | exit 1 | |
1484 | fi | |
1485 | if test x$ok = xtrue; then | |
1486 | : | |
1487 | else | |
1488 | echo CASE READ FAIL | |
1489 | exit 1 | |
1490 | fi | |
1491 | else | |
1492 | # OS LIMITATION: Linux make FAT (partially) case-sensitive... | |
1493 | # ISO9660 is generated and master doesn't change | |
1494 | case x$fs in | |
1495 | xiso9660 | xvfat*) | |
1496 | CASEX=CaSe;; | |
1497 | *) | |
1498 | CASEX=cAsE;; | |
1499 | esac | |
1500 | if run_grubfstest cmp "$GRUBDIR/CaSe" "$MNTPOINTRO/$OSDIR/${CASEX}" ; then | |
1501 | : | |
1502 | else | |
1503 | echo CASE1 READ FAIL | |
1504 | exit 1 | |
1505 | fi | |
1506 | if run_grubfstest cmp "$GRUBDIR/cAsE" "$MNTPOINTRO/$OSDIR/CaSe" ; then | |
1507 | : | |
1508 | else | |
1509 | echo CASE2 READ FAIL | |
1510 | exit 1 | |
1511 | fi | |
1512 | if ! cmp "$MNTPOINTRO/$OSDIR/CaSe" "$MNTPOINTRO/$OSDIR/${CASEX}" > /dev/null ; then | |
1513 | echo CASE CMP READ FAIL | |
1514 | exit 1 | |
1515 | fi | |
1516 | if test x$ok = xtrue; then | |
1517 | : | |
1518 | else | |
1519 | echo CASE READ FAIL | |
1520 | exit 1 | |
1521 | fi | |
1522 | fi | |
1523 | ||
1524 | case x"$fs" in | |
1525 | x"zfs"*) | |
1526 | while ! zpool export "$FSLABEL" ; do | |
1527 | sleep 1; | |
1528 | done | |
1529 | sleep 5;; | |
1530 | x"tarfs" | x"cpio_"* | xrockridge | xjoliet | xrockridge_joliet | x"ziso9660" | x"romfs" | x"squash4_"* | xiso9660 | xiso9660_1999 | xrockridge_1999 | xjoliet_1999 | xrockridge_joliet_1999) | |
1531 | rm -rf "$MNTPOINTRW";; | |
1532 | x"afs") | |
1533 | rm -rf "$MNTPOINTRO" | |
1534 | ;; | |
1535 | *) | |
1536 | sleep 1 | |
1537 | umount "$MNTPOINTRO" || true | |
1538 | umount "$MNTPOINTRW" || true | |
1539 | esac | |
1540 | sleep 1 | |
1541 | case x"$fs" in | |
1542 | xmdraid*) | |
1543 | mdadm --stop /dev/md/"${fs}_$NDEVICES" | |
1544 | sleep 1 | |
1545 | ;; | |
1546 | xlvm*) | |
1547 | vgchange -a n grub_test | |
1548 | sleep 1 | |
1549 | ;; | |
1550 | esac | |
37865c2c VS |
1551 | case x"$fs" in |
1552 | x"tarfs" | x"cpio_"* | x"iso9660" | xrockridge | xjoliet | xrockridge_joliet | x"ziso9660" | x"romfs" | x"squash4_"* | x"iso9660_1999" | xrockridge_1999 | xjoliet_1999 | xrockridge_joliet_1999) ;; | |
1553 | *) | |
1554 | for lodev in $LODEVICES; do | |
1555 | while ! losetup -d "$lodev"; do | |
7d44ff7d | 1556 | sleep 1 |
37865c2c VS |
1557 | done |
1558 | done;; | |
1559 | esac | |
1560 | for i in $(range 0 $((NDEVICES-1)) 1); do | |
1561 | rm "$FSIMAGEP${i}.img" | |
7d44ff7d VS |
1562 | done |
1563 | if [ x"$fs" = x"zfs" ]; then | |
1564 | rmdir "$MNTPOINTRW"/"grub fs" || true | |
1565 | rmdir "$MNTPOINTRO"/"grub fs" || true | |
1566 | fi | |
1567 | rm -rf "$MNTPOINTRW" || true | |
1568 | rm -rf "$MNTPOINTRO" || true | |
1569 | done | |
1570 | done | |
1571 | done | |
afa9dda3 | 1572 | rmdir "${tempdir}" |