diff options
| author | Yoshihiro Takahashi <nyan@FreeBSD.org> | 2001-11-14 13:06:26 +0000 |
|---|---|---|
| committer | Yoshihiro Takahashi <nyan@FreeBSD.org> | 2001-11-14 13:06:26 +0000 |
| commit | 38402f450411a012512cb720aedfd40d1b815aa3 (patch) | |
| tree | e639185102a4ea1dff392e851b435785756740e2 /release/scripts | |
| parent | 0820d3201d44d08d0a551f1f3a25a1dc3db59102 (diff) | |
Notes
Diffstat (limited to 'release/scripts')
| -rw-r--r-- | release/scripts/doFS.sh | 104 |
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 |
