Add support for auto-growing the root partition. Enable it for rpi.img.

This commit is contained in:
jmcneill 2015-04-06 20:19:28 +00:00
parent 8c877c0d3d
commit d32faae6e2
4 changed files with 92 additions and 3 deletions

View File

@ -1,4 +1,4 @@
# $NetBSD: evbarm.conf,v 1.20 2015/01/29 14:54:06 skrll Exp $
# $NetBSD: evbarm.conf,v 1.21 2015/04/06 20:19:28 jmcneill Exp $
# evbarm shared config
#
image=$HOME/${board}.img
@ -134,9 +134,25 @@ dhcpcd=YES
ntpd=YES
ntpd_flags="-g"
EOF
if $resize; then
cat >> ${mnt}/etc/rc.conf << EOF
resize_disklabel=YES
resize_disklabel_disk=ld0
resize_disklabel_part=a
resize_root=YES
resize_root_postcmd="/sbin/reboot -n"
EOF
fi
echo "./etc/rc.conf type=file uname=root gname=wheel mode=0644" \
>> "$tmp/selected_sets"
mkdir ${mnt}/etc/rc.d
cp ${DIR}/files/resize_disklabel ${mnt}/etc/rc.d/resize_disklabel
echo "./etc/rc.d/resize_disklabel type=file uname=root gname=wheel mode=0555" \
>> "$tmp/selected_sets"
if [ ! -f ${release}/dev/MAKEDEV ]; then
echo ${PROG}: Missing ${release}/dev/MAKEDEV 1>&2
exit 1

View File

@ -1,9 +1,10 @@
# $NetBSD: rpi.conf,v 1.27 2015/03/06 11:11:55 skrll Exp $
# $NetBSD: rpi.conf,v 1.28 2015/04/06 20:19:28 jmcneill Exp $
# Raspberry Pi customization script used by mkimage
#
board=rpi
kernel=$src/sys/arch/evbarm/compile/RPI/netbsd-RPI.bin
resize=true
. ${DIR}/conf/evbarm.conf

View File

@ -0,0 +1,71 @@
#!/bin/sh
#
# $NetBSD: resize_disklabel,v 1.1 2015/04/06 20:19:28 jmcneill Exp $
#
# PROVIDE: resize_disklabel
# REQUIRE: fsck_root
# BEFORE: resize_root
$_rc_subr_loaded . /etc/rc.subr
name="resize_disklabel"
rcvar=$name
start_cmd="resize_disklabel_start"
stop_cmd=":"
get_rawpart()
{
partno=$(/sbin/sysctl -n kern.rawpartition)
test $partno = 2 && echo c || echo d
}
get_total_sectors()
{
disk=$1
/sbin/drvctl -p $disk disk-info/geometry/sectors-per-unit
}
get_rawpart_sectors()
{
disk=$1
rawpart=$2
/sbin/disklabel $disk | grep "^ $rawpart:" | awk '{ print $2; }'
}
grow_disklabel()
{
disk=$1
part=$2
rawpart=$(get_rawpart)
ts=$(get_total_sectors $disk)
rs=$(get_rawpart_sectors $disk $rawpart)
if [ "$ts" = "$rs" ]; then
return
fi
oldsize=$(($rs * 512 / 1024 / 1024))
newsize=$(($ts * 512 / 1024 / 1024))
echo "Growing $disk disklabel (${oldsize}MB -> ${newsize}MB)"
printf "A\ny\n$part\n\n\n\$\nc\n\n\n\$\nd\n\n\n\$\nW\ny\nQ\n" | \
disklabel -i $disk >/dev/null
}
resize_disklabel_start()
{
if [ x"${resize_disklabel_disk}" = "x" ]; then
warn "\${resize_disklabel_disk} is not set, not resizing disklabel"
return
fi
if [ x"${resize_disklabel_part}" = "x" ]; then
warn "\${resize_disklabel_part} is not set, not resizing disklabel"
return
fi
grow_disklabel "${resize_disklabel_disk}" "${resize_disklabel_part}"
}
load_rc_config $name
run_rc_command "$1"

View File

@ -1,5 +1,5 @@
#!/bin/sh
# $NetBSD: mkimage,v 1.54 2015/04/06 17:59:36 jmcneill Exp $
# $NetBSD: mkimage,v 1.55 2015/04/06 20:19:28 jmcneill Exp $
#
# Copyright (c) 2013, 2014 The NetBSD Foundation, Inc.
# All rights reserved.
@ -109,6 +109,7 @@ selected_sets="$sets"
dsets_p=false
xsets_p=false
minwrites=false
resize=false
rootdev=ld
OPTIND=1