mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-14 07:06:28 +00:00
Parse disk space using df -P -k.
This commit is contained in:
@@ -25,19 +25,21 @@ set -u
|
|||||||
|
|
||||||
disk_space() {
|
disk_space() {
|
||||||
local filesystem=${1:-"$PWD"}
|
local filesystem=${1:-"$PWD"}
|
||||||
# Filesystem 1M-blocks Used Available Capacity Mounted on
|
# Filesystem 1024-blocks Used Available Capacity Mounted on
|
||||||
# /dev/disk0s2 115383 92637 22496 81% /
|
# /dev/disk0s2 118153176 94409664 23487512 81% /
|
||||||
df -m $filesystem
|
df -P -k $filesystem
|
||||||
}
|
}
|
||||||
|
|
||||||
# Sub: check_disk_space
|
# Sub: check_disk_space
|
||||||
# Check if there is or will be enough disk space.
|
# Check if there is or will be enough disk space. Input is a file
|
||||||
|
# with output from <disk_space()>, i.e. `df -P -k`. The df output
|
||||||
|
# must use 1k blocks, but the mb arg from the user is in MB.
|
||||||
#
|
#
|
||||||
# Arguments:
|
# Arguments:
|
||||||
# file - File with output from <disk_space()>.
|
# file - File with output from <disk_space()>.
|
||||||
# mb - Minimum MB free.
|
# mb - Minimum MB free.
|
||||||
# pc - Minimum percent free.
|
# pc - Minimum percent free.
|
||||||
# margin - Add this many MB to the real MB used.
|
# mb_margin - Add this many MB to the real MB used.
|
||||||
#
|
#
|
||||||
# Returns:
|
# Returns:
|
||||||
# 0 if there is/will be enough disk space, else 1.
|
# 0 if there is/will be enough disk space, else 1.
|
||||||
@@ -45,24 +47,28 @@ check_disk_space() {
|
|||||||
local file=$1
|
local file=$1
|
||||||
local mb=${2:-"0"}
|
local mb=${2:-"0"}
|
||||||
local pc=${3:-"0"}
|
local pc=${3:-"0"}
|
||||||
local margin=${4:-"0"}
|
local mb_margin=${4:-"0"}
|
||||||
|
|
||||||
local mb_used=$(cat $file | awk '/^\//{print $3}');
|
# Convert MB to KB because the df output should be in 1k blocks.
|
||||||
local mb_free=$(cat $file | awk '/^\//{print $4}');
|
local kb=$(($mb * 1024))
|
||||||
|
local kb_margin=$(($mb_margin * 1024))
|
||||||
|
|
||||||
|
local kb_used=$(cat $file | awk '/^\//{print $3}');
|
||||||
|
local kb_free=$(cat $file | awk '/^\//{print $4}');
|
||||||
local pc_used=$(cat $file | awk '/^\//{print $5}' | sed -e 's/%//g');
|
local pc_used=$(cat $file | awk '/^\//{print $5}' | sed -e 's/%//g');
|
||||||
|
|
||||||
if [ "$margin" -gt "0" ]; then
|
if [ "$kb_margin" -gt "0" ]; then
|
||||||
local mb_total=$(($mb_used + $mb_free))
|
local kb_total=$(($kb_used + $kb_free))
|
||||||
|
|
||||||
mb_used=$(($mb_used + $margin))
|
kb_used=$(($kb_used + $kb_margin))
|
||||||
mb_free=$(($mb_free - $margin))
|
kb_free=$(($kb_free - $kb_margin))
|
||||||
pc_used=$(awk "BEGIN { printf(\"%d\", $mb_used/$mb_total * 100) }")
|
pc_used=$(awk "BEGIN { printf(\"%d\", $kb_used/$kb_total * 100) }")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local pc_free=$((100 - $pc_used))
|
local pc_free=$((100 - $pc_used))
|
||||||
|
|
||||||
if [ "$mb_free" -le "$mb" -o "$pc_free" -le "$pc" ]; then
|
if [ "$kb_free" -le "$kb" -o "$pc_free" -le "$pc" ]; then
|
||||||
warn "Not enough free disk space: ${pc_free}% free, ${mb_free} MB free; wanted more than ${pc}% free or ${mb} MB free"
|
warn "Not enough free disk space: ${pc_free}% free, ${kb_free} KB free; wanted more than ${pc}% free or ${kb} KB free"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
TESTS=10
|
TESTS=11
|
||||||
|
|
||||||
source "$LIB_DIR/log_warn_die.sh"
|
source "$LIB_DIR/log_warn_die.sh"
|
||||||
source "$LIB_DIR/safeguards.sh"
|
source "$LIB_DIR/safeguards.sh"
|
||||||
@@ -13,30 +13,35 @@ cmd_ok \
|
|||||||
"grep -q Avail $TMPDIR/df-out" \
|
"grep -q Avail $TMPDIR/df-out" \
|
||||||
"disk_space()"
|
"disk_space()"
|
||||||
|
|
||||||
check_disk_space "$SAMPLE/diskspace001.txt" 22495 18 >$TMPDIR/out 2>&1
|
is \
|
||||||
|
"`wc -l $TMPDIR/df-out | awk '{print $1}'`" \
|
||||||
|
"2" \
|
||||||
|
"2-line df output"
|
||||||
|
|
||||||
|
check_disk_space "$SAMPLE/diskspace001.txt" 22000 18 >$TMPDIR/out 2>&1
|
||||||
is "$?" "0" "Enough disk space"
|
is "$?" "0" "Enough disk space"
|
||||||
is \
|
is \
|
||||||
"`cat $TMPDIR/out`" \
|
"`cat $TMPDIR/out`" \
|
||||||
"" \
|
"" \
|
||||||
"No output if enough disk space"
|
"No output if enough disk space"
|
||||||
|
|
||||||
check_disk_space "$SAMPLE/diskspace001.txt" 22496 18 >$TMPDIR/out 2>&1
|
check_disk_space "$SAMPLE/diskspace001.txt" 24000 18 >$TMPDIR/out 2>&1
|
||||||
is "$?" "1" "Not enough MB free"
|
is "$?" "1" "Not enough MB free"
|
||||||
cmd_ok \
|
cmd_ok \
|
||||||
"grep -q '19% free, 22496 MB free; wanted more than 18% free or 22496 MB free' $TMPDIR/out" \
|
"grep -q '19% free, 23487512 KB free; wanted more than 18% free or 24576000 KB free' $TMPDIR/out" \
|
||||||
"Warning if not enough disk space"
|
"Warning if not enough disk space"
|
||||||
|
|
||||||
check_disk_space "$SAMPLE/diskspace001.txt" 22495 19 >$TMPDIR/out 2>&1
|
check_disk_space "$SAMPLE/diskspace001.txt" 22000 19 >$TMPDIR/out 2>&1
|
||||||
is "$?" "1" "Not enough % free"
|
is "$?" "1" "Not enough % free"
|
||||||
|
|
||||||
# ###########################################################################
|
# ###########################################################################
|
||||||
# Check with a margin (amount we plan to use in the future).
|
# Check with a margin (amount we plan to use in the future).
|
||||||
# ###########################################################################
|
# ###########################################################################
|
||||||
|
|
||||||
check_disk_space "$SAMPLE/diskspace001.txt" 22395 18 100
|
check_disk_space "$SAMPLE/diskspace001.txt" 22000 18 100
|
||||||
is "$?" "0" "Enough disk space with margin"
|
is "$?" "0" "Enough disk space with margin"
|
||||||
|
|
||||||
check_disk_space "$SAMPLE/diskspace001.txt" 22396 18 100 >$TMPDIR/out 2>&1
|
check_disk_space "$SAMPLE/diskspace001.txt" 23000 18 100 >$TMPDIR/out 2>&1
|
||||||
is "$?" "1" "Not enough MB free with margin"
|
is "$?" "1" "Not enough MB free with margin"
|
||||||
|
|
||||||
check_disk_space "$SAMPLE/diskspace001.txt" 100 5 20000 >$TMPDIR/out 2>&1
|
check_disk_space "$SAMPLE/diskspace001.txt" 100 5 20000 >$TMPDIR/out 2>&1
|
||||||
|
@@ -1,2 +1,2 @@
|
|||||||
Filesystem 1M-blocks Used Available Capacity Mounted on
|
Filesystem 1024-blocks Used Available Capacity Mounted on
|
||||||
/dev/disk0s2 115383 92637 22496 81% /
|
/dev/disk0s2 118153176 94409664 23487512 81% /
|
||||||
|
Reference in New Issue
Block a user