@@ -62,6 +62,44 @@ check_image()
run_check $TOP/btrfs check $image
}
+extract_image()
+{
+ local image="$1"
+
+ local cleanme=
+ case "$image" in
+ *.img)
+ rm -f $image.restored
+ : ;;
+ *.img.xz)
+ xz --decompress --keep "$image" || \
+ _fail "failed to decompress image $image" >&2
+ image=${image%%.xz}
+ rm -f $image.restored
+ cleanme=$image
+ ;;
+ *.raw)
+ cp --sparse=auto $image $image.restored
+ ;;
+ *.raw.xz)
+ xz --decompress --keep "$image" || \
+ _fail "failed to decompress image $image" >&2
+ image=${image%%.xz}
+ mv "$image" "$image".restored
+ ;;
+ esac
+
+ if ! [ -f $image.restored ]; then
+ echo "restoring image $(basename $image)" >> $RESULTS
+ $TOP/btrfs-image -r $image $image.restored || \
+ _fail "failed to restore image $image" >&2
+ fi
+
+ [[ "$cleanme" ]] && rm -f "$cleanme"
+
+ echo "$image.restored"
+}
+
# Process all image dumps in a given directory,
# - raw btrfs filesystem images, suffix .raw
# - dtto compressed by XZ, suffix .raw.xz
@@ -69,44 +107,16 @@ check_image()
# - dtto compressed by XZ, suffix .img.xz
check_all_images()
{
- dir=$1
+ local dir=$1
for image in $(find $dir \( -iname '*.img' -o \
-iname '*.img.xz' -o \
-iname '*.raw' -o \
-iname '*.raw.xz' \) | sort)
do
- cleanme=
- case "$image" in
- *.img)
- rm -f $image.restored
- : ;;
- *.img.xz)
- xz --decompress --keep "$image" || \
- _fail "failed to decompress image $image"
- image=${image%%.xz}
- rm -f $image.restored
- cleanme=$image
- ;;
- *.raw)
- cp --sparse=auto $image $image.restored
- ;;
- *.raw.xz)
- xz --decompress --keep "$image" || \
- _fail "failed to decompress image $image"
- image=${image%%.xz}
- mv "$image" "$image".restored
- ;;
- esac
-
- if ! [ -f $image.restored ]; then
- echo "restoring image $(basename $image)" >> $RESULTS
- $TOP/btrfs-image -r $image $image.restored || \
- _fail "failed to restore image $image"
- fi
-
- check_image $image.restored
-
- rm -f $image.restored $cleanme
+ local extracted
+ extracted=$(extract_image "$image")
+ check_image "$extracted"
+ rm -f "$extracted"
done
}
Move code for extract image file to a function from check_all_images() for common use, so caller can use this function to extrace single image file. Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com> --- tests/common | 76 ++++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 43 insertions(+), 33 deletions(-)