Home | History | Annotate | Line # | Download | only in files
resize_disklabel revision 1.1.2.2
      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