- dd if=/dev/zero of=$2 bs=1k count=$3 1>&2 || exit -1
- mkfs.$1 -b 4096 -F $2 1>&2 || exit -1
- LOOPDEV=${LOOP}${LOOPNUM}
- losetup ${LOOPDEV} $2 1>&2 || exit -1
- LOOPNUM=`expr ${LOOPNUM} + 1`
+ EFILE="$1_$3.gz"
+ MKFS="mkfs.$1"
+ MKFSOPT="-b 4096"
+
+ [ "$1" = "ext3" ] && MKFS="mkfs.ext2 -j"
+
+ if [ -b "$2" ]; then
+ [ $# -lt 2 -o $# -gt 3 ] && \
+ echo "usage: $0 <fstype> <file> [size]" 1>&2 && exit -1
+
+ PM="/proc/mounts"
+ [ -f "$PM" ] || PM="/etc/mtab"
+
+ grep "$2 " $PM 1>&2 && echo "$0: $2 is in $PM!" 1>&2 && exit -1
+
+ $MKFS $MKFSOPT $2 $3 || exit -1
+ LOOPDEV=$2 # Not really a loop device
+ else
+ [ $# -ne 3 ] && \
+ echo "usage: $0 <fstype> <file> <size>" 1>&2 && exit -1
+
+ if [ -f "$EFILE" ]; then
+ echo "using existing filesystem $EFILE for $2"
+ zcat "$EFILE" > $2 || exit -1
+ sync
+ else
+ echo "creating new filesystem on $2"
+ dd if=/dev/zero of=$2 bs=1k count=$3 1>&2 || exit -1
+ $MKFS $MKFSOPT -F $2 1>&2 || exit -1
+ fi
+ LOOPDEV=`next_loop_dev`
+ losetup ${LOOPDEV} $2 1>&2 || exit -1
+ fi