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
This commit is contained in:
Colin Percival 2019-02-08 19:19:31 +00:00
parent bc8fc00705
commit efed7c6db7
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=343918

View File

@ -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