171887Sphk#!/bin/sh 271887Sphk# 371887Sphk# $FreeBSD$ 471887Sphk# 575328Sobrien 6110208Sphkset -ex 713352Sphk 813534Sjoergexport BLOCKSIZE=512 913352Sphk 10113899SruDISKLABEL=$1; shift 11112453SruMACHINE=${1:+"-m $1"}; shift 1242300SjkhFSIMG=$1; shift 1313352SphkRD=$1 ; shift 1413352SphkMNT=$1 ; shift 1513352SphkFSSIZE=$1 ; shift 1613352SphkFSPROTO=$1 ; shift 1713352SphkFSINODE=$1 ; shift 1813352SphkFSLABEL=$1 ; shift 1913352Sphk 20106391Smarcel# 21118667Sru# If we've been told to, compute the required file system size 22118667Sru# and average inode size automatically. 23118667Sru# 24118667Sruif [ ${FSSIZE} -eq 0 -a ${FSLABEL} = "auto" ]; then 25118667Sru roundup() echo $((($1+$2-1)-($1+$2-1)%$2)) 26118667Sru nf=$(find ${FSPROTO} |wc -l) 27118667Sru sk=$(du -sk ${FSPROTO} |cut -f1) 28118667Sru FSINODE=$(roundup $(($sk*1024/$nf)) ${FSINODE}) 29118667Sru FSSIZE=$(roundup $(($sk*12/10)) 1024) 30118667Srufi 31118667Sru 3286390Snyandofs_vn () { 33125168Sru if [ "x$VNDEVICE" = "x" ] ; then 34125168Sru VNDEVICE=vn0 35125168Sru fi 36125168Sru u=`expr $VNDEVICE : 'vn\([0-9]*\)' || true` 37125168Sru VNDEVICE=vnn$u 3886390Snyan 39125168Sru rm -f /dev/*vnn* 40125168Sru mknod /dev/rvnn${u} c 43 `expr 65538 + $u '*' 8` 41125168Sru mknod /dev/rvnn${u}c c 43 `expr 2 + $u '*' 8` 42125168Sru mknod /dev/vnn${u} b 15 `expr 65538 + $u '*' 8` 43125168Sru mknod /dev/vnn${u}c b 15 `expr 2 + $u '*' 8` 4486390Snyan 4586390Snyan umount /dev/${VNDEVICE} 2>/dev/null || true 4686390Snyan umount ${MNT} 2>/dev/null || true 4786390Snyan vnconfig -u /dev/r${VNDEVICE} 2>/dev/null || true 4886390Snyan 4986390Snyan vnconfig -s labels -c /dev/r${VNDEVICE} ${FSIMG} 50112864Sru 51113510Sru trap "umount ${MNT}; vnconfig -u /dev/r${VNDEVICE}; rm -f /dev/*vnn*" EXIT 52112864Sru 53112453Sru disklabel -w ${BOOT} ${VNDEVICE} ${FSLABEL} 54115069Sru newfs -i ${FSINODE} -o space -m 0 /dev/r${VNDEVICE}c 5586390Snyan 5686390Snyan mount /dev/${VNDEVICE}c ${MNT} 5786390Snyan} 5886390Snyan 5986390Snyandofs_md () { 6071887Sphk if [ "x${MDDEVICE}" != "x" ] ; then 6171887Sphk umount /dev/${MDDEVICE} 2>/dev/null || true 6271887Sphk umount ${MNT} 2>/dev/null || true 6371887Sphk mdconfig -d -u ${MDDEVICE} 2>/dev/null || true 6471887Sphk fi 6513352Sphk 6671887Sphk MDDEVICE=`mdconfig -a -t vnode -f ${FSIMG}` 6771887Sphk if [ ! -c /dev/${MDDEVICE} ] ; then 68110208Sphk echo "No /dev/$MDDEVICE" 1>&2 69110208Sphk exit 1 7071887Sphk fi 71112864Sru 72112864Sru trap "umount ${MNT}; mdconfig -d -u ${MDDEVICE}" EXIT 73112864Sru 74133951Sgrehan if [ "x${DISKLABEL}" != "x" ] ; then 75133951Sgrehan ${DISKLABEL} ${MACHINE} -w ${BOOT} ${MDDEVICE} ${FSLABEL} 76133951Sgrehan fi 77188606Snyan newfs -O1 -b 4096 -f 512 -i ${FSINODE} -o space -m 0 /dev/${MDDEVICE} 78188606Snyan mount /dev/${MDDEVICE} ${MNT} 79125168Sru} 8013352Sphk 81125168Srurm -f ${FSIMG} 82125168Srudd of=${FSIMG} if=/dev/zero count=${FSSIZE} bs=1k 2>/dev/null 8313352Sphk 84120226Sru# 85120226Sru# We don't have any bootblocks on ia64. Note that -B implies -r, 86120226Sru# so we have to specifically specify -r when we don't have -B. 87120226Sru# bsdlabel fails otherwise. 88120226Sru# 8986390Snyancase `uname -r` in 90125168Sru4.*) 91120226Sru if [ -f "${RD}/trees/base/boot/boot1" ]; then 92120226Sru BOOT="-B -b ${RD}/trees/base/boot/boot1" 93120226Sru if [ -f "${RD}/trees/base/boot/boot2" ]; then 94120226Sru BOOT="${BOOT} -s ${RD}/trees/base/boot/boot2" 95120226Sru fi 96120226Sru else 97120226Sru BOOT="-r" 98120226Sru fi 9986448Snyan dofs_vn 10086390Snyan ;; 10186390Snyan*) 102120226Sru if [ -f "${RD}/trees/base/boot/boot" ]; then 103120226Sru BOOT="-B -b ${RD}/trees/base/boot/boot" 104120226Sru else 105120226Sru BOOT="-r" 106120226Sru fi 10786448Snyan dofs_md 10886390Snyan ;; 10986390Snyanesac 110125168Sru 111125168Sruif [ -d ${FSPROTO} ]; then 112125168Sru (set -e && cd ${FSPROTO} && find . -print | cpio -dump ${MNT}) 113125168Sruelse 114125168Sru cp -p ${FSPROTO} ${MNT} 115125168Srufi 116125168Sru 117125168Srudf -ki ${MNT} 118125168Sru 119125168Sruset `df -ki ${MNT} | tail -1` 120125168Sru 121125168Sruecho "*** File system is ${FSSIZE} K, $4 left" 122125168Sruecho "*** ${FSINODE} bytes/inode, $7 left" 123