You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.5 KiB
71 lines
1.5 KiB
#!/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 |
|
|
|
|