growfs (b68e6569221ecade8899eaab8e1b088947ef2f8a) growfs (045001075ed18295288176211456dde3df7faf46)
1#!/bin/sh
2#
3# Copyright 2014 John-Mark Gurney
4# All rights reserved.
5#
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions
8# are met:

--- 34 unchanged lines hidden (view full) ---

43. /etc/rc.subr
44
45name="growfs"
46desc="Grow root partition to fill device"
47start_cmd="growfs_start"
48stop_cmd=":"
49rcvar="growfs_enable"
50
1#!/bin/sh
2#
3# Copyright 2014 John-Mark Gurney
4# All rights reserved.
5#
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions
8# are met:

--- 34 unchanged lines hidden (view full) ---

43. /etc/rc.subr
44
45name="growfs"
46desc="Grow root partition to fill device"
47start_cmd="growfs_start"
48stop_cmd=":"
49rcvar="growfs_enable"
50
51growfs_get_diskdev ()
52{
53 local _search=${1}
54 sysctl -b kern.geom.conftxt |
55 while read x1 _type _dev line
56 do
57 if [ "${_type}" = "DISK" -a -n "$(echo ${_search} | grep ${_dev})" ]; then
58 echo -n ${_dev}
59 break
60 fi
61 done
62}
63
51growfs_start ()
52{
53 echo "Growing root partition to fill device"
54 FSTYPE=$(mount -p | awk '{ if ( $2 == "/") { print $3 }}')
55 FSDEV=$(mount -p | awk '{ if ( $2 == "/") { print $1 }}')
56 case "$FSTYPE" in
57 ufs)
58 rootdev=${FSDEV#/dev/}

--- 5 unchanged lines hidden (view full) ---

64 *)
65 echo "Don't know how to grow root filesystem type: $FSTYPE"
66 return
67 esac
68 if [ x"$rootdev" = x"${rootdev%/*}" ]; then
69 # raw device
70 rawdev="$rootdev"
71 else
64growfs_start ()
65{
66 echo "Growing root partition to fill device"
67 FSTYPE=$(mount -p | awk '{ if ( $2 == "/") { print $3 }}')
68 FSDEV=$(mount -p | awk '{ if ( $2 == "/") { print $1 }}')
69 case "$FSTYPE" in
70 ufs)
71 rootdev=${FSDEV#/dev/}

--- 5 unchanged lines hidden (view full) ---

77 *)
78 echo "Don't know how to grow root filesystem type: $FSTYPE"
79 return
80 esac
81 if [ x"$rootdev" = x"${rootdev%/*}" ]; then
82 # raw device
83 rawdev="$rootdev"
84 else
72 rawdev=$(glabel status | awk '$1 == "'"$rootdev"'" { print $3 }')
85 rawdev=$(glabel status | awk -v rootdev=$rootdev 'index(rootdev, $1) { print $3; }')
73 if [ x"$rawdev" = x"" ]; then
74 echo "Can't figure out device for: $rootdev"
75 return
76 fi
77 fi
78
86 if [ x"$rawdev" = x"" ]; then
87 echo "Can't figure out device for: $rootdev"
88 return
89 fi
90 fi
91
92 if [ x"diskid" = x"${rootdev%/*}" ]; then
93 search=$rootdev
94 else
95 search=$rawdev
96 fi
97
98 diskdev=$(growfs_get_diskdev ${search})
99 if [ -z "${diskdev}" ]; then
100 diskdev=${rootdev}
101 fi
102
79 sysctl -b kern.geom.conftxt | awk '
80{
81 lvl=$1
82 device[lvl] = $3
83 type[lvl] = $2
84 idx[lvl] = $7
85 parttype[lvl] = $13
86 if (dev == $3) {

--- 12 unchanged lines hidden (view full) ---

99 }
100 }
101 for (i = 1; i <= lvl; i++) {
102 if (cmd[i])
103 system(cmd[i])
104 }
105 exit 0
106 }
103 sysctl -b kern.geom.conftxt | awk '
104{
105 lvl=$1
106 device[lvl] = $3
107 type[lvl] = $2
108 idx[lvl] = $7
109 parttype[lvl] = $13
110 if (dev == $3) {

--- 12 unchanged lines hidden (view full) ---

123 }
124 }
125 for (i = 1; i <= lvl; i++) {
126 if (cmd[i])
127 system(cmd[i])
128 }
129 exit 0
130 }
107}' dev="$rawdev"
108 gpart commit "$rootdev"
131}' dev="$search"
132 gpart commit "$diskdev" 2> /dev/null
109 case "$FSTYPE" in
110 ufs)
111 growfs -y /dev/"$rootdev"
112 ;;
113 zfs)
114 zpool online -e $pool $rootdev
115 ;;
116 esac
117}
118
119load_rc_config $name
120run_rc_command "$1"
133 case "$FSTYPE" in
134 ufs)
135 growfs -y /dev/"$rootdev"
136 ;;
137 zfs)
138 zpool online -e $pool $rootdev
139 ;;
140 esac
141}
142
143load_rc_config $name
144run_rc_command "$1"