mirror of
https://github.com/Stichting-MINIX-Research-Foundation/netbsd.git
synced 2025-09-13 00:57:28 -04:00
72 lines
1.4 KiB
Bash
72 lines
1.4 KiB
Bash
#!/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"
|