summaryrefslogtreecommitdiffstats
path: root/release/scripts
diff options
context:
space:
mode:
authornyan <nyan@FreeBSD.org>2001-11-15 07:27:25 +0000
committernyan <nyan@FreeBSD.org>2001-11-15 07:27:25 +0000
commitf8089d091127aba6800052c6f70d19b4fe06e157 (patch)
tree5e2570e0f15d98a699e432f2854298e6002b9376 /release/scripts
parent9713287dcafc9db3680b5e0453dc74a904b50cf5 (diff)
downloadFreeBSD-src-f8089d091127aba6800052c6f70d19b4fe06e157.zip
FreeBSD-src-f8089d091127aba6800052c6f70d19b4fe06e157.tar.gz
Use the vn driver on a stable system.
Diffstat (limited to 'release/scripts')
-rw-r--r--release/scripts/doFS.sh73
1 files changed, 70 insertions, 3 deletions
diff --git a/release/scripts/doFS.sh b/release/scripts/doFS.sh
index d7b660f..bb2d7d8 100644
--- a/release/scripts/doFS.sh
+++ b/release/scripts/doFS.sh
@@ -23,8 +23,65 @@ FSLABEL=$1 ; shift
deadlock=20
-while true
-do
+dofs_vn () {
+ if [ "x$VNDEVICE" = "x" ] ; then
+ VNDEVICE=vn0
+ fi
+ u=`expr $VNDEVICE : 'vn\([0-9]*\)' || true`
+ VNDEVICE=vnn$u
+
+ 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
+ # 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
+
+ vnconfig -s labels -c /dev/r${VNDEVICE} ${FSIMG}
+ disklabel -Brw /dev/r${VNDEVICE} ${FSLABEL}
+ newfs -i ${FSINODE} -T ${FSLABEL} -o space -m 1 /dev/r${VNDEVICE}c
+
+ mount /dev/${VNDEVICE}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}
+ vnconfig -u /dev/r${VNDEVICE} 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
+
+ rm -f /dev/*vnn*
+}
+
+dofs_md () {
+ while true
+ do
rm -f ${FSIMG}
if [ "x${MDDEVICE}" != "x" ] ; then
@@ -71,4 +128,14 @@ do
echo ${FSSIZE} > ${FSIMG}.size
fi
break;
-done
+ done
+}
+
+case `uname -r` in
+5.*)
+ dofs_md
+ ;;
+*)
+ dofs_vn
+ ;;
+esac
OpenPOWER on IntegriCloud