/
ZFS stability script
ZFS stability script
cat stab_zfs.sh
#!/bin/bash
get_duration() {
IFS=':' read -r -a tm <<< "$1"
num=${#tm[@]}
delta=$((${tm[0]} * 3600))
if [[ $num -gt 1 ]]; then
delta1=$((${tm[1]} * 60))
(( delta += $delta1 ))
if [[ $num -gt 2 ]]; then
(( delta += ${tm[2]} ))
fi
fi
echo $delta
}
get_time_diff() {
local cur_time=$(date +%s)
echo $(($cur_time - $1))
}
print_time_diff() {
local delta=$(get_time_diff $1)
local sec=$(($delta % 60))
let "amin = $delta / 60"
let "hour = $amin / 60"
local min=$(($amin%60))
if [ -n "$2" ]; then
printf " Running time: %02d:%02d:%02d\n" $hour $min $sec >> $2
else
printf " Running time: %02d:%02d:%02d\n" $hour $min $sec
fi
}
log_extra() {
echo "---------------- ZPOOL LIST ------------------" >> $1
zpool list >> $1
echo "---------------- ZFS LIST ------------------" >> $1
zfs list >> $1
echo "---------------- PS AX ------------------" >> $1
ps ax >> $1
echo "---------------- TOP -n 10 ------------------" >> $1
top -n 10 >> $1
}
i=1
mode=0
TOTALLOG="/var/tmp/stabzfs.$(date +%F-%T).txt"
dsk1=$1
shift
dsk2=$1
shift
dsk3=$1
shift
echo "============ ZFS Stability test started at $(date +%F-%T) ==============" > ${TOTALLOG}
if [[ $# < 2 ]]; then
echo "Missing parameters in the command" | /usr/bin/tee -a ${TOTALLOG}
exit 1
fi
case "$1" in
-i) mode=1
# number of iterations is provided
maxiter=$2
echo "Stability Test : launched for $maxiter iterations at $(date)." | /usr/bin/tee -a ${TOTALLOG}
;;
-d) mode=2
# duration of tests is provided
delta=$(get_duration $2)
echo "Stability Test : launched for $2 interval ($delta seconds) at $(date)." | /usr/bin/tee -a ${TOTALLOG}
;;
-t) mode=3
# stop date/time is provided
stopdt=$2
;;
*) echo "Stability Test : $1 is a wrong option" | /usr/bin/tee -a ${TOTALLOG}
echo "Usage : stab_zfs.sh <disk1> <disk2> <disk3> (-i <iterations> | -t <HH:MM[:SS]> | -d <HH:MM[:SS] [DAY-MONTH-YEAR]>]) [-s | <test name>]"
exit 1
;;
esac
shift
shift
if [[ $mode -eq 3 ]]; then
# stop time/date mode
if [[ $# > 0 ]]; then
date -d $1 +%s
stopat=$?
if [[ $stopat -eq 0 ]]; then
# stop date is entered after the time
# if it is ommited then date is treated as current one
stopdt="$stopdt $1"
shift
fi
fi
echo "Stability Test : launched until $stopdt at $(date)." | /usr/bin/tee -a ${TOTALLOG}
stopat=$(date -d "$stopdt" "+%s")
fi
GLOB_START_TIME=$(date +%s)
while [[ $mode -gt 0 ]]
do
case "$mode" in
1) # number of iterations is provided
if [[ $i -gt $maxiter ]]; then
break
fi
;;
2) # duration of tests is provided
difftm=$(get_time_diff $GLOB_START_TIME)
if [[ $difftm -gt $delta ]]; then
break
fi
;;
3) # stop date/time is provided
tmpat=$(date +%s)
if [[ $stopat -le $tmpat ]]; then
break
fi
;;
*) break
;;
esac
echo "----------------------- Pass ${i} : started $(date)" | /usr/bin/tee -a ${TOTALLOG}
START_TIME=$(date +%s)
./z.sh $dsk1 $dsk2 $dsk3
print_time_diff ${START_TIME} ${TOTALLOG}
echo "----------------------- Pass ${i} : finished $(date)" | /usr/bin/tee -a ${TOTALLOG}
(( i++ ))
done
echo "Tests are finished successfully at $(date) with ${i} passes." >> ${TOTALLOG}
print_time_diff ${GLOB_START_TIME} | /usr/bin/tee -a ${TOTALLOG}
, multiple selections available,
Related content
How to run ZFS tests on VM environment
How to run ZFS tests on VM environment
More like this
Запуск тестов ZFS на VM
Запуск тестов ZFS на VM
More like this
How to run OS tests on VM environment
How to run OS tests on VM environment
More like this