VOLUME / DISK MANAGEMENT
AT THIS POINT, LET'S ASSUME SOMETHING HAS CHANGED AND WE NEED ADDITIONAL STORAGE (E.G. ACQUIRED NEW COMPANY, ADDED MORE PEOPLE, ETC.)
FOR THIS SCENARIO, WE ARE EXPECTING STORAGE SPACE TO REQUIRE 25 GB FOR ALL USER MAILBOXES. IF THEY NEED 25 GB FOR STORAGE, LET'S DOUBLE THAT AMOUNT FOR THE ACTUAL SIZE. HERE IS THE PLANNED ADJUSTMENTS FOR EACH FILE SYSTEM:
OPT = 50 GB (DOUBLE THE EXPECTED/ACTUAL MAILBOX STORAGE)
TEMP = 100 GB (DOUBLE THE OPT SIZE)
BACKUP = 100 GB (DOUBLE THE OPT SIZE)
IN THE ANALYSIS AND DESIGN SECTION, WE WANTED TO HAVE SOME FILE SYSTEMS SMALLER THAN THE LOGICAL VOLUME ON WHICH THEY SIT. THIS WILL ALLOW US TO ALLOCATE ADDITIONAL SPACE WHEN NEEDED. HOWEVER, WHEN WE CREATED THE VOLUMES, UBUNTU AUTOMATICALLY EXPANDED THE FILE SYSTEMS TO THE MAXIMUM SIZE OF THE VOLUME. NORMALLY, THIS IS OK...BUT WE WANT A SYSTEM THAT WILL ALLOW GROWTH WHEN NEEDED AND ENSURE THAT WE WILL HAVE TIME TO ADD ADDITIONAL HARD DRIVES BEFORE THEY ARE NEEDED WHICH WILL KEEP US FROM BEING STUCK BETWEEN A ROCK AND A HARD PLACE!
THE DESIGN CALLS FOR THE BACKUP, OPT AND TEMP FILE SYSTEMS TO BE SLIGHTLY SMALLER THAN THE MAXIMUM SPACE AVAILABLE FOR THE LOGICAL VOLUME.
SO, LET'S MAKE THE LOGICAL VOLUMES AN EXTRA 25 GB LARGER. THIS MEANS THAT WE WILL NEED AN ADDITIONAL 275 GB OF STORAGE {(75 + 125 + 125 ) - 50}. IF WE ADD TWO DRIVES THAT ARE 140 GB EACH, THAT WILL BE JUST ENOUGH TO COVER OUR NEEDS. (NOTE: THIS WAS AN ARBITRARY NUMBER BECAUSE I WANTED TO SHOW YOU HOW TO ADD 2 DRIVES TO THE SYSTEM)
IF WE WERE TO TYPE
DF -H RIGHT NOW, WE SHOULD SEE SOMETHING LIKE THIS:
FILESYSTEM SIZE USED AVAIL USE% MOUNTED ON
/DEV/MAPPER/LVG-ROOT 8.7G 824M 7.5G 10% /
NONE 1000M 184K 1000M 1% /DEV
NONE 1005M 0 1005M 0% /DEV/SHM
NONE 1005M 32K 1005M 1% /VAR/RUN
NONE 1005M 0 1005M 0% /VAR/LOCK
NONE 1005M 0 1005M 0% /LIB/INIT/RW
/DEV/MAPPER/LVG-BAK 19G 172M 18G 1% /VAR/BACKUP
/DEV/MAPPER/LVG-OPT 9.2G 149M 8.6G 2% /OPT
/DEV/MAPPER/LVG-TEMP 19G 172M 18G 1% /VAR/TEMP
/DEV/SDA1 179M 17M 152M 10% /BOOT
SINCE I AM RUNNING VMWARE, ADDING ADDITIONAL SPACE IS A SNAP. HOWEVER, I WILL ADD IT IN SUCH A WAY THAT UBUNTU WILL SEE 2 DRIVES ADDED TO THE SYSTEM JUST AS IF WE WERE TO ADD 2 PHYSICAL DRIVES TO THE SERVER.
- SHUTDOWN AND POWER OFF THE SERVER BY TYPING SHUTDOWN -P NOW {ENTER}
- IN THE VSPHERE CLIENT, RIGHT-CLICK THE VIRTUAL MACHINE AND CHOOSE EDIT SETTINGS.
- ON THE HARDWARE TAB, CLICK THE ADD BUTTON AND SELECT HARD DISK. CLICK NEXT, CHOOSE "CREATE A NEW VIRTUAL DISK", CLICK NEXT, SET THE SIZE TO 140 GB, CLICK NEXT, NEXT, FINISH.
- ADD ANOTHER 140 GB DISK USING THE SAME STEPS ABOVE AND CLICK OK TO CLOSE THE SETTINGS AND ALLOW VMWARE TO PROCESS THE CHANGES.
COLLECT INFORMATION ABOUT THE NEWLY ADDED DRIVES.
- START THE UBUNTU SERVER AND CONNECT USING PUTTY.
- AT THE LOGIN PROMPT, LOGIN WITH YOUR ADMINISTRATOR ACCOUNT (ADMINISTRATOR / MYADMINPASS) AND THEN TYPE SU AND THE ROOT PASSWORD (MYROOTPASS)
- TYPE PVDISPLAY WHICH SHOULD SHOW SOMETHING SIMILAR TO THIS:
PV NAME /DEV/SDA5
VG NAME LVG
PV SIZE 62.81 GIB / NOT USABLE 3.00 MIB
ALLOCATABLE YES (BUT FULL)
PE SIZE 4.00 MIB
TOTAL PE 16079
FREE PE 0
ALLOCATED PE 16079
PV UUID XJUHYI-KLOS-KICZ-JLDD-E01T-7RYP-K3YQVM
THE IMPORTANT BITS OF INFO HERE ARE THE PV NAME AND VG NAME FOR OUR EXISTING CONFIGURATION.
- TYPE FDISK -L WHICH SHOULD SHOW SOMETHING SIMILAR TO THIS (HOWEVER I ABBREVIATED IT TO SHOW JUST THE IMPORTANT PARTS):
DISK /DEV/SDA: 67.6 GB, 67645734912 BYTES
DEVICE BOOT START END BLOCKS ID SYSTEM
/DEV/SDA1 * 1 25 194560 83 LINUX
PARTITION 1 DOES NOT END ON CYLINDER BOUNDARY.
/DEV/SDA2 25 8224 65862657 5 EXTENDED
/DEV/SDA5 25 8224 65862656 8E LINUX LVM
DISK /DEV/SDB: 150.3 GB, 150323855360 BYTES
DISK /DEV/SDB DOESN'T CONTAIN A VALID PARTITION TABLE
DISK /DEV/SDC: 150.3 GB, 150323855360 BYTES
DISK /DEV/SDC DOESN'T CONTAIN A VALID PARTITION TABLE
THE IMPORTANT BITS OF INFO HERE ARE THE DEVICE PATHS FOR THE NEW DRIVES WHICH ARE HIGHLIGHTED IN RED.
PREPARE THE FIRST DRIVE (/DEV/SDB) TO BE USED BY THE LVM
TYPE THE FOLLOWING:
FDISK /DEV/SDB
N (CREATE NEW PARTITION)
P (PRIMARY PARTITION)
1 (PARTITION NUMBER)
{ENTER} (USE DEFAULT FOR FIRST CYLINDER)
{ENTER} (USE DEFAULT FOR LAST CYLINDER)
T (CHANGE PARTITION TYPE)
8E (SET TO LINUX LVM)
P (PREVIEW HOW THE DRIVE WILL LOOK)
W (WRITE CHANGES)
PREPARE THE SECOND DRIVE (/DEV/SDC) TO BE USED BY THE LVM
DO THE EXACT SAME STEPS AS ABOVE BUT START WITH
FDISK /DEV/SDCCREATE PHYSICAL VOLUMES USING THE NEW DRIVES
IF WE TYPE
FDISK -L, WE NOW SEE /DEV/SDB1 AND /DEV/SDC1 WHICH ARE LINUX LVM PARTITIONS.
TYPE THE FOLLOWING TO CREATE PHYSICAL VOLUMES:
PVCREATE /DEV/SDB1
PVCREATE /DEV/SDC1
NOW ADD THE PHYSICAL VOLUMES TO THE VOLUME GROUP (LVG) BY TYPING THE FOLLOWING:
VGEXTEND LVG /DEV/SDB1
VGEXTEND LVG /DEV/SDC1
NOW THAT THE SPACE OF BOTH DRIVES HAVE BEEN ADDED TO THE LOGICAL VOLUME GROUP CALLED LVG, WE CAN NOW ALLOCATE THAT SPACE TO GROW THE LOGICAL VOLUME.
TO GET A LIST OF VOLUME PATHS TO USE IN THE NEXT COMMANDS, TYPE
LVSCAN TO SHOW YOUR CURRENT VOLUMES AND THEIR SIZES.
TYPE THE FOLLOWING TO GROW EACH VOLUME BY A SPECIFIED AMOUNT (THE NUMBER AFTER THE PLUS SIGN):
LVEXTEND -L+65G /DEV/LVG/OPT
LVEXTEND -L+105G /DEV/LVG/BAK
LVEXTEND -L+105G /DEV/LVG/TEMP
OR YOU CAN SPECIFY THE EXACT SIZE BY EXCLUDING THE PLUS SIGN AND SPECIFYING THE END-RESULT SIZE YOU WANT:
LVEXTEND -L75G /DEV/LVG/OPT
LVEXTEND -L125G /DEV/LVG/BAK
LVEXTEND -L125G /DEV/LVG/TEMP
TO SEE THE NEW SIZES, TYPE
LVSCANTHE LAST THING TO DO NOW IS THE ACTUAL GROWTH OF THE FILE SYSTEMS. WE WANT TO GROW THE EXISTING FILE SYSTEMS BUT ONLY TO A CERTAIN AMOUNT SO WE DO NOT TAKE UP ALL THE SPACE IN THE VOLUME...WE WANT ROOM TO GROW IN THE FUTURE SO WE HAVE TIME TO ORDER AND INSTALL NEW DRIVES WHEN NEEDED.
RESIZE2FS /DEV/LVG/OPT 50G
RESIZE2FS /DEV/LVG/BAK 100G
RESIZE2FS /DEV/LVG/TEMP 100G
IF WE NEED TO INCREASE SPACE IN /OPT AT A LATER POINT, WE CAN ISSUE THE FOLLOWING COMMAND (WITHOUT ANY DOWNTIME):
RESIZE2FS /DEV/LVG/OPT 51G
WE COULD CONTINUE TO INCREASE THIS PARTICULAR FILE SYSTEM ALL THE WAY UNTIL WE REACH THE LIMIT OF THE VOLUME WHICH IS 75 GB AT THE MOMENT.
REMEMBER,
DF -H WILL TELL YOU THE SIZE OF THE FILE SYSTEM AND
LVSCAN WILL TELL YOU THE SIZE OF THE VOLUMES WHERE THE FILE SYSTEMS LIVE IN.
IF WE WERE TO TYPE
DF -H RIGHT NOW, WE SHOULD SEE SOMETHING LIKE THIS:
FILESYSTEM SIZE USED AVAIL USE% MOUNTED ON
/DEV/MAPPER/LVG-ROOT 8.7G 824M 7.5G 10% /
NONE 1000M 200K 1000M 1% /DEV
NONE 1005M 0 1005M 0% /DEV/SHM
NONE 1005M 32K 1005M 1% /VAR/RUN
NONE 1005M 0 1005M 0% /VAR/LOCK
NONE 1005M 0 1005M 0% /LIB/INIT/RW
/DEV/MAPPER/LVG-BAK 99G 188M 94G 1% /VAR/BACKUP
/DEV/MAPPER/LVG-OPT 50G 159M 47G 1% /OPT
/DEV/MAPPER/LVG-TEMP 99G 188M 94G 1% /VAR/TEMP
/DEV/SDA1 179M 17M 152M 10% /BOOT
EDIT (2012-05-03): IN FAVOR OF MANAGE BY EXCEPTION, I WROTE A SCRIPT THAT CAN BE SCHEDULED TO RUN DAILY TO CHECK THE FILE SYSTEMS TO SEE IF THEY ARE GETTING CLOSE TO FILLING UP AND WILL AUTOMATICALLY EXPAND THEM A LITTLE BIT AND GIVE YOU AN EMAIL NOTICE. EVERYTHING IS DONE ON THE GIGABYTE LEVEL. IF YOU DO NOT WANT THE SCRIPT TO PERFORM THE INCREASE, SIMPLY ADD A POUND SIGN IN FRONT OF THE RESIZE2FS COMMAND ON LINE 64 TO COMMENT IT OUT. MIGHT ALSO WANT TO MODIFY THE LOG AND EMAIL MESSAGES SO IT DOES NOT LOOK LIKE IT ACTUALLY "PERFORMED" THE RESIZE BUT INSTEAD IS TELLING YOU HOW TO PERFORM THE RESIZE.
HERE ARE THE LINES I ADDED TO MY CRONTAB SCHEDULE WHICH WILL CHECK EACH FILE SYSTEM I EXPECT WILL GROW ON A DAILY BASIS @ 1AM, 2AM AND 3AM. I HAVE THEM CHECKING TO SEE IF WE HAVE LESS THAN 5GB AVAILABLE AND IF SO, IT WILL TRY TO INCREASE BY 1GB:
0 1 * * * /VAR/SCRIPTS/PROD/CHECK-STORAGE.SH OPT 5 1 > /DEV/NULL 2>&1
0 2 * * * /VAR/SCRIPTS/PROD/CHECK-STORAGE.SH BAK 5 1 > /DEV/NULL 2>&1
0 3 * * * /VAR/SCRIPTS/PROD/CHECK-STORAGE.SH TEMP 5 1 > /DEV/NULL 2>&1
/VAR/SCRIPTS/PROD/CHECK-STORAGE.SH
#!/BIN/BASH
#############################################
## NAME : CHECK-STORAGE.SH
## VERSION : 1.2
## DATE : 2012-05-01
## AUTHOR : LHAMMONDS
## PURPOSE : CHECK AVAILABLE SPACE FOR A FILE SYSTEM AND EXPAND IF NECESSARY.
## COMPATIBILITY : VERIFIED ON UBUNTU SERVER 10.04.4 LTS
## REQUIREMENTS : NONE
## RUN FREQUENCY : RECOMMEND ONCE PER DAY FOR EACH FS TO MONITOR.
## PARAMETERS :
## 1 = (REQUIRED) FILE SYSTEM NAME (E.G. OPT)
## 2 = (REQUIRED) FILE SYSTEM THRESHOLD (E.G. 2G)
## 3 = (REQUIRED) AMOUNT TO INCREASE FILE SYSTEM (E.G. 1G)
## EXIT CODES :
## 0 = SUCCESS (EITHER NOTHING WAS DONE OR FS EXPANDED WITHOUT ERROR)
## 1 = ERROR: MISSING OR INCORRECT PARAMETER(S)
## 2 = ERROR: INVALID PARAMETER VALUE(S)
## 4 = ERROR: LOCK FILE DETECTED
## 8 = ERROR: RESIZE2FS ERROR
## 16 = SEVERE: NO ROOM TO EXPAND
## 32 = ERROR: SCRIPT NOT RUN BY ROOT USER
################ CHANGE LOG #################
## DATE WHO WHAT WAS CHANGED
## ---------- --- ----------------------------
## 2012-05-01 LTH CREATED SCRIPT.
## 2012-05-02 LTH IMPROVED LOG MESSAGES.
## 2012-05-02 LTH IMPROVED EMAIL MESSAGES.
#############################################
## IMPORT STANDARD VARIABLES AND FUNCTIONS. ##
SOURCE /VAR/SCRIPTS/COMMON/STANDARD.CONF
## DEFINE LOCAL VARIABLES.
LOGFILE="${TEMPDIR}/CHECK-STORAGE.LOG"
LOCKFILE="${TEMPDIR}/CHECK-STORAGE.LOCK"
ERRORFLAG=0
RETURNCODE=0
#######################################
## FUNCTIONS ##
#######################################
FUNCTION F_CLEANUP()
{
IF [ -F ${LOCKFILE} ];THEN
## REMOVE LOCK FILE SO OTHER CHECK SPACE JOBS CAN RUN.
RM ${LOCKFILE} 1>/DEV/NULL 2>&1
FI
EXIT ${ERRORFLAG}
}
FUNCTION F_SHOWHELP()
{
ECHO -E "NUSAGE : ${SCRIPTNAME} FILESYSTEMNAME THRESHOLDSIZEINGB AMOUNTTOINCREASEBYINGBN"
ECHO -E "NEXAMPLE: ${SCRIPTNAME} OPT 2 1N"
}
FUNCTION F_AUTO-INCREMENT()
{
LET ROOMINLV=${LVSIZE}-${FSSIZE}
IF [[ ${ROOMINLV} -GT ${FSINCREASEBY} ]]; THEN
## THERE IS ROOM IN THE LV TO INCREASE SPACE TO THE FS.
RESIZE2FS ${FSVOL} ${NEWFSSIZE}G
RETURNCODE=$?
ECHO "`DATE +%Y-%M-%D_%H:%M:%S` --- RESIZE2FS ${FSVOL} ${NEWFSSIZE}G, RETURNCODE=${RETURNCODE}" | TEE -A ${LOGFILE}
IF [[ ${RETURNCODE} -NE 0 ]]; THEN
## THERE WAS AN ERROR IN RESIZE2FS.
RETURN ${RETURNCODE}
FI
ELSE
## THERE IS NOT ENOUGH ROOM IN THE LV TO INCREASE SPACE IN THE FS.
RETURN 50
FI
RETURN 0
}
#######################################
## MAIN PROGRAM ##
#######################################
IF [ -F ${LOCKFILE} ]; THEN
# LOCK FILE DETECTED. ABORT SCRIPT.
ECHO "CHECK SPACE SCRIPT ABORTED"
ECHO "THIS SCRIPT TRIED TO RUN BUT DETECTED THE LOCK FILE: ${LOCKFILE}"
ECHO "PLEASE CHECK TO MAKE SURE THE FILE DOES NOT REMAIN WHEN CHECK SPACE IS NOT ACTUALLY RUNNING."
F_SENDMAIL "ERROR: CHECK STORAGE SCRIPT ABORTED" "THIS SCRIPT TRIED TO RUN BUT DETECTED THE LOCK FILE: ${LOCKFILE}NNPLEASE CHECK TO MAKE SURE THE FILE DOES NOT REMAIN WHEN CHECK SPACE IS NOT ACTUALLY RUNNING.NNIF YOU FIND THAT THE SCRIPT IS NOT RUNNING/HUNG, YOU CAN REMOVE IT BY TYPING 'RM ${LOCKFILE}'"
ERRORFLAG=4
F_CLEANUP
ELSE
ECHO "`DATE +%Y-%M-%D_%H:%M:%S` ${SCRIPTNAME}" > ${LOCKFILE}
FI
## REQUIREMENT CHECK: SCRIPT MUST RUN AS ROOT USER.
IF [ "$(ID -U)" != "0" ]; THEN
## FATAL ERROR DETECTED: DOCUMENT PROBLEM AND TERMINATE SCRIPT.
ECHO "ERROR: ROOT USER REQUIRED TO RUN THIS SCRIPT."
ECHO ""
ERRORFLAG=32
F_CLEANUP
FI
## CHECK EXISTANCE OF REQUIRED COMMAND-LINE PARAMETERS.
CASE "$1" IN
"")
F_SHOWHELP
ERRORFLAG=1
F_CLEANUP
;;
--HELP|-H|-?)
F_SHOWHELP
ERRORFLAG=1
F_CLEANUP
;;
*)
FSNAME=$1
;;
ESAC
CASE "$2" IN
"")
F_SHOWHELP
ERRORFLAG=1
F_CLEANUP
;;
--HELP|-H|-?)
F_SHOWHELP
ERRORFLAG=1
F_CLEANUP
;;
*)
FSTHRESHOLD=$2
;;
ESAC
CASE "$3" IN
"")
F_SHOWHELP
ERRORFLAG=1
F_CLEANUP
;;
--HELP|-H|-?)
F_SHOWHELP
ERRORFLAG=1
F_CLEANUP
;;
*)
FSINCREASEBY=$3
;;
ESAC
## CHECK VALIDITY OF FILE SYSTEM NAME.
CASE "${FSNAME}" IN
"OPT")
FSVOL="/DEV/LVG/OPT"
FSMAP="/DEV/MAPPER/LVG-OPT"
;;
"BAK")
FSVOL="/DEV/LVG/BAK"
FSMAP="/DEV/MAPPER/LVG-BAK"
;;
"TEMP")
FSVOL="/DEV/LVG/TEMP"
FSMAP="/DEV/MAPPER/LVG-TEMP"
;;
*)
ECHO "ERROR: ${FSNAME} DOES NOT MATCH A KNOWN FILE SYSTEM DEFINED IN THIS SCRIPT."
F_SHOWHELP
ERRORFLAG=2
F_CLEANUP
;;
ESAC
## CHECK VALIDITY OF THRESHOLD VALUE.
TEST ${FSTHRESHOLD} -EQ 0 1>/DEV/NULL 2>&1
IF [[ $? -EQ 2 ]]; THEN
## THRESHOLD PARAMETER IS NOT AN INTEGER.
ECHO "ERROR: ${FSTHRESHOLD} IS NOT AN INTEGER."
F_SHOWHELP
ERRORFLAG=2
F_CLEANUP
FI
## CHECK VALIDITY OF INCREMENT VALUE.
TEST ${FSINCREASEBY} -EQ 0 1>/DEV/NULL 2>&1
IF [[ $? -EQ 2 ]]; THEN
## FSINCREASEBY PARAMETER IS NOT AN INTEGER.
ECHO "ERROR: ${FSINCREASEBY} IS NOT AN INTEGER."
F_SHOWHELP
ERRORFLAG=2
F_CLEANUP
FI
## GET AVAILABLE SPACE FOR THE FILE SYSTEM.
FSAVAILABLE="`DF --BLOCK-SIZE=G ${FSMAP} | AWK '{ PRINT $4 }' | TAIL -N 1 | SED 'S/G//'`"
## GET THE CURRENT SIZE OF THE FILE SYSTEM.
FSSIZE="`DF --BLOCK-SIZE=G ${FSMAP} | AWK '{ PRINT $2 }' | TAIL -N 1 | SED 'S/G//'`"
## GET THE CURRENT SIZE OF THE LOGICAL VOLUME FOR THE FILE SYSTEM
LVSIZE="`LVS --NOHEADINGS --NOSUFFIX --UNITS=G ${FSMAP} | AWK '{ PRINT $4}' | SED 'S/[.].*//'`"
## CALCULATE THE NEW SIZE OF THE FS IN CASE WE NEED IT.
LET NEWFSSIZE=${FSSIZE}+${FSINCREASEBY}
IF [[ ${FSAVAILABLE} -LT ${FSTHRESHOLD} ]]; THEN
ECHO "`DATE +%Y-%M-%D_%H:%M:%S` - STARTING EXPANSION OF ${FSVOL}" | TEE -A ${LOGFILE}
ECHO "`DATE +%Y-%M-%D_%H:%M:%S` --- LVSIZE=${LVSIZE}GB, FSSIZE=${FSSIZE}GB, FSAVAIL=${FSAVAILABLE}GB, FSTHRESHOLD=${FSTHRESHOLD}GB, FSINCREASEBY=${FSINCREASEBY}GB" | TEE -A ${LOGFILE}
## RUN THE AUTO-EXPANSION FUNCTION.
F_AUTO-INCREMENT
RETURNCODE=$?
CASE ${RETURNCODE} IN
0)
F_SENDMAIL "NOTICE: FILE SYSTEM EXPANDED" "${FSVOL} WAS EXPANDED BECAUSE IT WAS NEARING MAX CAPACITY. PLEASE REVIEW DISK SPACE USAGE AND PLAN APPROPRIATELY. LVSIZE=${LVSIZE}GB, FSSIZE=${FSSIZE}GB, FSAVAILABLE=${FSAVAILABLE}GB, FSTHRESHOLD=${FSTHRESHOLD}GB, FSINCREASEBY=${FSINCREASEBY}GB"
;;
50)
ECHO "`DATE +%Y-%M-%D_%H:%M:%S` - SEVERE: NO ROOM TO EXPAND ${FSVOL}" | TEE -A ${LOGFILE}
ERRORFLAG=16
F_SENDMAIL "SEVERE: NO ROOM TO EXPAND ${FSVOL}" "THERE IS NOT ENOUGH ROOM IN THE LOGICAL VOLUME TO EXPAND THE ${FSVOL} FILE SYSTEM. IMMEDIATE ACTION IS REQUIRED. MAKE SURE THERE IS FREE SPACE IN THE VOLUME GROUP 'LVG' AND THEN EXPAND THE LOGICAL VOLUME...THEN EXPAND THE FILE SYSTEM.NNLVSIZE=${LVSIZE}GB, FSSIZE=${FSSIZE}GB, FSAVAILABLE=${FSAVAILABLE}GB, FSTHRESHOLD=${FSTHRESHOLD}GB, FSINCREASEBY=${FSINCREASEBY}GB.NNTYPE 'VGS' TO SEE IF THERE IS ANY FREE SPACE IN THE VOLUME GROUP WHICH CAN BE GIVEN TO THE LOGICAL VOLUME.NNTYPE 'LVS' TO SEE THE CURRENT SIZES OF THE LVS.NNTYPE 'LVDISPLAY' TO SEE A LIST OF LOGICAL VOLUMES SO YOU CAN GET THE LV NAME WHICH IS USED IN THE LVEXTEND AND RESIZE2FS COMMANDS.NNTYPE 'LVEXTEND -L+1G /DEV/LVG/OPT' IF YOU WANT TO EXTEND THE OPT LOGICAL VOLUME BY 1 GIGABYTE (ASSUMING THERE IS 1GB AVAILABLE IN THE VOLUME GROUP).NNTYPE 'DF --BLOCK-SIZE=G' TO SEE A LIST OF FILE SYSTEMS AND THEIR ASSOCIATED SIZE AND AVAILABLE SPACE.NNTYPE 'RESIZE2FS /DEV/LVG/OPT ${NEWFSSIZE}G' TO SET THE SIZE OF OPT TO ${NEWFSSIZE} GIGABYTES. MAKE SURE YOU SET THE SIZE TO THE DESIRED END-RESULT WHICH SHOULD BE LARGER THAN THE CURRENT FS SIZE SO YOU DO NOT LOSE DATA."
;;
*)
ECHO "`DATE +%Y-%M-%D_%H:%M:%S` - ERROR: EXPANSION FAILURE FOR ${FSVOL}" | TEE -A ${LOGFILE}
ERRORFLAG=8
F_SENDMAIL "ERROR: FILE SYSTEM EXPANSION FAILED" "${FSVOL} EXPANSION FAILED WITH RETURN CODE OF ${RETURNCODE}. LVSIZE=${LVSIZE}GB, FSSIZE=${FSSIZE}GB, FSAVAILABLE=${FSAVAILABLE}GB, FSTHRESHOLD=${FSTHRESHOLD}GB, FSINCREASEBY=${FSINCREASEBY}GB"
;;
ESAC
ECHO "`DATE +%Y-%M-%D_%H:%M:%S` - FINISHED EXPANSION OF ${FSVOL}" | TEE -A ${LOGFILE}
ELSE
ECHO "`DATE +%Y-%M-%D_%H:%M:%S` - ${FSVOL} ${FSAVAILABLE}G>${FSTHRESHOLD}G NO ACTION REQUIRED." | TEE -A ${LOGFILE}
FI
## PERFORM CLEANUP ROUTINE.
F_CLEANUP
HERE IS THE TYPICAL OUTPUT WHEN IT DOES NOT HAVE TO INCREASE THE FS:
/VAR/TEMP/CHECK-STORAGE.LOG
2012-05-01_01:00:00 - /DEV/LVG/OPT 44G>5G NO ACTION REQUIRED.
2012-05-01_02:00:00 - /DEV/LVG/BAK 91G>5G NO ACTION REQUIRED.
2012-05-01_03:00:00 - /DEV/LVG/TEMP 93G>5G NO ACTION REQUIRED.
2012-05-02_01:00:00 - /DEV/LVG/OPT 44G>5G NO ACTION REQUIRED.
2012-05-02_02:00:00 - /DEV/LVG/BAK 91G>5G NO ACTION REQUIRED.
2012-05-02_03:00:00 - /DEV/LVG/TEMP 93G>5G NO ACTION REQUIRED.
2012-05-03_01:00:00 - /DEV/LVG/OPT 44G>5G NO ACTION REQUIRED.
2012-05-03_02:00:00 - /DEV/LVG/BAK 91G>5G NO ACTION REQUIRED.
2012-05-03_03:00:00 - /DEV/LVG/TEMP 93G>5G NO ACTION REQUIRED.
HERE IS A SAMPLE OF WHAT THE LOG WILL LOOK LIKE WHEN IT PERFORM INCREASES...NOTICE HOW I HAD TO INCREASE THE THRESHOLD IN ORDER FOR IT TO FIRE OFF THE INCREASE (BUT IT STILL JUST ISSUED A SINGLE GIGABYTE INCREASE):
/VAR/TEMP/CHECK-STORAGE.LOG
2012-05-02_01:00:00 - STARTING EXPANSION OF /DEV/LVG/OPT
2012-05-02_01:00:00 --- LVSIZE=75GB, FSSIZE=50GB, FSAVAIL=44GB, FSTHRESHOLD=55GB, INCREASEBY=1GB
2012-05-02_01:00:00 --- RESIZE2FS /DEV/LVG/OPT 51, RETURNCODE=0
2012-05-02_01:00:00 - FINISHED EXPANSION OF /DEV/LVG/OPT
2012-05-02_02:00:00 - STARTING EXPANSION OF /DEV/LVG/BAK
2012-05-02_02:00:00 --- LVSIZE=125GB, FSSIZE=99GB, FSAVAIL=91GB, FSTHRESHOLD=100GB, INCREASEBY=1GB
2012-05-02_02:00:00 --- RESIZE2FS /DEV/LVG/BAK 100, RETURNCODE=0
2012-05-02_02:00:00 - FINISHED EXPANSION OF /DEV/LVG/BAK
2012-05-02_03:00:00 - STARTING EXPANSION OF /DEV/LVG/TEMP
2012-05-02_03:00:00 --- LVSIZE=125GB, FSSIZE=99GB, FSAVAIL=93GB, FSTHRESHOLD=100GB, INCREASEBY=1GB
2012-05-02_03:00:00 --- RESIZE2FS /DEV/LVG/TEMP 100, RETURNCODE=0
2012-05-02_03:00:00 - FINISHED EXPANSION OF /DEV/LVG/TEMP