1#!/bin/sh 2# 3# $NetBSD: resize_root,v 1.3 2015/04/07 18:02:11 jmcneill Exp $ 4# 5 6# PROVIDE: resize_root 7# REQUIRE: fsck_root 8# KEYWORD: interactive 9 10$_rc_subr_loaded . /etc/rc.subr 11 12name="resize_root" 13rcvar=$name 14start_cmd="resize_root_start" 15stop_cmd=":" 16fstab_file=/etc/fstab 17rootmp="/" 18 19split_options() 20{ 21 local IFS 22 IFS=, 23 OPTS=$1 24 for i in $OPTS; do 25 echo $i 26 done 27} 28 29resize_root_start() 30{ 31 # if ! checkyesno $rcvar; then 32 # echo "Not resizing $rootmp: resize_root must be set to YES/yes/..." 33 # return 34 # fi 35 36 trap : 2 # Ignore SIGINT, SIGQUIT, so we 37 trap : 3 # enter single-user mode on failure. 38 39 # Do nothing if root file system is not mentioned in /etc/fstab, or if 40 # root file system seems to be a network mount, or if root file system 41 # is not ffs or if logging is enabled. 42 rootdev="" 43 while read fs_spec fs_file fs_vfstype fs_mntops fs_freq fs_passno 44 do 45 # skip comment or blank line 46 case "${fs_spec}" in 47 \#*|'') continue ;; 48 esac 49 50 # skip non-root 51 if [ "${fs_file}" != "$rootmp" ]; then 52 continue 53 fi 54 55 if [ "${fs_vfstype}" != "ffs" ]; then 56 echo "Not resizing $rootmp: not an ffs file system" 57 return 58 fi 59 60 case "${fs_spec}" in 61 *:*) 62 echo "Not resizing $rootmp: network mount" 63 return 64 ;; 65 esac 66 67 for opt in $(split_options "${fs_mntops}"); do 68 if [ "$opt" = "log" ]; then 69 echo "Not resizing $rootmp: logging unsupported" 70 return 71 fi 72 done 73 74 rootdev=${fs_spec%/*}/r${fs_spec##*/} 75 break 76 done < "${fstab_file}" 77 78 if [ -z "$rootdev" ]; then 79 echo "Not resizing $rootmp: not listed in ${fstab_file}" 80 return 81 fi 82 83 if resize_ffs -c $rootdev; then 84 echo "Resizing $rootmp" 85 if ! resize_ffs -y $resize_root_flags $rootdev; then 86 echo "Error resizing root." 87 stop_boot 88 fi 89 if [ ! -z "${resize_root_postcmd}" ]; then 90 ${resize_root_postcmd} 91 fi 92 else 93 echo "Not resizing $rootmp: already correct size" 94 fi 95 return 96} 97 98load_rc_config $name 99run_rc_command "$1" 100