aboutsummaryrefslogtreecommitdiff
path: root/release/scripts
diff options
context:
space:
mode:
authorYoshihiro Takahashi <nyan@FreeBSD.org>2001-11-14 13:06:26 +0000
committerYoshihiro Takahashi <nyan@FreeBSD.org>2001-11-14 13:06:26 +0000
commit38402f450411a012512cb720aedfd40d1b815aa3 (patch)
treee639185102a4ea1dff392e851b435785756740e2 /release/scripts
parent0820d3201d44d08d0a551f1f3a25a1dc3db59102 (diff)
Notes
Diffstat (limited to 'release/scripts')
-rw-r--r--release/scripts/doFS.sh104
1 files changed, 80 insertions, 24 deletions
diff --git a/release/scripts/doFS.sh b/release/scripts/doFS.sh
index bf93e3569610..e68c6f1d1089 100644
--- a/release/scripts/doFS.sh
+++ b/release/scripts/doFS.sh
@@ -2,11 +2,9 @@
#
# $FreeBSD$
#
+
set -e
-if [ "x$VNDEVICE" = "x" ] ; then
- VNDEVICE=vn0
-fi
export BLOCKSIZE=512
if [ "$1" = "-s" ]; then
@@ -25,30 +23,25 @@ FSLABEL=$1 ; shift
deadlock=20
-u=`expr $VNDEVICE : 'vn\([0-9]*\)' || true`
-rm -f /dev/*vnn*
-mknod /dev/rvnn${u} c 43 `expr 65538 + $u '*' 8`
-mknod /dev/rvnn${u}c c 43 `expr 2 + $u '*' 8`
-case `uname -r` in
- 5.*)
- mknod /dev/vnn${u} c 43 `expr 65538 + $u '*' 8`
- mknod /dev/vnn${u}c c 43 `expr 2 + $u '*' 8`
- ;;
- *)
- mknod /dev/vnn${u} b 15 `expr 65538 + $u '*' 8`
- mknod /dev/vnn${u}c b 15 `expr 2 + $u '*' 8`
- ;;
-esac
-VNDEVICE=vnn$u
+dofs_vn () {
+ if [ "x$VNDEVICE" = "x" ] ; then
+ VNDEVICE=vn0
+ fi
+ u=`expr $VNDEVICE : 'vn\([0-9]*\)' || true`
+ VNDEVICE=vnn$u
-while true
-do
+ rm -f /dev/*vnn*
+ mknod /dev/rvnn${u} c 43 `expr 65538 + $u '*' 8`
+ mknod /dev/rvnn${u}c c 43 `expr 2 + $u '*' 8`
+ mknod /dev/vnn${u} b 15 `expr 65538 + $u '*' 8`
+ mknod /dev/vnn${u}c b 15 `expr 2 + $u '*' 8`
+
+ while true
+ do
rm -f ${FSIMG}
umount /dev/${VNDEVICE} 2>/dev/null || true
-
umount ${MNT} 2>/dev/null || true
-
vnconfig -u /dev/r${VNDEVICE} 2>/dev/null || true
dd of=${FSIMG} if=/dev/zero count=${FSSIZE} bs=1k 2>/dev/null
@@ -81,5 +74,68 @@ do
echo ${FSSIZE} > ${FSIMG}.size
fi
break;
-done
-rm -f /dev/*vnn*
+ done
+
+ rm -f /dev/*vnn*
+}
+
+dofs_md () {
+ while true
+ do
+ rm -f ${FSIMG}
+
+ if [ "x${MDDEVICE}" != "x" ] ; then
+ umount /dev/${MDDEVICE} 2>/dev/null || true
+ umount ${MNT} 2>/dev/null || true
+ mdconfig -d -u ${MDDEVICE} 2>/dev/null || true
+ fi
+
+ dd of=${FSIMG} if=/dev/zero count=${FSSIZE} bs=1k 2>/dev/null
+ # this suppresses the `invalid primary partition table: no magic'
+ awk 'BEGIN {printf "%c%c", 85, 170}' |\
+ dd of=${FSIMG} obs=1 seek=510 conv=notrunc 2>/dev/null
+
+ MDDEVICE=`mdconfig -a -t vnode -f ${FSIMG}`
+ if [ ! -c /dev/${MDDEVICE} ] ; then
+ if [ -f /dev/MAKEDEV ] ; then
+ ( cd /dev && sh MAKEDEV ${MDDEVICE} )
+ else
+ echo "No /dev/$MDDEVICE and no MAKEDEV" 1>&2
+ exit 1
+ fi
+ fi
+ disklabel -Brw /dev/${MDDEVICE} ${FSLABEL}
+ newfs -i ${FSINODE} -T ${FSLABEL} -o space -m 0 /dev/${MDDEVICE}c
+
+ mount /dev/${MDDEVICE}c ${MNT}
+
+ if [ -d ${FSPROTO} ]; then
+ (set -e && cd ${FSPROTO} && find . -print | cpio -dump ${MNT})
+ else
+ cp -p ${FSPROTO} ${MNT}
+ fi
+
+ df -ki ${MNT}
+
+ set `df -ki ${MNT} | tail -1`
+
+ umount ${MNT}
+ mdconfig -d -u ${MDDEVICE} 2>/dev/null || true
+
+ echo "*** Filesystem is ${FSSIZE} K, $4 left"
+ echo "*** ${FSINODE} bytes/inode, $7 left"
+ if [ "${do_size}" ]; then
+ echo ${FSSIZE} > ${FSIMG}.size
+ fi
+ break;
+ done
+}
+
+case `uname -r` in
+5.*)
+ dofs_md
+ ;;
+*)
+ dofs_vn
+ ;;
+esac