resize_disklabel revision 1.2
11.1Sjmcneill#!/bin/sh 21.1Sjmcneill# 31.2Sjmcneill# $NetBSD: resize_disklabel,v 1.2 2017/04/14 13:47:21 jmcneill Exp $ 41.1Sjmcneill# 51.1Sjmcneill 61.1Sjmcneill# PROVIDE: resize_disklabel 71.1Sjmcneill# REQUIRE: fsck_root 81.1Sjmcneill# BEFORE: resize_root 91.1Sjmcneill 101.1Sjmcneill$_rc_subr_loaded . /etc/rc.subr 111.1Sjmcneill 121.1Sjmcneillname="resize_disklabel" 131.1Sjmcneillrcvar=$name 141.1Sjmcneillstart_cmd="resize_disklabel_start" 151.1Sjmcneillstop_cmd=":" 161.1Sjmcneill 171.1Sjmcneillget_rawpart() 181.1Sjmcneill{ 191.1Sjmcneill partno=$(/sbin/sysctl -n kern.rawpartition) 201.1Sjmcneill test $partno = 2 && echo c || echo d 211.1Sjmcneill} 221.1Sjmcneill 231.1Sjmcneillget_total_sectors() 241.1Sjmcneill{ 251.1Sjmcneill disk=$1 261.1Sjmcneill /sbin/drvctl -p $disk disk-info/geometry/sectors-per-unit 271.1Sjmcneill} 281.1Sjmcneill 291.1Sjmcneillget_rawpart_sectors() 301.1Sjmcneill{ 311.1Sjmcneill disk=$1 321.1Sjmcneill rawpart=$2 331.1Sjmcneill /sbin/disklabel $disk | grep "^ $rawpart:" | awk '{ print $2; }' 341.1Sjmcneill} 351.1Sjmcneill 361.2Sjmcneillgrow_mbrpart() 371.2Sjmcneill{ 381.2Sjmcneill disk=$1 391.2Sjmcneill rawpart=$(get_rawpart) 401.2Sjmcneill 411.2Sjmcneill eval $(/sbin/fdisk -S $disk) 421.2Sjmcneill if [ ! "$PART1ID" = "169" ]; then 431.2Sjmcneill warn "No NetBSD partition found in MBR partition #1" 441.2Sjmcneill return 451.2Sjmcneill fi 461.2Sjmcneill 471.2Sjmcneill ts=$(($(get_total_sectors $disk) - ${PART1START})) 481.2Sjmcneill rs=${PART1SIZE} 491.2Sjmcneill 501.2Sjmcneill if [ "$ts" = "$rs" ]; then 511.2Sjmcneill return 521.2Sjmcneill fi 531.2Sjmcneill 541.2Sjmcneill oldsize=$(($rs * 512 / 1024 / 1024)) 551.2Sjmcneill newsize=$(($ts * 512 / 1024 / 1024)) 561.2Sjmcneill echo "Growing $disk MBR partition #1 (${oldsize}MB -> ${newsize}MB)" 571.2Sjmcneill /sbin/fdisk -f -u -1 -s 169/${PART1START}/${ts} ${disk} 581.2Sjmcneill} 591.2Sjmcneill 601.1Sjmcneillgrow_disklabel() 611.1Sjmcneill{ 621.1Sjmcneill disk=$1 631.1Sjmcneill part=$2 641.1Sjmcneill rawpart=$(get_rawpart) 651.1Sjmcneill 661.1Sjmcneill ts=$(get_total_sectors $disk) 671.1Sjmcneill rs=$(get_rawpart_sectors $disk $rawpart) 681.1Sjmcneill 691.1Sjmcneill if [ "$ts" = "$rs" ]; then 701.1Sjmcneill return 711.1Sjmcneill fi 721.1Sjmcneill 731.1Sjmcneill oldsize=$(($rs * 512 / 1024 / 1024)) 741.1Sjmcneill newsize=$(($ts * 512 / 1024 / 1024)) 751.1Sjmcneill echo "Growing $disk disklabel (${oldsize}MB -> ${newsize}MB)" 761.1Sjmcneill printf "A\ny\n$part\n\n\n\$\nc\n\n\n\$\nd\n\n\n\$\nW\ny\nQ\n" | \ 771.1Sjmcneill disklabel -i $disk >/dev/null 781.1Sjmcneill} 791.1Sjmcneill 801.1Sjmcneillresize_disklabel_start() 811.1Sjmcneill{ 821.1Sjmcneill if [ x"${resize_disklabel_disk}" = "x" ]; then 831.1Sjmcneill warn "\${resize_disklabel_disk} is not set, not resizing disklabel" 841.1Sjmcneill return 851.1Sjmcneill fi 861.1Sjmcneill if [ x"${resize_disklabel_part}" = "x" ]; then 871.1Sjmcneill warn "\${resize_disklabel_part} is not set, not resizing disklabel" 881.1Sjmcneill return 891.1Sjmcneill fi 901.1Sjmcneill 911.2Sjmcneill grow_mbrpart "${resize_disklabel_disk}" 921.1Sjmcneill grow_disklabel "${resize_disklabel_disk}" "${resize_disklabel_part}" 931.1Sjmcneill} 941.1Sjmcneill 951.1Sjmcneillload_rc_config $name 961.1Sjmcneillrun_rc_command "$1" 97