Date: Sun, 24 Oct 2010 22:37:45 +0400 (MSD) From: Lev Serebryakov <lev@FreeBSD.org> To: FreeBSD-gnats-submit@FreeBSD.org Subject: misc/151698: [nanobsd] [patch] Add two new options to nanobsd.sh to make rebuilds faster Message-ID: <20101024183745.6619F13DF46@ftp.translate.ru> Resent-Message-ID: <201010241840.o9OIeALR030346@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 151698 >Category: misc >Synopsis: [nanobsd] [patch] Add two new options to nanobsd.sh to make rebuilds faster >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Sun Oct 24 18:40:10 UTC 2010 >Closed-Date: >Last-Modified: >Originator: Lev Serebryakov >Release: FreeBSD 8.1-STABLE i386 >Organization: >Environment: System: FreeBSD vmware-8-32.home.serebryakov.spb.ru 8.1-STABLE FreeBSD 8.1-STABLE #1: Wed Oct 20 18:55:10 MSD 2010 root@vmware-8-32.home.serebryakov.spb.ru:/usr/obj/usr/src/sys/GENERIC i386 >Description: This patch adds two new options to nanobsd.sh: -f ([f]ast) options supress of extraction of CODE slice (s1) from final image. If you need full image to prepare new device, you don't need separate file with CODE slice, and this otions saves lots of time. -z ([z]ap) option works only if NANO_MD_BACKING=file and supresses creation of image file from "/dev/zero". It zeroes out two first cylinders of EXISTENT image file, left from previous runs. If image file is absent or has wrong size, process stops. These two options, when used together, make experiments with creating NanoBSD images MUCH faster even on modern hardware. >How-To-Repeat: >Fix: --- nanobsd.sh.orig 2010-10-24 22:20:07.000000000 +0400 +++ nanobsd.sh.faster 2010-10-24 22:22:28.000000000 +0400 @@ -466,9 +466,20 @@ MD=`mdconfig -a -t swap -s ${NANO_MEDIASIZE} -x ${NANO_SECTS} \ -y ${NANO_HEADS}` else - echo "Creating md backing file..." - dd if=/dev/zero of=${IMG} bs=${NANO_SECTS}b \ - count=`expr ${NANO_MEDIASIZE} / ${NANO_SECTS}` + if $do_create_md_file || ! [ -f ${IMG} ] ; then + echo "Creating md backing file..." + dd if=/dev/zero of=${IMG} bs=${NANO_SECTS}b \ + count=`expr ${NANO_MEDIASIZE} / ${NANO_SECTS}` + else + echo "Check & zap md backing file..." + MD_SIZE=`stat -f '%z' ${IMG}` + MD_SIZE=$(( ${MDSIZE} / 512 )) + if [ "${MD_SIZE}" != "${NANO_MEDIASIZE}" ] ; then + echo "Invalid ${IMG} size (found ${MD_SIZE} sectors, need ${NANO_MEDIASIZE})" + exit 1 + fi + dd if=/dev/zero of=${IMG} bs=1024 count=`expr ${NANO_SECTS} '*' ${NANO_HEADS}` conv=notrunc + fi MD=`mdconfig -a -t vnode -f ${IMG} -x ${NANO_SECTS} \ -y ${NANO_HEADS}` fi @@ -521,8 +532,10 @@ dd if=/dev/${MD} of=${IMG} bs=64k fi - echo "Writing out _.disk.image..." - dd if=/dev/${MD}s1 of=${NANO_DISKIMGDIR}/_.disk.image bs=64k + if do_copyout_partition ; then + echo "Writing out _.disk.image..." + dd if=/dev/${MD}s1 of=${NANO_DISKIMGDIR}/_.disk.image bs=64k + fi mdconfig -d -u $MD trap - 1 2 15 EXIT @@ -712,14 +725,16 @@ usage () { ( - echo "Usage: $0 [-biknqvw] [-c config_file]" + echo "Usage: $0 [-bfiknqvwz] [-c config_file]" echo " -b suppress builds (both kernel and world)" + echo " -f suppress code slice extraction" echo " -i suppress disk image build" echo " -k suppress buildkernel" echo " -n add -DNO_CLEAN to buildworld, buildkernel, etc" echo " -q make output more quiet" echo " -v make output more verbose" echo " -w suppress buildworld" + echo " -z use existing disk image instead creating new one" echo " -c specify config file" ) 1>&2 exit 2 @@ -732,9 +747,11 @@ do_kernel=true do_world=true do_image=true +do_create_md_file=true +do_copyout_partition=true set +e -args=`getopt bc:hiknqvw $*` +args=`getopt bc:fhiknqvwz $*` if [ $? -ne 0 ] ; then usage exit 2 @@ -760,6 +777,10 @@ shift shift ;; + -f) + do_copyout_partition=false + shift + ;; -h) usage ;; @@ -783,6 +804,10 @@ do_world=false shift ;; + -z) + do_create_md_file=true + shift + ;; --) shift break >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20101024183745.6619F13DF46>