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