1*aa66c525SYuri Pankov#!/bin/sh 2*aa66c525SYuri Pankov# 3*aa66c525SYuri Pankov# CDDL HEADER START 4*aa66c525SYuri Pankov# 5*aa66c525SYuri Pankov# The contents of this file are subject to the terms of the 6*aa66c525SYuri Pankov# Common Development and Distribution License, Version 1.0 only 7*aa66c525SYuri Pankov# (the "License"). You may not use this file except in compliance 8*aa66c525SYuri Pankov# with the License. 9*aa66c525SYuri Pankov# 10*aa66c525SYuri Pankov# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 11*aa66c525SYuri Pankov# or http://www.opensolaris.org/os/licensing. 12*aa66c525SYuri Pankov# See the License for the specific language governing permissions 13*aa66c525SYuri Pankov# and limitations under the License. 14*aa66c525SYuri Pankov# 15*aa66c525SYuri Pankov# When distributing Covered Code, include this CDDL HEADER in each 16*aa66c525SYuri Pankov# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 17*aa66c525SYuri Pankov# If applicable, add the following below this CDDL HEADER, with the 18*aa66c525SYuri Pankov# fields enclosed by brackets "[]" replaced with your own identifying 19*aa66c525SYuri Pankov# information: Portions Copyright [yyyy] [name of copyright owner] 20*aa66c525SYuri Pankov# 21*aa66c525SYuri Pankov# CDDL HEADER END 22*aa66c525SYuri Pankov# 23*aa66c525SYuri Pankov 24*aa66c525SYuri Pankov# 25*aa66c525SYuri Pankov# Copyright 2003 Sun Microsystems, Inc. All rights reserved. 26*aa66c525SYuri Pankov# Use is subject to license terms. 27*aa66c525SYuri Pankov# 28*aa66c525SYuri Pankov 29*aa66c525SYuri Pankov#exec newfs -G "$@" 30*aa66c525SYuri Pankov 31*aa66c525SYuri Pankovmyname=`basename $0` 32*aa66c525SYuri PankovUSAGE="usage: $myname [ -M mount-point ] [ newfs-options ] raw-special-device" 33*aa66c525SYuri Pankovif [ ! "$UFS_MKFS" ]; then 34*aa66c525SYuri Pankov UFS_MKFS="/usr/lib/fs/ufs/mkfs" 35*aa66c525SYuri Pankovfi 36*aa66c525SYuri Pankovverbose="" 37*aa66c525SYuri Pankovmkfs_opts="-G" 38*aa66c525SYuri Pankovmkfs_subopts="" 39*aa66c525SYuri Pankovsize="" 40*aa66c525SYuri Pankovnewsize=0 41*aa66c525SYuri Pankovmount_pt= 42*aa66c525SYuri PankovUFS_MKFS_NOTENOUGHSPACE=33 43*aa66c525SYuri Pankov 44*aa66c525SYuri Pankovadd_opt() { 45*aa66c525SYuri Pankov mkfs_opts="$mkfs_opts $1" 46*aa66c525SYuri Pankov} 47*aa66c525SYuri Pankov 48*aa66c525SYuri Pankovadd_subopt() { 49*aa66c525SYuri Pankov if [ ! "$mkfs_subopts" ]; then 50*aa66c525SYuri Pankov mkfs_subopts="-o $1" 51*aa66c525SYuri Pankov else 52*aa66c525SYuri Pankov mkfs_subopts="$mkfs_subopts,$1" 53*aa66c525SYuri Pankov fi 54*aa66c525SYuri Pankov} 55*aa66c525SYuri Pankov 56*aa66c525SYuri Pankovwhile getopts "GM:Nva:b:c:d:f:i:m:n:o:r:s:t:C:" c ; do 57*aa66c525SYuri Pankov save=$OPTIND 58*aa66c525SYuri Pankov 59*aa66c525SYuri Pankov case $c in 60*aa66c525SYuri Pankov G) ;; 61*aa66c525SYuri Pankov M) add_opt "-M $OPTARG"; mount_pt="$OPTARG" ;; 62*aa66c525SYuri Pankov N) add_subopt "N" ;; 63*aa66c525SYuri Pankov v) verbose="1" ;; 64*aa66c525SYuri Pankov a) add_subopt "apc=$OPTARG" ;; 65*aa66c525SYuri Pankov b) add_subopt "bsize=$OPTARG" ;; 66*aa66c525SYuri Pankov c) add_subopt "cgsize=$OPTARG" ;; 67*aa66c525SYuri Pankov d) add_subopt "gap=$OPTARG" ;; 68*aa66c525SYuri Pankov f) add_subopt "fragsize=$OPTARG" ;; 69*aa66c525SYuri Pankov i) add_subopt "nbpi=$OPTARG" ;; 70*aa66c525SYuri Pankov m) add_subopt "free=$OPTARG" ;; 71*aa66c525SYuri Pankov n) add_subopt "nrpos=$OPTARG" ;; 72*aa66c525SYuri Pankov o) add_subopt "opt=$OPTARG" ;; 73*aa66c525SYuri Pankov r) add_subopt "rps=`expr $OPTARG / 60`" ;; 74*aa66c525SYuri Pankov s) size=$OPTARG ;; 75*aa66c525SYuri Pankov t) add_subopt "ntrack=$OPTARG" ;; 76*aa66c525SYuri Pankov C) add_subopt "maxcontig=$OPTARG" ;; 77*aa66c525SYuri Pankov \?) echo $USAGE; exit 1 ;; 78*aa66c525SYuri Pankov esac 79*aa66c525SYuri Pankov 80*aa66c525SYuri Pankov OPTIND=$save 81*aa66c525SYuri Pankovdone 82*aa66c525SYuri Pankov 83*aa66c525SYuri Pankovshift `expr $OPTIND - 1` 84*aa66c525SYuri Pankovif [ $# -ne 1 ]; then 85*aa66c525SYuri Pankov echo $USAGE 86*aa66c525SYuri Pankov exit 1 87*aa66c525SYuri Pankovfi 88*aa66c525SYuri Pankovraw_special=$1 89*aa66c525SYuri Pankov 90*aa66c525SYuri Pankovif [ ! "$size" ]; then 91*aa66c525SYuri Pankov size=`devinfo -p $raw_special | awk '{ print $5 }'` 92*aa66c525SYuri Pankov if [ $? -ne 0 -o ! "$size" ]; then 93*aa66c525SYuri Pankov echo "$myname: cannot get partition size" 94*aa66c525SYuri Pankov exit 2 95*aa66c525SYuri Pankov fi 96*aa66c525SYuri Pankovfi 97*aa66c525SYuri Pankov 98*aa66c525SYuri Pankovcmd="$UFS_MKFS $mkfs_opts $mkfs_subopts $raw_special $size" 99*aa66c525SYuri Pankovif [ -n "$verbose" ]; then 100*aa66c525SYuri Pankov echo $cmd 101*aa66c525SYuri Pankovfi 102*aa66c525SYuri Pankov$cmd; retv=$? 103*aa66c525SYuri Pankov 104*aa66c525SYuri Pankovif [ $retv -eq $UFS_MKFS_NOTENOUGHSPACE ]; then 105*aa66c525SYuri Pankov echo "Growing filesystem in increments due to limited available space." 106*aa66c525SYuri Pankov 107*aa66c525SYuri Pankov while [ "$newsize" -lt "$size" ]; do 108*aa66c525SYuri Pankov cmd="$UFS_MKFS $mkfs_opts $mkfs_subopts -P $raw_special $size" 109*aa66c525SYuri Pankov if [ -n "$verbose" ]; then 110*aa66c525SYuri Pankov echo $cmd 111*aa66c525SYuri Pankov fi 112*aa66c525SYuri Pankov newsize=`$cmd`; retv=$? 113*aa66c525SYuri Pankov if [ 0 -ne $retv -o -z "$newsize" ]; then 114*aa66c525SYuri Pankov echo "$myname: cannot probe the possible file system size" 115*aa66c525SYuri Pankov exit 2 116*aa66c525SYuri Pankov fi 117*aa66c525SYuri Pankov if [ 0 -eq "$newsize" ]; then 118*aa66c525SYuri Pankov echo "$myname: the file system is full and cannot be grown, please delete some files" 119*aa66c525SYuri Pankov exit 2 120*aa66c525SYuri Pankov fi 121*aa66c525SYuri Pankov 122*aa66c525SYuri Pankov cmd="$UFS_MKFS $mkfs_opts $mkfs_subopts $raw_special $newsize"; retv=$? 123*aa66c525SYuri Pankov if [ -n "$verbose" ]; then 124*aa66c525SYuri Pankov echo $cmd 125*aa66c525SYuri Pankov fi 126*aa66c525SYuri Pankov $cmd; retv=$? 127*aa66c525SYuri Pankov if [ 0 -ne $retv ]; then 128*aa66c525SYuri Pankov echo "$myname: cannot grow file system to $newsize sectors" 129*aa66c525SYuri Pankov exit $retv 130*aa66c525SYuri Pankov fi 131*aa66c525SYuri Pankov done 132*aa66c525SYuri Pankov echo \ 133*aa66c525SYuri Pankov"\nThe incremental grow has successfully completed, but since the first growth \ 134*aa66c525SYuri Pankovattempt failed (see output from first mkfs(1M) run), the filesystem is still \ 135*aa66c525SYuri Pankovlocked and needs to be checked with fsck(1M).\n\ 136*aa66c525SYuri PankovPlease run \`fsck -F ufs $raw_special' and then unlock the filesystem \ 137*aa66c525SYuri Pankovwith \`lockfs -u $mount_pt'." | fmt; 138*aa66c525SYuri Pankov 139*aa66c525SYuri Pankovfi 140*aa66c525SYuri Pankov 141*aa66c525SYuri Pankovexit $retv 142