svn commit: r343918 - head/libexec/rc/rc.d

Colin Percival cperciva at FreeBSD.org
Fri Feb 8 19:19:32 UTC 2019


Author: cperciva
Date: Fri Feb  8 19:19:31 2019
New Revision: 343918
URL: https://svnweb.freebsd.org/changeset/base/343918

Log:
  Teach /etc/rc.d/growfs how to handle systems running ZFS.
  
  There are many cases which this code does not handle (e.g. ZFS mirrors)
  but the code can handle the single-disk case -- so it's enough to take
  care of the "disk image which gets booted into a VM with a larger than
  expected disk" case for which this firstboot script was created.
  
  MFC after:	1 week
  Differential Revision:	https://reviews.freebsd.org/D19095

Modified:
  head/libexec/rc/rc.d/growfs

Modified: head/libexec/rc/rc.d/growfs
==============================================================================
--- head/libexec/rc/rc.d/growfs	Fri Feb  8 18:31:54 2019	(r343917)
+++ head/libexec/rc/rc.d/growfs	Fri Feb  8 19:19:31 2019	(r343918)
@@ -49,7 +49,20 @@ rcvar="growfs_enable"
 growfs_start ()
 {
 	echo "Growing root partition to fill device"
-	rootdev=$(df / | tail -n 1 | awk '{ sub("/dev/", "", $1); print $1 }')
+	FSTYPE=$(mount -p | awk '{ if ( $2 == "/") { print $3 }}')
+	FSDEV=$(mount -p | awk '{ if ( $2 == "/") { print $1 }}')
+	case "$FSTYPE" in
+	ufs)
+		rootdev=${FSDEV#/dev/}
+		;;
+	zfs)
+		pool=${FSDEV%%/*}
+		rootdev=$(zpool list -v $pool | tail -n 1 | awk '{ print $1 }')
+		;;
+	*)
+		echo "Don't know how to grow root filesystem type: $FSTYPE"
+		return
+	esac
 	if [ x"$rootdev" = x"${rootdev%/*}" ]; then
 		# raw device
 		rawdev="$rootdev"
@@ -91,7 +104,14 @@ growfs_start ()
 	}
 }' dev="$rawdev"
 	gpart commit "$rootdev"
-	growfs -y /dev/"$rootdev"
+	case "$FSTYPE" in
+	ufs)
+		growfs -y /dev/"$rootdev"
+		;;
+	zfs)
+		zpool online -e $pool $rootdev
+		;;
+	esac
 }
 
 load_rc_config $name


More information about the svn-src-head mailing list