1 1.1.2.2 snj #!/bin/sh 2 1.1.2.2 snj # 3 1.1.2.2 snj # $NetBSD: resize_disklabel,v 1.1.2.2 2015/08/06 21:13:43 snj Exp $ 4 1.1.2.2 snj # 5 1.1.2.2 snj 6 1.1.2.2 snj # PROVIDE: resize_disklabel 7 1.1.2.2 snj # REQUIRE: fsck_root 8 1.1.2.2 snj # BEFORE: resize_root 9 1.1.2.2 snj 10 1.1.2.2 snj $_rc_subr_loaded . /etc/rc.subr 11 1.1.2.2 snj 12 1.1.2.2 snj name="resize_disklabel" 13 1.1.2.2 snj rcvar=$name 14 1.1.2.2 snj start_cmd="resize_disklabel_start" 15 1.1.2.2 snj stop_cmd=":" 16 1.1.2.2 snj 17 1.1.2.2 snj get_rawpart() 18 1.1.2.2 snj { 19 1.1.2.2 snj partno=$(/sbin/sysctl -n kern.rawpartition) 20 1.1.2.2 snj test $partno = 2 && echo c || echo d 21 1.1.2.2 snj } 22 1.1.2.2 snj 23 1.1.2.2 snj get_total_sectors() 24 1.1.2.2 snj { 25 1.1.2.2 snj disk=$1 26 1.1.2.2 snj /sbin/drvctl -p $disk disk-info/geometry/sectors-per-unit 27 1.1.2.2 snj } 28 1.1.2.2 snj 29 1.1.2.2 snj get_rawpart_sectors() 30 1.1.2.2 snj { 31 1.1.2.2 snj disk=$1 32 1.1.2.2 snj rawpart=$2 33 1.1.2.2 snj /sbin/disklabel $disk | grep "^ $rawpart:" | awk '{ print $2; }' 34 1.1.2.2 snj } 35 1.1.2.2 snj 36 1.1.2.2 snj grow_disklabel() 37 1.1.2.2 snj { 38 1.1.2.2 snj disk=$1 39 1.1.2.2 snj part=$2 40 1.1.2.2 snj rawpart=$(get_rawpart) 41 1.1.2.2 snj 42 1.1.2.2 snj ts=$(get_total_sectors $disk) 43 1.1.2.2 snj rs=$(get_rawpart_sectors $disk $rawpart) 44 1.1.2.2 snj 45 1.1.2.2 snj if [ "$ts" = "$rs" ]; then 46 1.1.2.2 snj return 47 1.1.2.2 snj fi 48 1.1.2.2 snj 49 1.1.2.2 snj oldsize=$(($rs * 512 / 1024 / 1024)) 50 1.1.2.2 snj newsize=$(($ts * 512 / 1024 / 1024)) 51 1.1.2.2 snj echo "Growing $disk disklabel (${oldsize}MB -> ${newsize}MB)" 52 1.1.2.2 snj printf "A\ny\n$part\n\n\n\$\nc\n\n\n\$\nd\n\n\n\$\nW\ny\nQ\n" | \ 53 1.1.2.2 snj disklabel -i $disk >/dev/null 54 1.1.2.2 snj } 55 1.1.2.2 snj 56 1.1.2.2 snj resize_disklabel_start() 57 1.1.2.2 snj { 58 1.1.2.2 snj if [ x"${resize_disklabel_disk}" = "x" ]; then 59 1.1.2.2 snj warn "\${resize_disklabel_disk} is not set, not resizing disklabel" 60 1.1.2.2 snj return 61 1.1.2.2 snj fi 62 1.1.2.2 snj if [ x"${resize_disklabel_part}" = "x" ]; then 63 1.1.2.2 snj warn "\${resize_disklabel_part} is not set, not resizing disklabel" 64 1.1.2.2 snj return 65 1.1.2.2 snj fi 66 1.1.2.2 snj 67 1.1.2.2 snj grow_disklabel "${resize_disklabel_disk}" "${resize_disklabel_part}" 68 1.1.2.2 snj } 69 1.1.2.2 snj 70 1.1.2.2 snj load_rc_config $name 71 1.1.2.2 snj run_rc_command "$1" 72