1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558 |
- #!@BUILD_SHEBANG@
- set -e
- fs="$1"
- GRUBFSTEST="@builddir@/grub-fstest"
- tempdir=`mktemp -d "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1
- # This wrapper is to ease insertion of valgrind or time statistics
- run_it () {
- LC_ALL=C "$GRUBFSTEST" "$@"
- }
- range() {
- range_counter="$1"
- while test "$range_counter" -le "$2"; do
- echo "$range_counter"
- range_counter="$((range_counter + $3))"
- done
- }
- powrange() {
- range_counter="$1"
- while test "$range_counter" -le "$2"; do
- echo "$range_counter"
- range_counter="$((range_counter * 2))"
- done
- }
- run_grubfstest () {
- need_images=
- for i in $(range 0 $((NEED_IMAGES_N-1)) 1); do
- need_images="$need_images $FSIMAGEP${i}.img";
- done
- run_it -c $NEED_IMAGES_N $need_images "$@"
- }
- # OS LIMITATION: GNU/Linux has no AFS support, so we use a premade image and a reference tar file. I.a. no multiblocksize test
- MINLOGSECSIZE=9
- MAXLOGSECSIZE=9
- case x"$fs" in
- xntfs*)
- MINLOGSECSIZE=8
- MAXLOGSECSIZE=12;;
- xvfat*|xmsdos*)
- MINLOGSECSIZE=9
- # OS LIMITATION: It could go up to 32768 but Linux rejects sector sizes > 4096
- MAXLOGSECSIZE=12;;
- xext*)
- MINLOGSECSIZE=8
- MAXLOGSECSIZE=12;;
- xbtrfs*)
- MINLOGSECSIZE=8
- # OS LIMITATION: It could go up to 32768 but Linux rejects sector sizes > 4096
- MAXLOGSECSIZE=12;;
- xxfs)
- MINLOGSECSIZE=9
- # OS LIMITATION: GNU/Linux doesn't accept > 4096
- MAXLOGSECSIZE=12;;
- xxfs_crc)
- MINLOGSECSIZE=9
- # OS LIMITATION: GNU/Linux doesn't accept > 1024
- MAXLOGSECSIZE=10;;
- xzfs*)
- # OS LIMITATION: zfs-fuse hangs when creating zpool with sectors <=256B.
- MINLOGSECSIZE=9
- # OS LIMITATION: zfs-fuse fails with >= 32K sectors.
- # OS limitation: zfs-fuse always uses ashift=9 with loop devices
- MAXLOGSECSIZE=9;;
- esac
- for LOGSECSIZE in $(range "$MINLOGSECSIZE" "$MAXLOGSECSIZE" 1); do
- SECSIZE="$((1 << LOGSECSIZE))"
- MINBLKSIZE=512
- MAXBLKSIZE=512
- BLKSTEP=0
- case x"$fs" in
- xntfs*)
- MINBLKSIZE=$SECSIZE
- MAXBLKSIZE=65536
- if [ x"$SECSIZE" = x256 ]; then
- MINBLKSIZE=512
- MAXBLKSIZE=32768
- fi
- ;;
- xvfat* | xmsdos*)
- MINBLKSIZE=$SECSIZE
- MAXBLKSIZE=$((128*SECSIZE))
- ;;
- xexfat*)
- MINBLKSIZE=$SECSIZE
- # It could go further but it requires more and more space
- MAXBLKSIZE=8286208
- ;;
- xhfs)
- MINBLKSIZE=512
- # OS LIMITATION: should be 1048576 but linux hangs on unmnount with
- # >= 524288
- MAXBLKSIZE=262144
- ;;
- xhfsplus | xhfsplus_casesens | xhfsplus_wrap)
- MINBLKSIZE=512
- MAXBLKSIZE=1048576
- ;;
- xnilfs2)
- # nilfs2 supports blocksizes from 1024 to 4096
- # but non-4096 results in kernel oops in some cases,
- # avoid it.
- MINBLKSIZE=4096
- MAXBLKSIZE=4096
- ;;
- xsfs*)
- MINBLKSIZE=512
- MAXBLKSIZE=4096
- ;;
- xaffs | xaffs_intl)
- MINBLKSIZE=512
- MAXBLKSIZE=4096
- ;;
- xreiserfs*)
- MINBLKSIZE=512
- # OS LIMITATION: 8192 isn't supported.
- MAXBLKSIZE=4096
- ;;
- x"mdraid"*)
- MINBLKSIZE=4096
- # OS LIMITATION: Linux oopses with >=32768K
- MAXBLKSIZE=$((16384*1024))
- ;;
- x"lvm_raid1"* | x"lvm_raid4" | x"lvm_raid5" | x"lvm_raid6")
- # OS LIMITATION: Linux crashes with less than 16384
- MINBLKSIZE=16384
- # Could go further but what's the point?
- MAXBLKSIZE=$((65536*1024))
- ;;
- x"lvm_mirrorall")
- MINBLKSIZE=2048
- # Could go further but what's the point?
- MAXBLKSIZE=$((65536*1024))
- ;;
- x"lvm_mirror1")
- MINBLKSIZE=4096
- # Could go further but what's the point?
- MAXBLKSIZE=$((65536*1024))
- ;;
- x"lvm_stripe")
- MINBLKSIZE=4096
- # Could go further but what's the point?
- MAXBLKSIZE=$((65536*1024))
- ;;
- x"lvm"*)
- MINBLKSIZE=1024
- # Could go further but what's the point?
- MAXBLKSIZE=$((65536*1024))
- ;;
- xext*)
- MINBLKSIZE=1024
- if [ $MINBLKSIZE -lt $SECSIZE ]; then
- MINBLKSIZE=$SECSIZE
- fi
- MAXBLKSIZE=4096
- ;;
- xsquash*)
- MINBLKSIZE=4096
- MAXBLKSIZE=1048576;;
- xxfs)
- MINBLKSIZE=$SECSIZE
- # OS Limitation: GNU/Linux doesn't accept > 4096
- MAXBLKSIZE=4096;;
- xxfs_crc)
- # OS Limitation: GNU/Linux doesn't accept != 1024
- MINBLKSIZE=1024
- MAXBLKSIZE=1024;;
- xudf)
- MINBLKSIZE=1024
- MAXBLKSIZE=4096;;
- xbfs)
- MINBLKSIZE=1024
- MAXBLKSIZE=8192;;
- xufs*)
- MINBLKSIZE=4096
- # OS Limitation: Linux rejects 65536 blocks.
- MAXBLKSIZE=32768;;
- xminix3)
- # OS LIMITATION: Linux rejects non-power-of-two blocks.
- # OS LIMITATION: Linux rejects > 4096.
- MINBLKSIZE=1024
- MAXBLKSIZE=4096;;
- esac
- if test "$BLKSTEP" -eq 0; then
- blksizes="$(powrange "$MINBLKSIZE" "$MAXBLKSIZE")"
- else
- blksizes="$(range "$MINBLKSIZE" "$MAXBLKSIZE" "$BLKSTEP")"
- fi
- for BLKSIZE in $blksizes; do
- MAXDEVICES=1
- MINDEVICES=1
- export fs
- case x"$fs" in
- x"zfs_raidz" | x"zfs_stripe" | x"zfs_mirror" | xbtrfs_raid0 \
- | xbtrfs_raid1 | x"mdraid"*"_raid4" | x"mdraid"*"_raid5" \
- | x"mdraid"*"_linear" \
- | x"mdraid"*"_raid10" | xlvm_raid1* | xlvm_mirror1 | xlvm_mirrorall)
- MINDEVICES=2
- MAXDEVICES=7
- ;;
- xbtrfs_raid10)
- MINDEVICES=4
- MAXDEVICES=7
- ;;
- x"zfs_raidz2"| xlvm_raid5 | xlvm_raid4)
- MINDEVICES=3
- MAXDEVICES=7;;
- x"zfs_raidz3" | x"mdraid"*"_raid6")
- MINDEVICES=4
- MAXDEVICES=7;;
- xlvm_raid6)
- MINDEVICES=5
- MAXDEVICES=7;;
- x"mdraid"*"_raid0" | x"mdraid"*"_raid1" | x"lvm" | xlvm_stripe)
- MINDEVICES=1
- MAXDEVICES=7;;
- esac
- for NDEVICES in $(range "$MINDEVICES" "$MAXDEVICES" 1); do
- export NDEVICES
- unset FSIMAGEP
- FSIMAGEP="${tempdir}/${fs}_${SECSIZE}_${BLKSIZE}_${NDEVICES}_"
- export FSIMAGEP
- unset NEED_IMAGES;
- case x$fs in
- # RAID 1 has to work with even one device of the set.
- xzfs_mirror | x"mdraid"*"_raid1" | xlvm_mirrorall | xlvm_raid1all)
- NEED_IMAGES_N=1;;
- # Degrade raidz by removing 3 devices
- xzfs_raidz3)
- NEED_IMAGES_N=$((NDEVICES-3));;
- # Degrade raidz by removing 2 devices
- xzfs_raidz2 | x"mdraid"*"_raid6" | x"lvm_raid6")
- NEED_IMAGES_N=$((NDEVICES-2));;
- # Degrade raidz and btrfs RAID1 by removing one device
- xbtrfs_raid1 | xbtrfs_raid10 | xzfs_raidz | x"mdraid"*"_raid4" \
- | x"mdraid"*"_raid5" | x"mdraid"*"_raid10" | xlvm_mirror1 \
- | x"lvm_raid1" | x"lvm_raid4" | x"lvm_raid5")
- NEED_IMAGES_N=$((NDEVICES-1));;
- *)
- NEED_IMAGES_N=$NDEVICES;;
- esac
- export NEED_IMAGES_N
- MNTPOINTRO="${tempdir}/${fs}_ro"
- MNTPOINTRW="${tempdir}/${fs}_rw"
- MOUNTOPTS=""
- MOUNTFS="$fs"
- MASTER="${tempdir}/master"
- FSLABEL="grub_;/testé莭莽茝😁киритi urewfceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoifoirefoireoifoijfoirereoireoivoioirevoinvoinreoinvnoieoinreoinveoinveoinreoinvoineoinoinoineoinernoiveoinvreoiioewdioewoirvnoireoivfoirewfewoifoijewoijfoijewfoijfewoijoijoijoijoijoijoijfewceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoifoirefoireoifoijfoirereoireoivoioirevoinvoinreoinvnoieoinreoinveoinveoinreoinvoineoinoinoineoinernoiveoinvreoiioewdioewoirvnoireoivfoirewfewoifoijewoijfoijewfoijfewoijoijoijoijoijoijoijfewrewfceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoifoirefoireoifoijfoirereoireoivoioirevoinvoinreoinvnoieoinreoinveoinveoinreoinvoineoinoinoineoinernoiveoinvreoiioewdioewoirvnoireoivfoirewfewoifoijewoijfoijewfoijfewoijoijoijoijoijoijoijfewceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoifoirefoireoifoijfoirereoireoivoioirevoinvoinreoinvnoieoinreoinveoinveoinreoinvoineoinoinoineoinernoiveoinvreoiioewdioewoirvnoireoivfoirewfewoifoijewoijfoijewfoijfewoijoijoijoijoijoijoijfew"
- CFILESRC=
- 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
- if test -f "$cand" ; then
- CFILESRC="$cand"
- break
- fi
- done
- if test "$CFILESRC" = "" ; then
- echo "Couldn't find compressible file" >&2
- exit 1
- fi
- case x"$fs" in
- # FS LIMITATION: 8.3 names
- xmsdos*)
- CFILE="american.eng";;
- xiso9660)
- CFILE="american_english";;
- *)
- CFILE="american-english";;
- esac
- # OS LIMITATION: Limited by NAME_MAX (usually 255) in GNU/Linux
- LONGNAME="qwertzuiopasdfghjklyxcvbnm1234567890qwertzuiopasdfghjklyxcvbnm1234567890oiewqfiewioqoiqoiurqruewqoiuwoieoiiuewqroreqiufieiuwrnureweriuvceoiroiewqoiricdsalkcndsakfirefoiwqeoircorejwoijfreoijojoiewjfwnfcoirenfoirefnreoifenoiwfnoi"
- rm -rf "$MASTER"
- case x"$fs" in
- # FS LIMITATION: HFS+ label is at most 255 UTF-16 chars
- # OS LIMITATION: Linux HFS+ tools check UTF-8 length and don't
- # handle out-of-BMP characters
- x"hfsplus" | x"hfsplus_casesens" | x"hfsplus_wrap")
- FSLABEL="grub_;/testé䏌䐓䏕киритi urewfceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoifoiq"
- ;;
- # FS LIMITATION: btrfs label is at most 255 UTF-8 chars
- x"btrfs"*)
- FSLABEL="grub_;/testé莭莽😁киритi urewfceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoi";;
- # FS LIMITATION: exfat is at most 15 UTF-16 chars
- x"exfat")
- FSLABEL="géт ;/莭莽😁кир";;
- # FS LIMITATION: ntfs label is at most ?? UTF-16 chars
- x"ntfs"*)
- FSLABEL="grub_;/testéтi u莭😁茝кириrewfceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvniwnivrewiuvcrewvnuewvrrrewniureifiuewifjiww";;
- # FS LIMITATION: nilfs2 label is at most 80 UTF-8 characters
- x"nilfs2")
- FSLABEL="grub_;/testéтi u😁莽茝кириrewfceniuewruevrewnuuireurevueurnievrewfne";;
- # FS LIMITATION: afs and iso9660 label is at most 32 UTF-8 characters
- x"afs" | xiso9660 | xrockridge | xrockridge_joliet\
- | xiso9660_1999 | xrockridge_1999 | xrockridge_joliet_1999)
- FSLABEL="gr_;/é莭莽😁кирит u";;
- # FS LIMITATION: bfs label is at most 32 UTF-8 characters
- # OS LIMITATION: bfs label can't contain ; or /
- x"bfs")
- FSLABEL="grub_é莭莽😁кирит u";;
- # FS LIMITATION: Joliet label is at most 16 UTF-16 characters
- # OS LIMITATION: xorriso doesn't handle out-of-BMP characters
- xjoliet | xjoliet_1999)
- FSLABEL="g;/_é䏌䐓䏕䎛䎾䏴кит u"
- #FSLABEL="g;/_é莭莽😁кит u"
- ;;
- # FS LIMITATION: reiserfs, extN and jfs label is at most 16 UTF-8 characters
- x"reiserfs_old" | x"reiserfs" | x"ext"* | x"lvm"* | x"mdraid"* | x"jfs" | x"jfs_caseins")
- FSLABEL="g;/éт 莭😁";;
- # FS LIMITATION: No underscore, space, semicolon, slash or international characters in UFS* in label. Limited to 32 UTF-8 characters
- x"ufs1" | x"ufs1_sun" | x"ufs2")
- FSLABEL="grubtest""ieurrucnenreeiurueurewf";;
- # FS LIMITATION: XFS label is at most 12 UTF-8 characters
- x"xfs"|x"xfs_crc")
- FSLABEL="géт 😁к";;
- # FS LIMITATION: FAT labels limited to 11 characters, no international characters or lowercase
- x"vfat"* | xmsdos*)
- FSLABEL="GRUBTEST ;_";;
- # FS LIMITATION: AFFS is latin1. At most 29 characters
- x"affs" | xaffs_intl)
- FSLABEL="grub_tt? #*w;/e£@¡¤½¾{[]}<>.,";;
- # FS LIMITATION: SFS is latin1. At most 30 characters
- x"sfs"*)
- FSLABEL="GRUB tt öäüé;/àèç åø¿ª©þð׫»µ¬";;
- # FS LIMITATION: HFS is Mac-Roman. At most 27 characters
- x"hfs")
- FSLABEL="grub_t;/estéàèèéie fiucnree";;
- # FS LIMITATION: UDF label is either up to 127 latin1 characters or 63 UTF-16 ones
- # OS LIMITATION: Linux UDF tools force ASCII label ...
- x"udf")
- FSLABEL="grub_;/testurewfceniuewruevrewnuuireurevueurnievr";;
- # FS LIMITATION: ZFS doesn't accept non-ASCII in label
- # FIXME: since this is used as a path component for mount it's very limited in length
- xzfs_* | xzfs)
- FSLABEL="grub_testieufiue r";;
- esac
- case x"$fs" in
- xmdraid*)
- DISKSIZE=314572800;;
- xlvm*)
- LVMBLKMUL=$(((5800 * 1048576) / (8 * BLKSIZE * NDEVICES)))
- DISKSIZE=$((8*BLKSIZE*LVMBLKMUL));;
- # FS LIMITATION: some fs have disk size limit
- x"vfat12" | xmsdos12)
- DISKSIZE=$((4000*BLKSIZE));;
- x"vfat12a" | xmsdos12a)
- if [ $BLKSIZE -ge 2048 ]; then
- DISKSIZE=$((2500*BLKSIZE))
- else
- DISKSIZE=$((3000*BLKSIZE))
- fi
- if [ $DISKSIZE -gt $((60000*SECSIZE)) ]; then
- DISKSIZE=$((60000*SECSIZE))
- fi;;
- x"vfat16" | xmsdos16)
- DISKSIZE=$((65000*BLKSIZE));;
- x"vfat16a" | xmsdos16a)
- DISKSIZE=$((60000*SECSIZE))
- ;;
- *)
- DISKSIZE=10737418240;;
- esac
- if [ $DISKSIZE -ge $(((5800/NDEVICES)*1048576)) ]; then
- DISKSIZE=$(((5800/NDEVICES)*1048576))
- fi
- case x"$fs" in
- xvfat* | xmsdos* | xexfat* | xhfs | xhfsplus | xhfsplus_wrap | xaffs \
- | xaffs_intl | xjfs_caseins | xsfs_caseins \
- | xzfs_caseins | xiso9660)
- CASESENS=n;;
- *)
- CASESENS=y;;
- esac
- BIGBLOCKCNT=$((5000 * 1048576))
- case x"$fs" in
- # FS LIMITATION: small filesystems
- x"vfat12" | xmsdos12)
- if [ $BLKSIZE -le 4096 ]; then
- BIGBLOCKCNT=0
- elif [ $BLKSIZE = 8192 ]; then
- BIGBLOCKCNT=1500000
- else
- BIGBLOCKCNT=$((2000*BLKSIZE))
- fi
- ;;
- x"vfat12a" | xmsdos12a)
- if [ $BLKSIZE -le 4096 ] || [ $((128*SECSIZE)) = $BLKSIZE ]; then
- BIGBLOCKCNT=0
- else
- BIGBLOCKCNT=700000
- fi;;
- x"vfat16a" | xmsdos16a)
- if [ $((128*SECSIZE)) = $BLKSIZE ]; then
- BIGBLOCKCNT=0
- else
- BIGBLOCKCNT=$((2500*SECSIZE))
- fi
- ;;
- x"vfat16" | xmsdos16)
- BIGBLOCKCNT=$((25000 * BLKSIZE))
- if [ $BIGBLOCKCNT -gt 4294967295 ]; then
- BIGBLOCKCNT=4294967295
- fi
- ;;
- x"minix")
- BIGBLOCKCNT=30000000;;
- xexfat)
- # Big blocks waste really a lot of space.
- # Not much is left.
- if [ $BLKSIZE = 2097152 ]; then
- BIGBLOCKCNT=4500000000
- fi
- if [ $BLKSIZE = 4194304 ]; then
- BIGBLOCKCNT=3500000000
- fi
- ;;
- # FS LIMITATION: romfs image is limited to 4G.
- x"romfs")
- BIGBLOCKCNT=$((4000 * 1048576));;
- # FS LIMITATION: These FS have uint32 as file size field
- x"vfat"* | xmsdos* | x"cpio_crc" | x"cpio_newc" | x"cpio_bin" | x"cpio_hpbin" | xsfs*)
- BIGBLOCKCNT=4294967295;;
- # FS LIMITATION: These FS have int32 as file size field
- # FIXME: not so sure about AFFS
- # OS LIMITATION: minix2/minix3 could be formatted in a way to permit more.
- x"minix3" | x"minix2" | x"hfs"| x"affs" | xaffs_intl | xreiserfs_old | xext2_old)
- BIGBLOCKCNT=$((16#7fffffff));;
- # FS LIMITATION: redundant storage
- # We have only limited space. Mirroring multiplies it very effectively.
- xmdraid* | xlvm* | xzfs_mirror | xbtrfs_raid1)
- BIGBLOCKCNT=$((100 * 1048576));;
- # We already test the FS for big files separately. Save some time here.
- x"zfs_raid"* | x"zfs_stripe"* | x"zfs_mirror"* | x"btrfs_raid"*)
- BIGBLOCKCNT=$((100 * 1048576));;
- # OS LIMITATION: bfs_fuse bugs beyond that
- xbfs)
- BIGBLOCKCNT=$((800 * 1048576));;
- esac
- NOSYMLINK=n
- case x"$fs" in
- # FS LIMITATION: no symlinks on FAT, exFAT, HFS, plain ISO9660 and Joliet
- # OS LIMITATION: ntfs-3g creates interix symlinks which aren't real symlinks
- x"vfat"* | xmsdos* | x"hfs" | x"exfat" | x"ntfs"* \
- | xiso9660 | xjoliet| xiso9660_1999 | xjoliet_1999)
- NOSYMLINK=y;;
- esac
- NOHARDLINK=n
- case x"$fs" in
- # FS LIMITATION: no hardlinks on BFS, exfat, fat, hfs and SFS
- xbfs | xexfat | x"vfat"* | xmsdos* | xhfs | xsfs | xsfs_caseins)
- NOHARDLINK=y;;
- # GRUB LIMITATION: no hardlink support on newc and hfs+
- xcpio_crc | xcpio_newc | xhfsplus*)
- NOHARDLINK=y;;
- esac
- # FS LIMITATION: some filesystems limit file name size
- case x"$fs" in
- x"cpio_ustar")
- LONGNAME="`echo $LONGNAME |head -c 99`";;
- x"hfs")
- LONGNAME="`echo $LONGNAME |head -c 31`";;
- x"minix" | x"minix2" | x"affs" | xaffs_intl | xiso9660)
- LONGNAME="`echo $LONGNAME |head -c 30`";;
- x"sfs"*)
- LONGNAME="`echo $LONGNAME |head -c 105`";;
- x"minix3")
- LONGNAME="`echo $LONGNAME |head -c 60`";;
- x"udf")
- LONGNAME="`echo $LONGNAME |head -c 192`";;
- # GRUB LIMITATION: GRUB prefers Joliet over ISO9660:1999
- xjoliet | xjoliet_1999)
- LONGNAME="`echo $LONGNAME |head -c 103`";;
- xiso9660_1999)
- LONGNAME="`echo $LONGNAME |head -c 207`";;
- # FS LIMITATION: 8.3
- xmsdos*)
- LONGNAME="qwertzui.opa";;
- esac
- NOFILETIME=n
- NOFSTIME=n
- case x"$fs" in
- # FIXME: Not sure about BtrFS, NTFS, JFS, AFS, UDF and SFS. Check it.
- # FS LIMITATION: as far as I know those FS don't store their last modification date.
- x"jfs_caseins" | x"jfs" | x"xfs" | x"xfs_crc" | x"btrfs"* | x"reiserfs_old" | x"reiserfs" \
- | x"bfs" | x"afs" \
- | x"tarfs" | x"cpio_"* | x"minix" | x"minix2" \
- | x"minix3" | x"ntfs"* | x"udf" | x"sfs"*)
- NOFSTIME=y;;
- # OS LIMITATION: Linux doesn't update fstime.
- # OS LIMITATION: Linux apparently uses localtime instead of UTC
- xhfs)
- NOFILETIME=y; NOFSTIME=y;;
- # GRUB LIMITATION: FAT and exFAT use localtime. Unusable for GRUB
- x"vfat"* | x"msdos"* | x"exfat")
- NOFILETIME=y; NOFSTIME=y;;
- # FS LIMITATION: romfs has no timestamps.
- x"romfs")
- NOFILETIME=y; NOFSTIME=y;;
- esac
- NOFSLABEL=n
- case x"$fs" in
- # FS LIMITATION: these filesystems have no label.
- x"cpio_"* | x"tarfs" | x"squash4_"* | x"minix" | x"minix2" \
- | x"minix3" | xreiserfs_old)
- NOFSLABEL=y;;
- esac
- PDIRCOMPNUM=210
- PDIR2COMPNUM=210
- case x$fs in
- # OS LIMITATION: bfs_fuse bugs beyond that
- xbfs)
- PDIRCOMPNUM=10
- PDIR2COMPNUM=10;;
- # OS LIMITATION: Linux supports only inline symlinks
- xudf)
- if [ $BLKSIZE = 1024 ]; then
- PDIR2COMPNUM=113
- fi ;;
- # FS LIMITATION: at most 255 on path length
- # FS LIMITATION: at most 100 on symlink length
- xcpio_ustar)
- PDIRCOMPNUM=84
- PDIR2COMPNUM=30;;
- # OS LIMITATION: Linux supports only symlink at most one block long on reiserfs
- xreiserfs | xreiserfs_old)
- if [ $BLKSIZE = 512 ]; then
- PDIR2COMPNUM=114
- fi ;;
- # FS LIMITATION: SFS assumes that symlink
- # with header fit in one block.
- # FIXME: not sure about it.
- xsfs | xsfs_caseins)
- if [ $BLKSIZE = 512 ]; then
- PDIR2COMPNUM=147
- fi ;;
- # FS LIMITATION: AFFS assumes that symlink
- # with rather larger header fit in one block.
- # FIXME: not sure about it.
- xaffs | xaffs_intl)
- if [ $BLKSIZE = 512 ]; then
- PDIR2COMPNUM=97
- fi ;;
- esac
- PDIR=""
- # OS LIMITATION: Limited by PATH_MAX (usually 1024)
- for i in $(range 0 $((PDIRCOMPNUM-1)) 1); do
- PDIR="$PDIR/$i";
- if test $((i%3)) = 0; then
- PDIR="$PDIR/"
- fi
- done
- PDIR2=""
- # OS LIMITATION: Limited by PATH_MAX (usually 1024)
- for i in $(range 0 $((PDIR2COMPNUM-1)) 1); do
- PDIR2="${PDIR2}/$i";
- if test $((i%3)) = 0; then
- PDIR2="${PDIR2}/"
- fi
- done
- PFIL="p.img"
- unset LODEVICES
- GENERATED=n
- LODEVICES=
- MOUNTDEVICE=
-
- case x"$fs" in
- x"tarfs" | x"cpio_"*| x"ziso9660" | x"romfs" | x"squash4_"*\
- | x"iso9660" | xjoliet | xrockridge | xrockridge_joliet \
- | x"iso9660_1999" | xjoliet_1999 | xrockridge_1999 \
- | xrockridge_joliet_1999)
- MNTPOINTRW="$MASTER"
- MNTPOINTRO="$MASTER"
- GENERATED=y
- mkdir -p "$MASTER";;
- # No mkfs for GNU/Linux. Just unpack preformatted empty image
- *)
- mkdir -p "$MNTPOINTRW"
- mkdir -p "$MNTPOINTRO"
- for i in $(range 0 $((NDEVICES-1)) 1); do
- dd if=/dev/zero of="$FSIMAGEP${i}.img" count=1 bs=1 seek=$((DISKSIZE-1)) &> /dev/null
- LODEVICE="$(losetup -f)"
- LODEVICES="$LODEVICES $LODEVICE"
- losetup "$LODEVICE" "$FSIMAGEP${i}.img"
- if test "$i" = 0; then
- MOUNTDEVICE="$LODEVICE"
- fi
- done ;;
- esac
- case x"$fs" in
- x"afs")
- ;;
- x"btrfs")
- "mkfs.btrfs" -s $SECSIZE -L "$FSLABEL" "${MOUNTDEVICE}" ;;
- x"btrfs_zlib" | x"btrfs_lzo")
- "mkfs.btrfs" -s $SECSIZE -L "$FSLABEL" "${MOUNTDEVICE}"
- MOUNTOPTS="compress=${fs/btrfs_/},"
- MOUNTFS="btrfs"
- ;;
- x"btrfs_raid0")
- "mkfs.btrfs" -s $SECSIZE -d raid0 -m raid0 -L "$FSLABEL" $LODEVICES
- MOUNTFS="btrfs"
- ;;
- x"btrfs_raid1")
- "mkfs.btrfs" -s $SECSIZE -d raid1 -m raid1 -L "$FSLABEL" $LODEVICES
- MOUNTFS="btrfs"
- ;;
- x"btrfs_raid10")
- "mkfs.btrfs" -s $SECSIZE -d raid10 -m raid10 -L "$FSLABEL" $LODEVICES
- MOUNTFS="btrfs"
- ;;
- x"btrfs_single")
- "mkfs.btrfs" -s $SECSIZE -d single -L "$FSLABEL" $LODEVICES
- MOUNTFS="btrfs"
- ;;
- x"exfat")
- "mkfs.$fs" -s $((BLKSIZE/512)) -n "$FSLABEL" "${MOUNTDEVICE}"
- MOUNTOPTS="iocharset=utf8,"
- MOUNTFS="exfat-fuse";;
- x"minix")
- "mkfs.minix" "${MOUNTDEVICE}"
- ;;
- # mkfs.hfs and mkfs.hfsplus don't fill UUID.
- x"hfsplus")
- "mkfs.hfsplus" -b $BLKSIZE -v "$FSLABEL" "${MOUNTDEVICE}"
- dd if=/dev/urandom of="${MOUNTDEVICE}" bs=1 seek=$((16#468)) conv=notrunc count=8 ;;
- x"hfsplus_wrap")
- "mkfs.hfsplus" -w -b $BLKSIZE -v "$FSLABEL" "${MOUNTDEVICE}"
- dd if=/dev/urandom of="${MOUNTDEVICE}" bs=1 seek=$((16#468)) conv=notrunc count=8
- MOUNTFS="hfsplus";;
- x"hfsplus_casesens")
- "mkfs.hfsplus" -s -b $BLKSIZE -v "$FSLABEL" "${MOUNTDEVICE}"
- dd if=/dev/urandom of="${MOUNTDEVICE}" bs=1 seek=$((16#468)) conv=notrunc count=8
- MOUNTFS="hfsplus";;
- x"hfs")
- "mkfs.hfs" -b $BLKSIZE -v "`echo $FSLABEL |recode utf8..macroman`" -h "${MOUNTDEVICE}"
- dd if=/dev/urandom of="${MOUNTDEVICE}" bs=1 seek=$((16#474)) conv=notrunc count=8
- MOUNTOPTS="iocharset=utf8,codepage=macroman,"
- ;;
- x"vfat"*|xmsdos*)
- BITS="${fs/vfat/}"
- BITS="${BITS/msdos/}"
- if [ "x${BITS:2:1}" = xa ]; then
- A=-A
- else
- A=
- fi
- "mkfs.vfat" -a $A -S $SECSIZE -s $((BLKSIZE/SECSIZE)) -F "${BITS:0:2}" -n "$FSLABEL" "${MOUNTDEVICE}"
- MOUNTOPTS="iocharset=utf8,codepage=437,"
- MOUNTFS="$(echo "$fs"|sed 's,[0-9]*a\?$,,')";;
- x"minix2")
- "mkfs.minix" -v "${MOUNTDEVICE}"
- MOUNTFS="minix";;
- x"minix3")
- "mkfs.minix" -B $BLKSIZE -3 "${MOUNTDEVICE}"
- MOUNTFS="minix";;
- x"ntfs"*)
- "mkfs.ntfs" -s "$SECSIZE" -c "$BLKSIZE" -L "$FSLABEL" -Q -q "${MOUNTDEVICE}"
- MOUNTOPTS="iocharset=utf8,compression,"
- MOUNTFS="ntfs-3g";;
- x"udf")
- "mkudffs" --utf8 -b $BLKSIZE --lvid="$FSLABEL" "${MOUNTDEVICE}"
- MOUNTOPTS="iocharset=utf8,bs=$BLKSIZE,";;
- x"ufs2")
- "mkfs.ufs" -b $BLKSIZE -L "$FSLABEL" -O 2 "${MOUNTDEVICE}"
- MOUNTOPTS="ufstype=ufs2,"
- MOUNTFS="ufs";;
- x"ufs1")
- "mkfs.ufs" -b $BLKSIZE -L "$FSLABEL" -O 1 "${MOUNTDEVICE}"
- MOUNTOPTS="ufstype=44bsd,"
- MOUNTFS="ufs";;
- x"ufs1_sun")
- "mkfs.ufs" -b $BLKSIZE -L "$FSLABEL" -O 1 "${MOUNTDEVICE}"
- MOUNTOPTS="ufstype=sun,"
- MOUNTFS="ufs";;
- x"zfs")
- "zpool" create -R "$MNTPOINTRW" "$FSLABEL" "${MOUNTDEVICE}"
- sleep 1
- "zfs" create "$FSLABEL"/"grub fs"
- sleep 1;;
- x"zfs_caseins")
- "zpool" create -R "$MNTPOINTRW" "$FSLABEL" "${MOUNTDEVICE}"
- sleep 1
- "zfs" create -o casesensitivity=insensitive "$FSLABEL"/"grub fs"
- sleep 1;;
- x"zfs_lzjb" | xzfs_gzip | xzfs_zle)
- "zpool" create -O compression=${fs/zfs_/} -R "$MNTPOINTRW" "$FSLABEL" "${MOUNTDEVICE}"
- sleep 1
- "zfs" create -o compression=${fs/zfs_/} "$FSLABEL"/"grub fs"
- sleep 1;;
- x"zfs_raidz")
- "zpool" create -R "$MNTPOINTRW" "$FSLABEL" raidz1 $LODEVICES
- sleep 1
- "zfs" create "$FSLABEL"/"grub fs"
- sleep 1;;
- x"zfs_raidz2")
- "zpool" create -R "$MNTPOINTRW" "$FSLABEL" raidz2 $LODEVICES
- sleep 1
- "zfs" create "$FSLABEL"/"grub fs"
- sleep 1;;
- x"zfs_raidz3")
- "zpool" create -R "$MNTPOINTRW" "$FSLABEL" raidz3 $LODEVICES
- sleep 1
- "zfs" create "$FSLABEL"/"grub fs"
- sleep 1;;
- x"zfs_mirror")
- "zpool" create -R "$MNTPOINTRW" "$FSLABEL" mirror $LODEVICES
- sleep 1
- "zfs" create "$FSLABEL"/"grub fs"
- sleep 1;;
- x"zfs_stripe")
- "zpool" create -R "$MNTPOINTRW" "$FSLABEL" $LODEVICES
- sleep 1
- "zfs" create "$FSLABEL"/"grub fs"
- sleep 1;;
- 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_"*)
- INSTDEVICE=/dev/null;;
- x"reiserfs")
- "mkfs.reiserfs" --format=3.6 -b $BLKSIZE -l "$FSLABEL" -q "${MOUNTDEVICE}" ;;
- x"reiserfs_old")
- "mkfs.reiserfs" --format=3.5 -b $BLKSIZE -l "$FSLABEL" -q "${MOUNTDEVICE}"
- MOUNTFS=reiserfs;;
- x"jfs")
- "mkfs.jfs" -L "$FSLABEL" -q "${MOUNTDEVICE}"
- MOUNTOPTS="iocharset=utf8,";;
- x"jfs_caseins")
- "mkfs.jfs" -O -L "$FSLABEL" -q "${MOUNTDEVICE}"
- MOUNTFS=jfs
- MOUNTOPTS="iocharset=utf8,";;
- x"mdraid"*)
- mdadm -C --chunk=$((BLKSIZE/1024)) --force -e "${fs:6:1}.${fs:7:1}" "/dev/md/${fs}_${NDEVICES}" --level="${fs:13}" --raid-devices="$NDEVICES" $LODEVICES
- MOUNTDEVICE="/dev/md/${fs}_${NDEVICES}"
- MOUNTFS=ext2
- "mkfs.ext2" -L "$FSLABEL" -q "${MOUNTDEVICE}" ;;
- x"lvm"*)
- for lodev in $LODEVICES; do
- pvcreate "$lodev"
- done
- vgcreate -s $((BLKSIZE/1024))K grub_test $LODEVICES
- if [ x$fs = xlvm ] ; then
- lvcreate -l "$((NDEVICES*7*LVMBLKMUL))" -n testvol grub_test
- elif [ x$fs = xlvm_stripe ] ; then
- lvcreate -l "$((NDEVICES*7*LVMBLKMUL))" -i "$NDEVICES" -n testvol grub_test
- elif [ x$fs = xlvm_mirror1 ] || [ x$fs = xlvm_raid1 ] ; then
- lvcreate -m 1 -l "$((NDEVICES*2*LVMBLKMUL))" --type "${fs/lvm_/}" -n testvol grub_test
- elif [ x$fs = xlvm_mirrorall ] ; then
- lvcreate -m "$((NDEVICES-1))" -l "$((6*LVMBLKMUL))" --type mirror -n testvol grub_test
- elif [ x$fs = xlvm_raid1all ] ; then
- # Until version 2.02.103 LVM counts metadata segments
- # twice when checking available space. Reduce segment
- # count to work around it.
- lvcreate -m "$((NDEVICES-1))" -l "$((6*LVMBLKMUL - 1))" --type raid1 -n testvol grub_test
- elif [ x$fs = xlvm_raid4 ] || [ x$fs = xlvm_raid5 ]; then
- lvcreate -l "$(((NDEVICES-1) * 5*LVMBLKMUL))" -i "$((NDEVICES-1))" --type "${fs/lvm_/}" -n testvol grub_test
- elif [ x$fs = xlvm_raid6 ]; then
- lvcreate -l "$(((NDEVICES-2) * 5*LVMBLKMUL))" -i "$((NDEVICES-2))" --type "${fs/lvm_/}" -n testvol grub_test
- fi
- MOUNTDEVICE="/dev/mapper/grub_test-testvol"
- MOUNTFS=ext2
- "mkfs.ext2" -L "$FSLABEL" -q "${MOUNTDEVICE}" ;;
- xnilfs2)
- "mkfs.nilfs2" -L "$FSLABEL" -b $BLKSIZE -q "${MOUNTDEVICE}" ;;
- xext2_old)
- MKE2FS_DEVICE_SECTSIZE=$SECSIZE "mkfs.ext2" -r 0 -b $BLKSIZE -L "$FSLABEL" -q "${MOUNTDEVICE}"
- MOUNTFS=ext2
- ;;
- xext4_metabg)
- MKE2FS_DEVICE_SECTSIZE=$SECSIZE "mkfs.ext4" -O meta_bg,^resize_inode -b $BLKSIZE -L "$FSLABEL" -q "${MOUNTDEVICE}"
- MOUNTFS=ext4
- ;;
- xext*)
- MKE2FS_DEVICE_SECTSIZE=$SECSIZE "mkfs.$fs" -b $BLKSIZE -L "$FSLABEL" -q "${MOUNTDEVICE}" ;;
- xxfs)
- "mkfs.xfs" -m crc=0 -b size=$BLKSIZE -s size=$SECSIZE -L "$FSLABEL" -q "${MOUNTDEVICE}" ;;
- xxfs_crc)
- MOUNTFS="xfs"
- "mkfs.xfs" -m crc=1 -b size=$BLKSIZE -s size=$SECSIZE -L "$FSLABEL" -q "${MOUNTDEVICE}" ;;
- *)
- echo "Add appropriate mkfs command here"
- exit 1
- ;;
- esac
- BASEFILE="1.img"
- NASTYFILE=".?*\\!\"#%@\$%&'()+ ,-.:;<=>^{_}[]\`|~."
- case x"$fs" in
- # FS LIMITATION: AFFS and SFS don't accept :
- xsfs*)
- NASTYFILE=".?*\\!\"#%@\$%&'()+ ,-.;<=>^{_}[]\`|~.";;
- # FS LIMITATION: AFFS is limited in file name length (30)
- x"affs" | xaffs_intl)
- NASTYFILE=".?*\\!\"#@\$'()+ ,-;<=>^{_}[]\`|~.";;
- # FS LIMITATION: hfs, minix and minix2 are limited in file name length (30 or 31)
- x"hfs" | x"minix" | x"minix2")
- NASTYFILE=".?*\\!\"#@\$&'()+ ,-:;<=>{}[]\`|~.";;
- # FS LIMITATION: FAT doesn't accept ?, *, \, ", :, <, >, |
- # FS LIMITATION: FAT discards dots at the end.
- x"vfat"* | x"exfat")
- NASTYFILE=".!#%@\$%&'()+ ,-.;=^{_}[]\`~";;
- # FS LIMITATION: 8.3 limitations apply
- x"msdos"*)
- NASTYFILE="!#%@\$%&.;=^";;
- # FS LIMITATION: No ' ', '*', '/', ':', ';', '?', '\\' in joliet
- # GRUB LIMITATION: GRUB prefers Joliet over ISO9660:1999
- xjoliet | xjoliet_1999)
- NASTYFILE=".!\"#%@\$%&'()+,-.<=>^{_}[]\`|~.";;
- # FS LIMITATION: iso9660 accepts only [0-9A-Z_]*, 32 characters at most
- xiso9660)
- NASTYFILE="0123456789_acefghijknopqrvwxyz";;
- esac
- case x"$fs" in
- # FS LIMITATION: HFS, AFFS and SFS use legacy codepage (mac-roman or latin1)
- x"sfs"* | x"hfs" | x"affs" | xaffs_intl)
- IFILE="éàèüöäëñ"
- ISYM="ëñéüöäàè"
- ;;
- # FS LIMITATION: filename length limitation.
- x"minix" | x"minix2")
- IFILE="éàèüö😁ñкиΕλκά"
- ISYM="Ελκάкиéà😁öäëñ"
- ;;
- xminix3)
- IFILE="éàèüöäëñкирица莭茝Ελλικά😁😜😒"
- ISYM="Ελλικά😁😜😒莭茝кирицаéàèüöäëñ";;
- # GRUB LIMITATION: HFS+ uses NFD. GRUB doesn't handle NF conversion.
- # OS LIMITATION: Linux doesn't handle out-of-BMP characters for UTF-16
- x"hfsplus" | x"hfsplus_casesens" | x"hfsplus_wrap")
- IFILE="éàèüöäëñкирилица䏌䐓䏕Ελληνικα̍䏌䐓䏕"
- ISYM="Ελληνικα̍кирилица䏌䐓䏕éàèüöäëñ䏌䐓䏕"
- ;;
- # GRUB LIMITATION: On case-insensitive ZFS isn't supported with non-uppercase characters
- xzfs_caseins)
- IFILE="ÉÀÈÜÖÄËÑКИРИЛИЦА莭莽茝ΕΛΛΗΝΙΚΆ😁😜😒"
- ISYM="ΕΛΛΗΝΙΚΆКИРИЛИЦА😁😜😒ÉÀÈÜÖÄËÑ莭莽茝";;
- # FS LIMITATION: 8.3 CP437
- x"msdos"*)
- IFILE="éàèüöäëñ.éàè"
- ;;
- # FS LIMITATION: iso9660 is ASCII-only.
- x"iso9660")
- IFILE="abcdefghijkmmnop"
- ;;
- # OS LIMITATION: Linux doesn't handle out-of-BMP characters for UTF-16
- # OS LIMITATION: xorriso doesn't handle out-of-BMP characters
- xjoliet | xjoliet_1999 | x"vfat"* | x"jfs"* | x"udf"*)
- IFILE="éàèüöäëñкирилица䏌䐓䏕Ελληνικά䏌䐓䏕"
- ISYM="Ελληνικάкирилица䏌䐓䏕éàèüöäëñ䏌䐓䏕";;
- *)
- IFILE="éàèüöäëñкирилица莭莽茝Ελληνικά😁😜😒"
- ISYM="Ελληνικάкирилица😁😜😒éàèüöäëñ莭莽茝";;
- esac
- BIGFILE="big.img"
- BASESYM="sym"
- BASEHARD="hard"
- SSYM="///sdir////ssym"
- USYM="///sdir////usym"
- LONGSYM="longsym"
- PSYM="psym"
- OSDIR=""
- GRUBDEVICE=loop0
- case x"$fs" in
- xmdraid*)
- GRUBDEVICE="mduuid/`mdadm --detail --export $MOUNTDEVICE | grep MD_UUID=|sed 's,MD_UUID=,,g;s,:,,g'`";;
- xlvm*)
- GRUBDEVICE="lvm/grub_test-testvol";;
- esac
- GRUBDIR="($GRUBDEVICE)"
- case x"$fs" in
- x"zfs"*)
- OSDIR="grub fs/"
- GRUBDIR="($GRUBDEVICE)/grub fs@";;
- 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)
- ;;
- *)
- if ! mount -t "$MOUNTFS" "${MOUNTDEVICE}" "$MNTPOINTRW" -o ${MOUNTOPTS}${SELINUXOPTS}rw ; then
- echo "MOUNT FAILED."
- for lodev in $LODEVICES; do
- while ! losetup -d "$lodev"; do
- sleep 1
- done
- done
- for i in $(range 0 $((NDEVICES-1)) 1); do
- rm "$FSIMAGEP${i}.img"
- done
- exit 1;
- fi
- ;;
- esac
- case x"$fs" in
- # FS LIMITATION: redundant storage
- xmdraid* | xlvm*)
- BLOCKCNT=1048576;;
- x"zfs_raid"* | x"zfs_stripe"* | x"zfs_mirror"* | x"btrfs_raid"*)
- BLOCKCNT=1048576;;
- # FS LIMITATION: small filesystems
- x"vfat16a" | x"msdos16a")
- BLOCKCNT=65536;;
- x"vfat12a" | xmsdos12a)
- BLOCKCNT=32768;;
- xminix)
- BLOCKCNT=2621440;;
- xvfat16 | xmsdos16)
- if [ $BLKSIZE = 512 ] || [ $BLKSIZE = 1024 ]; then
- BLOCKCNT=1048576
- else
- BLOCKCNT=5242880
- fi
- ;;
- xvfat12 | xmsdos12)
- BLOCKCNT=$((100*BLKSIZE))
- if [ $BLOCKCNT -gt 5242880 ]; then
- BLOCKCNT=5242880;
- fi
- ;;
- *)
- BLOCKCNT=5242880;;
- esac
- # Make sure file is not exact multiple of block size. This helps to force
- # tail packing in case of squash4.
- : $((BLOCKCNT--))
- case x"$fs" in
- x"ntfscomp")
- setfattr -h -v 0x00000800 -n system.ntfs_attrib_be "$MNTPOINTRW/$OSDIR";;
- esac
- # OS LIMITATION: No AFS support under GNU/Linux
- mkdir "$MNTPOINTRW/$OSDIR/sdir"
- mkdir -p "$MNTPOINTRW/$OSDIR/$PDIR"
- "@builddir@"/garbage-gen $BLOCKCNT > "$MNTPOINTRW/$OSDIR/sdir/2.img"
- "@builddir@"/garbage-gen $BLOCKCNT > "$MNTPOINTRW/$OSDIR/$BASEFILE"
- "@builddir@"/garbage-gen $BLOCKCNT > "$MNTPOINTRW/$OSDIR/$NASTYFILE"
- "@builddir@"/garbage-gen $BLOCKCNT > "$MNTPOINTRW/$OSDIR/$IFILE"
- "@builddir@"/garbage-gen $BLOCKCNT > "$MNTPOINTRW/$OSDIR/$LONGNAME"
- "@builddir@"/garbage-gen $BLOCKCNT > "$MNTPOINTRW/$OSDIR/$PDIR/$PFIL"
- if [ $PDIR != $PDIR2 ]; then
- "@builddir@"/garbage-gen $BLOCKCNT > "$MNTPOINTRW/$OSDIR/${PDIR2}/$PFIL"
- fi
- "@builddir@"/garbage-gen $BLOCKCNT > "$MNTPOINTRW/$OSDIR/CaSe"
- if [ x$CASESENS = xy ]; then
- "@builddir@"/garbage-gen $BLOCKCNT > "$MNTPOINTRW/$OSDIR/cAsE"
- fi
- if (test x$fs = xvfat12a || test x$fs = xmsdos12a) && test x$BLKSIZE = x131072; then
- # With this config there isn't enough space for full copy.
- # Copy as much as we can
- cp "${CFILESRC}" "$MNTPOINTRW/$OSDIR/${CFILE}" &> /dev/null;
- else
- cp "${CFILESRC}" "$MNTPOINTRW/$OSDIR/${CFILE}";
- fi
- if [ x$NOSYMLINK != xy ]; then
- ln -s "$BASEFILE" "$MNTPOINTRW/$OSDIR/$BASESYM"
- ln -s "2.img" "$MNTPOINTRW/$OSDIR/$SSYM"
- ln -s "../1.img" "$MNTPOINTRW/$OSDIR/$USYM"
- ln -s "$LONGNAME" "$MNTPOINTRW/$OSDIR/$LONGSYM"
- ln -s "${PDIR2}/$PFIL" "$MNTPOINTRW/$OSDIR/$PSYM"
- ln -s "$IFILE" "$MNTPOINTRW/$OSDIR/$ISYM"
- fi
- if [ x$NOHARDLINK != xy ]; then
- ln "$MNTPOINTRW/$OSDIR/$BASEFILE" "$MNTPOINTRW/$OSDIR/$BASEHARD"
- fi
- case x"$fs" in
- x"afs")
- ;;
- x"zfs"*)
- while ! zpool export "$FSLABEL" ; do
- sleep 1;
- done
- sleep 2
- ;;
- x"tarfs")
- (cd "$MASTER"; tar cf "${FSIMAGEP}0.img" .) ;;
- x"cpio_"*)
- (cd "$MASTER"; find . | cpio -o -H "$(echo ${fs} | sed 's@^cpio_@@')" > "${FSIMAGEP}0.img" ) ;;
- x"ziso9660")
- FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00);
- 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" ;;
- x"iso9660")
- FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00);
- 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" ;;
- x"joliet")
- FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00);
- 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" ;;
- x"rockridge")
- FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00);
- 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" ;;
- x"rockridge_joliet")
- FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00);
- 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" ;;
- x"iso9660_1999")
- FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00);
- 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" ;;
- x"joliet_1999")
- FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00);
- 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" ;;
- x"rockridge_1999")
- FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00);
- 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" ;;
- x"rockridge_joliet_1999")
- FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00);
- 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" ;;
- x"romfs")
- genromfs -V "$FSLABEL" -f "${FSIMAGEP}0.img" -d "$MASTER" ;;
- xsquash4_*)
- echo mksquashfs "$MASTER" "${FSIMAGEP}0.img" -always-use-fragments -comp "${fs/squash4_/}" -b $BLKSIZE
- mksquashfs "$MASTER" "${FSIMAGEP}0.img" -always-use-fragments -comp "${fs/squash4_/}" -b $BLKSIZE ;;
- x"bfs")
- sleep 1
- fusermount -u "$MNTPOINTRW"
- ;;
- xlvm*)
- sleep 1
- for try in $(range 0 20 1); do
- if umount "$MNTPOINTRW" ; then
- break;
- fi
- sleep 1;
- done
- UMOUNT_TIME=$(date -u "+%Y-%m-%d %H:%M:%S")
- sleep 1
- vgchange -a n grub_test
- ;;
- xmdraid*)
- sleep 1
- for try in $(range 0 20 1); do
- if umount "$MNTPOINTRW" ; then
- break;
- fi
- sleep 1;
- done
- UMOUNT_TIME=$(date -u "+%Y-%m-%d %H:%M:%S")
- sleep 1
- mdadm --stop /dev/md/"${fs}_$NDEVICES"
- ;;
- *)
- sleep 1
- for try in $(range 0 20 1); do
- if umount "$MNTPOINTRW" ; then
- break;
- fi
- sleep 1;
- done
- ;;
- esac
- sleep 1
- case x"$fs" in
- x"zfs"*)
- "zpool" import -d /dev -R "$MNTPOINTRO" "$FSLABEL"
- ;;
- x"tarfs")
- ;;
- x"cpio_"*)
- ;;
- x"ziso9660")
- ;;
- xiso9660 | xrockridge | xjoliet | xrockridge_joliet)
- ;;
- xiso9660_1999 | xrockridge_1999 | xjoliet_1999 | xrockridge_joliet_1999)
- ;;
- x"romfs")
- ;;
- xsquash4_*)
- ;;
- xlvm*)
- vgchange -a y grub_test
- sleep 1
- mount -t "$MOUNTFS" "${MOUNTDEVICE}" "$MNTPOINTRO" -o ${MOUNTOPTS}${SELINUXOPTS}ro ;;
- xmdraid*)
- mdadm --assemble /dev/md/"${fs}_$NDEVICES" $LODEVICES
- sleep 1
- mount -t "$MOUNTFS" "${MOUNTDEVICE}" "$MNTPOINTRO" -o ${MOUNTOPTS}${SELINUXOPTS}ro ;;
- *)
- mount -t "$MOUNTFS" "${MOUNTDEVICE}" "$MNTPOINTRO" -o ${MOUNTOPTS}${SELINUXOPTS}ro ;;
- esac
- run_grubfstest ls -- -la
- case x"$fs" in
- x"zfs"*)
- LSROUT=$(run_grubfstest ls -- -la "($GRUBDEVICE)/grub fs@/");;
- *)
- LSROUT=$(run_grubfstest ls -- -la "($GRUBDEVICE)/");;
- esac
- if echo "$LSROUT" | grep -F " $BASEFILE" | grep "$BLOCKCNT" > /dev/null; then
- :
- else
- echo LIST FAIL
- echo "$LSROUT"
- TZ=UTC ls -l "$MNTPOINTRO"
- exit 1
- fi
- if echo "$LSROUT" | grep -F " $NASTYFILE" | grep "$BLOCKCNT"> /dev/null; then
- :
- else
- echo NLIST FAIL
- echo "$LSROUT"
- TZ=UTC ls -lA "$MNTPOINTRO"
- exit 1
- fi
- if echo "$LSROUT" | grep -F " $IFILE" | grep "$BLOCKCNT"> /dev/null; then
- :
- else
- echo ILIST FAIL
- echo "$LSROUT"
- TZ=UTC ls -l "$MNTPOINTRO"
- exit 1
- fi
- if echo "$LSROUT" | grep -F " $LONGNAME" | grep "$BLOCKCNT"> /dev/null; then
- :
- else
- echo LONG LIST FAIL
- echo "$LSROUT"
- TZ=UTC ls -l "$MNTPOINTRO"
- exit 1
- fi
- if [ x$NOFILETIME != xy ]; then
- filtime=$(TZ=UTC ls --time-style=+%Y%m%d%H%M%S -l -d "$MNTPOINTRO/$OSDIR/$BASEFILE"|awk '{print $6; }')
- if echo "$LSROUT" | grep -F "$filtime $BASEFILE" > /dev/null; then
- :
- else
- echo TIME FAIL
- echo "$LSROUT"
- TZ=UTC ls -l "$MNTPOINTRO"
- exit 1
- fi
- filtime=$(TZ=UTC ls --time-style=+%Y%m%d%H%M%S -l -d "$MNTPOINTRO/$OSDIR/$LONGNAME"|awk '{print $6; }')
- if echo "$LSROUT" | grep -F "$filtime $LONGNAME" > /dev/null; then
- :
- else
- echo LONG TIME FAIL
- echo "$LSROUT"
- TZ=UTC ls -l "$MNTPOINTRO"
- exit 1
- fi
- fi
- case x"$fs" in
- x"zfs"*)
- LSROUT=$(run_grubfstest ls -- -la "($GRUBDEVICE)/grub fs@/.");;
- *)
- LSROUT=$(run_grubfstest ls -- -la "($GRUBDEVICE)/.");;
- esac
- if echo "$LSROUT" | grep -F " $BASEFILE" | grep "$BLOCKCNT" > /dev/null; then
- :
- else
- echo DOT IN ROOTDIR FAIL
- echo "$LSROUT"
- TZ=UTC ls -l "$MNTPOINTRO"
- exit 1
- fi
- case x"$fs" in
- x"zfs"*)
- ;;
- *)
- LSROUT=$(run_grubfstest ls -- -la "($GRUBDEVICE)/..");
- if echo "$LSROUT" | grep -F " $BASEFILE" | grep "$BLOCKCNT" > /dev/null; then
- :
- else
- echo DOTDOT IN ROOTDIR FAIL
- echo "$LSROUT"
- TZ=UTC ls -l "$MNTPOINTRO"
- exit 1
- fi
- ;;
- esac
- case x"$fs" in
- x"zfs"*)
- LSROUT=$(run_grubfstest ls -- -l "($GRUBDEVICE)/grub fs@/////sdir");;
- *)
- LSROUT=$(run_grubfstest ls -- -l "($GRUBDEVICE)/////sdir");;
- esac
- if echo "$LSROUT" | grep -F " 2.img" | grep $BLOCKCNT > /dev/null; then
- :
- else
- echo SLIST FAIL
- echo "$LSROUT"
- TZ=UTC ls -l "$MNTPOINTRO/sdir"
- exit 1
- fi
- case x"$fs" in
- x"zfs"*)
- LSROUT=$(run_grubfstest ls -- -l "($GRUBDEVICE)/grub fs@/$PDIR");;
- *)
- LSROUT=$(run_grubfstest ls -- -l "($GRUBDEVICE)/$PDIR");;
- esac
- if echo "$LSROUT" | grep -F " p.img" | grep $BLOCKCNT > /dev/null; then
- :
- else
- echo PLIST FAIL
- echo "$LSROUT"
- TZ=UTC ls -l "$MNTPOINTRO/$PDIR"
- exit 1
- fi
- case x"$fs" in
- x"zfs"*)
- LSROUT=$(run_grubfstest ls -- -l "($GRUBDEVICE)/grub fs@/sdir/.");;
- *)
- LSROUT=$(run_grubfstest ls -- -l "($GRUBDEVICE)/sdir/.");;
- esac
- if echo "$LSROUT" | grep -F " 2.img" | grep $BLOCKCNT > /dev/null; then
- :
- else
- echo DOT IN SUBDIR FAIL
- echo "$LSROUT"
- TZ=UTC ls -l "$MNTPOINTRO/$OSDIR/sdir"
- exit 1
- fi
- case x"$fs" in
- x"zfs"*)
- LSROUT=$(run_grubfstest ls -- -l "($GRUBDEVICE)/grub fs@/sdir/../sdir");;
- *)
- LSROUT=$(run_grubfstest ls -- -l "($GRUBDEVICE)/sdir/../sdir");;
- esac
- if echo "$LSROUT" | grep -F " 2.img" | grep $BLOCKCNT > /dev/null; then
- :
- else
- echo DOTDOT IN SUBDIR FAIL
- echo "$LSROUT"
- TZ=UTC ls -l "$MNTPOINTRO/$OSDIR/ssdir"
- exit 1
- fi
- LSOUT=`run_grubfstest ls -- -l "($GRUBDEVICE)"`
- if [ x"$NOFSLABEL" = xy ]; then
- :
- elif echo "$LSOUT" | grep -F "Label \`$FSLABEL'" > /dev/null; then
- :
- else
- echo LABEL FAIL
- echo "$LSOUT"
- blkid "${MOUNTDEVICE}"
- exit 1
- fi
- # Inconsistencies between GRUB and blkid.
- case x"$fs" in
- x"iso9660" | x"ziso9660" | xrockridge | xjoliet | xrockridge_joliet | x"iso9660_1999" | xrockridge_1999 | xjoliet_1999 | xrockridge_joliet_1999) ;;
- x"zfs"*)
- for lodev in $LODEVICES; do
- FSUUID=$(printf "%016x\n" $(blkid -o export "$lodev" |grep -F UUID=|sed s,UUID=,,g))
- if [ "$FSUUID" != 0000000000000000 ]; then
- break;
- fi
- done;;
- *)
- FSUUID=`blkid -o export "${MOUNTDEVICE}" |grep -F UUID=|sed s,UUID=,,g`
- ;;
- esac
- case x"$fs" in
- x"hfs"*)
- GRUBUUID="`run_grubfstest xnu_uuid "$GRUBDEVICE"`"
- if [ x"$GRUBUUID" = x"$FSUUID" ]; then
- :
- else
- echo UUID FAIL
- echo "$LSOUT"
- echo "$GRUBUUID"
- for lodev in $LODEVICES; do
- blkid "$lodev"
- done
- exit 1
- fi
- ;;
- # FS LIMITATION: romfs, cpio, tar, squash4, minix, AFS, old reiserfs and minix2
- # have no UUID.
- # GRUB LIMITATION: use creation date for squash4, AFFS and SFS?
- # GRUB LIMITATION: use tags serials on UDF?
- # GRUB LIMITATION: use root ctime on cpio, tar, minix*, UDF, reiserfs_old?
- # GRUB LIMITATION: Support Atari UUIDs
- x"romfs" | x"cpio_"* | x"tarfs" | x"squash4_"* | x"minix" \
- | x"minix2" | x"minix3" | x"affs" | xaffs_intl \
- | x"udf" | xvfat12a | xvfat16a | xmsdos12a | xmsdos16a | xafs | xsfs* \
- | xreiserfs_old)
- ;;
- *)
- if [ x"$FSUUID" = x ]; then
- echo "Warning: blkid couldn't retrieve UUID"
- elif echo "$LSOUT" | grep -F 'UUID '"$FSUUID"' ' > /dev/null; then
- :
- else
- echo UUID FAIL
- echo "$FSUUID"
- echo "$LSOUT"
- blkid "${MOUNTDEVICE}"
- exit 1
- fi
- ;;
- esac
- if [ x$NOFSTIME != xy ]; then
- case x$fs in
- xiso9660 | xziso9660 | xrockridge | xjoliet | xrockridge_joliet | xiso9660_1999 | xrockridge_1999 | xjoliet_1999 | xrockridge_joliet_1999)
- FSTIME="$(date -d "$(echo ${FSUUID} | awk -F - '{ print $1"-"$2"-"$3" "$4":"$5":"$6 ;}')" '+%Y-%m-%d %H:%M:%S')";;
- xlvm*|xmdraid*)
- # With some abstractions like mdraid flushing to disk
- # may be delayed for a long time.
- FSTIME="$UMOUNT_TIME";;
- *)
- FSTIME="$(TZ=UTC ls --time-style="+%Y-%m-%d_%H:%M:%S" -l -d "${FSIMAGEP}0.img"|awk '{print $6; }'|sed 's,_, ,g')";;
- esac
- # With some abstractions like mdraid computing of UMOUNT_TIME
- # is not precise. Account for small difference here.
- FSTIMEM1="$(date -d "$FSTIME UTC -1 second" -u "+%Y-%m-%d %H:%M:%S")"
- FSTIMEM2="$(date -d "$FSTIME UTC -2 second" -u "+%Y-%m-%d %H:%M:%S")"
- FSTIMEM3="$(date -d "$FSTIME UTC -3 second" -u "+%Y-%m-%d %H:%M:%S")"
- 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
- :
- else
- echo FSTIME FAIL
- echo "$FSTIME"
- echo "$LSOUT"
- exit 1
- fi
- fi
- if [ x$NOHARDLINK != xy ]; then
- if run_grubfstest cmp "$GRUBDIR/$BASEHARD" "$MNTPOINTRO/$OSDIR/$BASEFILE" ; then
- :
- else
- echo HARDLINK FAIL
- exit 1
- fi
- fi
- if [ x$NOSYMLINK != xy ]; then
- if run_grubfstest cmp "$GRUBDIR/$BASESYM" "$MNTPOINTRO/$OSDIR/$BASEFILE" ; then
- :
- else
- echo SYMLINK FAIL
- exit 1
- fi
- if run_grubfstest cmp "$GRUBDIR/$LONGSYM" "$MNTPOINTRO/$OSDIR/$LONGNAME" ; then
- :
- else
- echo LONG SYMLINK FAIL
- exit 1
- fi
- if run_grubfstest cmp "$GRUBDIR/$ISYM" "$MNTPOINTRO/$OSDIR/$IFILE" ; then
- :
- else
- echo INTL SYMLINK FAIL
- exit 1
- fi
- if run_grubfstest cmp "$GRUBDIR/$SSYM" "$MNTPOINTRO/$OSDIR/////sdir/////2.img" ; then
- :
- else
- echo SDIR SYMLINK FAIL
- exit 1
- fi
- if run_grubfstest cmp "$GRUBDIR/$USYM" "$MNTPOINTRO/$OSDIR/1.img" ; then
- :
- else
- echo SDIR SYMLINK FAIL
- exit 1
- fi
- if run_grubfstest cmp "$GRUBDIR/$PSYM" "$MNTPOINTRO/$OSDIR/${PDIR2}/$PFIL" ; then
- :
- else
- echo PATH LONG SYMLINK FAIL
- exit 1
- fi
- fi
- if run_grubfstest cmp "$GRUBDIR/$BASEFILE" "$MNTPOINTRO/$OSDIR/$BASEFILE" ; then
- :
- else
- echo READ FAIL
- exit 1
- fi
- if run_grubfstest cmp "$GRUBDIR/$NASTYFILE" "$MNTPOINTRO/$OSDIR/$NASTYFILE" ; then
- :
- else
- echo NREAD FAIL
- exit 1
- fi
- # Reference archive contains original name
- if run_grubfstest cmp "$GRUBDIR/$LONGNAME" "$MNTPOINTRO/$OSDIR/$LONGNAME" ; then
- :
- else
- echo LONG NAME READ FAIL
- exit 1
- fi
- if run_grubfstest cmp "$GRUBDIR/////sdir/////2.img" "$MNTPOINTRO/$OSDIR/sdir/2.img" ; then
- :
- else
- echo LONG NAME READ FAIL
- exit 1
- fi
- if run_grubfstest cmp "$GRUBDIR/$IFILE" "$MNTPOINTRO/$OSDIR/$IFILE" ; then
- :
- else
- echo IREAD FAIL
- exit 1
- fi
- if run_grubfstest cmp "$GRUBDIR/$PDIR/$PFIL" "$MNTPOINTRO/$OSDIR/$PDIR/$PFIL" ; then
- :
- else
- echo PREAD FAIL
- echo cmp "$GRUBDIR/$PDIR/$PFIL" "$MNTPOINTRO/$OSDIR/$PDIR/$PFIL"
- exit 1
- fi
- ok=true
- if ! run_grubfstest cmp "$GRUBDIR/${CFILE}" "$MNTPOINTRO/$OSDIR/${CFILE}" ; then
- ok=false;
- fi
- if test x$ok = xtrue; then
- :
- else
- echo CREAD FAIL
- exit 1
- fi
- if [ x$CASESENS = xy ]; then
- if run_grubfstest cmp "$GRUBDIR/CaSe" "$MNTPOINTRO/$OSDIR/CaSe" ; then
- :
- else
- echo CASE1 READ FAIL
- exit 1
- fi
- if run_grubfstest cmp "$GRUBDIR/cAsE" "$MNTPOINTRO/$OSDIR/cAsE" ; then
- :
- else
- exit 1
- fi
- if cmp "$MNTPOINTRO/$OSDIR/cAsE" "$MNTPOINTRO/$OSDIR/CaSe" > /dev/null ; then
- exit 1
- fi
- if test x$ok = xtrue; then
- :
- else
- echo CASE READ FAIL
- exit 1
- fi
- else
- # OS LIMITATION: Linux make FAT (partially) case-sensitive...
- # ISO9660 is generated and master doesn't change
- case x$fs in
- xiso9660 | xvfat*)
- CASEX=CaSe;;
- *)
- CASEX=cAsE;;
- esac
- if run_grubfstest cmp "$GRUBDIR/CaSe" "$MNTPOINTRO/$OSDIR/${CASEX}" ; then
- :
- else
- echo CASE1 READ FAIL
- exit 1
- fi
- if run_grubfstest cmp "$GRUBDIR/cAsE" "$MNTPOINTRO/$OSDIR/CaSe" ; then
- :
- else
- echo CASE2 READ FAIL
- exit 1
- fi
- if ! cmp "$MNTPOINTRO/$OSDIR/CaSe" "$MNTPOINTRO/$OSDIR/${CASEX}" > /dev/null ; then
- echo CASE CMP READ FAIL
- exit 1
- fi
- if test x$ok = xtrue; then
- :
- else
- echo CASE READ FAIL
- exit 1
- fi
- fi
- case x"$fs" in
- x"zfs"*)
- while ! zpool export "$FSLABEL" ; do
- sleep 1;
- done
- sleep 5;;
- x"tarfs" | x"cpio_"* | xrockridge | xjoliet | xrockridge_joliet | x"ziso9660" | x"romfs" | x"squash4_"* | xiso9660 | xiso9660_1999 | xrockridge_1999 | xjoliet_1999 | xrockridge_joliet_1999)
- rm -rf "$MNTPOINTRW";;
- x"afs")
- rm -rf "$MNTPOINTRO"
- ;;
- *)
- sleep 1
- umount "$MNTPOINTRO" || true
- umount "$MNTPOINTRW" || true
- esac
- sleep 1
- case x"$fs" in
- xmdraid*)
- mdadm --stop /dev/md/"${fs}_$NDEVICES"
- sleep 1
- ;;
- xlvm*)
- vgchange -a n grub_test
- sleep 1
- ;;
- esac
- case x"$fs" in
- 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) ;;
- *)
- for lodev in $LODEVICES; do
- while ! losetup -d "$lodev"; do
- sleep 1
- done
- done;;
- esac
- for i in $(range 0 $((NDEVICES-1)) 1); do
- rm "$FSIMAGEP${i}.img"
- done
- if [ x"$fs" = x"zfs" ]; then
- rmdir "$MNTPOINTRW"/"grub fs" || true
- rmdir "$MNTPOINTRO"/"grub fs" || true
- fi
- rm -rf "$MNTPOINTRW" || true
- rm -rf "$MNTPOINTRO" || true
- done
- done
- done
- rmdir "${tempdir}"
|