/usr/bin/test_ext4fixup is in android-tools-fsutils 5.1.1r36+git20160322-0ubuntu3.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | #!/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
|