72 lines
1.5 KiB
Plaintext
72 lines
1.5 KiB
Plaintext
|
#!/bin/bash
|
||
|
|
||
|
typeset -i I ITERATIONS PHASE LOC COUNT MAXCOUNT
|
||
|
|
||
|
ME=`basename $0`
|
||
|
|
||
|
if [ "$#" -ne 3 ]
|
||
|
then
|
||
|
echo "$ME: Usage: $ME <iterations> <maxcount> <filesystem_image>" >&2
|
||
|
exit 1;
|
||
|
fi
|
||
|
|
||
|
ITERATIONS="$1"
|
||
|
MAXCOUNT="$2"
|
||
|
ORIG_FS_IMAGE="$3"
|
||
|
FIXED_FS_IMAGE="/tmp/fixedfsimage.$$"
|
||
|
NEW_FS_IMAGE="/tmp/newfsimage.$$"
|
||
|
|
||
|
if [ ! -f "$ORIG_FS_IMAGE" ]
|
||
|
then
|
||
|
echo "$ME: Filesystem image $NEW_FS_IMAGE does not exist" >&2
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
trap "rm -f $NEW_FS_IMAGE $FIXED_FS_IMAGE" 0 1 2 3 15
|
||
|
|
||
|
rm -f "$NEW_FS_IMAGE" "$FIXED_FS_IMAGE"
|
||
|
|
||
|
# Create the fixed image to compare against
|
||
|
cp "$ORIG_FS_IMAGE" "$FIXED_FS_IMAGE"
|
||
|
ext4fixup "$FIXED_FS_IMAGE"
|
||
|
|
||
|
if [ "$?" -ne 0 ]
|
||
|
then
|
||
|
echo "$ME: ext4fixup failed!\n"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
I=0
|
||
|
while [ "$I" -lt "$ITERATIONS" ]
|
||
|
do
|
||
|
# There is also a phase 4, which is writing out the updated superblocks and
|
||
|
# block group descriptors. Test the with a separate script.
|
||
|
let PHASE="$RANDOM"%3 # 0 to 2
|
||
|
let PHASE++ # 1 to 3
|
||
|
let LOC="$RANDOM"%2 # 0 to 1
|
||
|
let LOC++ # 1 to 2
|
||
|
let COUNT="$RANDOM"%"$MAXCOUNT"
|
||
|
|
||
|
# Make a copy of the original image to fixup
|
||
|
cp "$ORIG_FS_IMAGE" "$NEW_FS_IMAGE"
|
||
|
|
||
|
# Run the fixup tool, but die partway through to see if we can recover
|
||
|
ext4fixup -d "$PHASE,$LOC,$COUNT" "$NEW_FS_IMAGE" 2>/dev/null
|
||
|
|
||
|
# run it again without -d to have it finish the job
|
||
|
ext4fixup "$NEW_FS_IMAGE"
|
||
|
|
||
|
if cmp "$FIXED_FS_IMAGE" "$NEW_FS_IMAGE"
|
||
|
then
|
||
|
:
|
||
|
else
|
||
|
echo "$ME: test failed with parameters $PHASE, $LOC, $COUNT"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
rm -f "$NEW_FS_IMAGE"
|
||
|
|
||
|
let I++
|
||
|
done
|
||
|
|