add an rc.d script to automatically grow the specified FS... It has

been tested on both MBR and GPT...  It won't be enabled until you add
growfs_enable="YES" and will only run on first boot..
This commit is contained in:
John-Mark Gurney 2014-11-02 00:11:25 +00:00
parent cdcf242896
commit 7bd12696d7
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=273955
4 changed files with 164 additions and 0 deletions

View File

@ -49,6 +49,7 @@ FILES= DAEMON \
geli \
geli2 \
gptboot \
growfs \
gssd \
hastd \
${_hcsecd} \

98
etc/rc.d/growfs Executable file
View File

@ -0,0 +1,98 @@
#!/bin/sh
#
# Copyright 2014 John-Mark Gurney
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
# $FreeBSD$
#
# PROVIDE: growfs
# BEFORE: sysctl
# KEYWORD: firstboot
# This allows us to distribute a image
# and have it work on essentially any size drive.
#
# TODO: Figure out where this should really be ordered.
# I suspect it should go just after fsck but before mountcritlocal
# but it's hard to tell for sure because of the bug described
# below.
#
. /etc/rc.subr
name="growfs"
start_cmd="growfs_start"
stop_cmd=":"
rcvar="growfs_enable"
growfs_start ()
{
echo "Growing root partition to fill device"
rootdev=$(df / | tail -n 1 | awk '{ sub("/dev/", "", $1); print $1 }')
if [ x"$rootdev" = x"${rootdev%/*}" ]; then
# raw device
rawdev="$rootdev"
else
rawdev=$(glabel status | awk '$1 == "'"$rootdev"'" { print $3 }')
if [ x"$rawdev" = x"" ]; then
echo "Can't figure out device for: $rootdev"
return
fi
fi
sysctl -b kern.geom.conftxt | awk '
{
lvl=$1
device[lvl] = $3
type[lvl] = $2
idx[lvl] = $7
parttype[lvl] = $13
if (dev == $3) {
for (i = 1; i <= lvl; i++) {
# resize
if (type[i] == "PART") {
pdev = device[i - 1]
cmd[i] = "gpart resize -i " idx[i] " " pdev
if (parttype[i] == "GPT")
cmd[i] = "gpart recover " pdev " ; " cmd[i]
} else if (type[i] == "LABEL") {
continue
} else {
print "unhandled type: " type[i]
exit 1
}
}
for (i = 1; i <= lvl; i++) {
if (cmd[i])
system(cmd[i])
}
exit 0
}
}' dev="$rawdev"
growfs -y /dev/"$rootdev"
}
load_rc_config $name
run_rc_command "$1"

View File

@ -14,6 +14,7 @@ MAN= adding_user.7 \
environ.7 \
ffs.7 \
firewall.7 \
growfs.7 \
hier.7 \
hostname.7 \
intro.7 \

64
share/man/man7/growfs.7 Normal file
View File

@ -0,0 +1,64 @@
.\" Copyright 2014 John-Mark Gurney
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" $FreeBSD$
.\"
.Dd November 1, 2014
.Dt GROWFS 7
.Os
.Sh NAME
.Nm growfs
.Nd start up script to grow the root file-system.
.Sh DESCRIPTION
The following options in
.Pa /etc/rc.conf
control the behavior of
.Nm :
.Bl -tag -width ".Va growfs_enable" -offset indent
.It Va growfs_enable
.Pq Dq Li NO
If set to
.Dq Li YES ,
the first time the machine boots, the root file-system will be automatically
expanded, if possible, to fill up all available space after it.
.El
.Pp
To expand the root file-system with-out rebooting, run the following command:
.Dl % /etc/rc.d/growfs onestart
.Sh IMPLEMENTATION NOTES
The script requires that
.Pa awk
be present and on the path.
This usually means that
.Pa /usr
should be mounted prior to running the script.
.Sh FILES
.Pa /etc/rc.conf
.Sh EXIT STATUS
.Ex -std
.Sh SEE ALSO
.Xr rc.conf 5
.Sh AUTHORS
The man page and script were written by
.An John-Mark Gurney Aq Mt jmg@FreeBSD.org .