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
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to