Module Name: src Committed By: mlelstv Date: Sat Feb 18 07:58:35 UTC 2023
Modified Files: src/distrib/utils/embedded/files: resize_disklabel Log Message: Handle arbitrary raw partitions. Fetch geometry from disklabel to be consistent. Use disktab format instead of the normal human-readable output for parsing the disklabel. Avoid overflows in size computation. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/distrib/utils/embedded/files/resize_disklabel Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/distrib/utils/embedded/files/resize_disklabel diff -u src/distrib/utils/embedded/files/resize_disklabel:1.3 src/distrib/utils/embedded/files/resize_disklabel:1.4 --- src/distrib/utils/embedded/files/resize_disklabel:1.3 Sat Oct 6 09:58:55 2018 +++ src/distrib/utils/embedded/files/resize_disklabel Sat Feb 18 07:58:34 2023 @@ -1,6 +1,6 @@ #!/bin/sh # -# $NetBSD: resize_disklabel,v 1.3 2018/10/06 09:58:55 jmcneill Exp $ +# $NetBSD: resize_disklabel,v 1.4 2023/02/18 07:58:34 mlelstv Exp $ # # PROVIDE: resize_disklabel @@ -16,25 +16,35 @@ stop_cmd=":" get_rawpart() { + local partno + partno=$(/sbin/sysctl -n kern.rawpartition) - test $partno = 2 && echo c || echo d + printf "$(printf \\\\%o $((partno + 97)))" } get_total_sectors() { + local disk + disk=$1 - /sbin/drvctl -p $disk disk-info/geometry/sectors-per-unit + /sbin/disklabel -t "$disk" \ + | sed -ne 's/.*:su#\([0-9]*\):.*/\1/p' } get_rawpart_sectors() { + local disk rawpart + disk=$1 rawpart=$2 - /sbin/disklabel $disk | grep "^ $rawpart:" | awk '{ print $2; }' + /sbin/disklabel -t "$disk" \ + | sed -ne 's/.*:p'"$rawpart"'#\([0-9]*\):.*/\1/p' } grow_mbrpart() { + local disk rawpart ts rs oldsize newsize + disk=$1 rawpart=$(get_rawpart) @@ -44,21 +54,23 @@ grow_mbrpart() return fi - ts=$(($(get_total_sectors $disk) - ${PART1START})) + ts=$((${DLSIZE} - ${PART1START})) rs=${PART1SIZE} if [ "$ts" = "$rs" ]; then return fi - oldsize=$(($rs * 512 / 1024 / 1024)) - newsize=$(($ts * 512 / 1024 / 1024)) + oldsize=$(($rs / 2048)) + newsize=$(($ts / 2048)) echo "Growing $disk MBR partition #1 (${oldsize}MB -> ${newsize}MB)" /sbin/fdisk -f -u -1 -s 169/${PART1START}/${ts} ${disk} } grow_disklabel() { + local disk part rawpart ts rs oldsize newsize + disk=$1 part=$2 rawpart=$(get_rawpart) @@ -70,8 +82,8 @@ grow_disklabel() return fi - oldsize=$(($rs * 512 / 1024 / 1024)) - newsize=$(($ts * 512 / 1024 / 1024)) + oldsize=$(($rs / 2048)) + newsize=$(($ts / 2048)) 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