-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdf-summary
More file actions
executable file
·42 lines (36 loc) · 1.58 KB
/
Copy pathdf-summary
File metadata and controls
executable file
·42 lines (36 loc) · 1.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/bin/bash
# Usage: df-summary [cluster-group]
# Shows disk usage for /dev/sda1 and NFS mounts across a cluster, sorted by free space.
source "$(dirname "$0")/pssh4cssh.sh"
GROUP=${1:-vps-all}
hosts=()
while IFS= read -r h; do hosts+=(-H "$h"); done < <(_cluster_hosts "$GROUP")
parse_and_sort() {
local pattern=$1
local fs_width=$2
parallel-ssh "${hosts[@]}" -i "df -h | grep -E '$pattern'" 2>/dev/null | \
awk -v fw="$fs_width" '
/\[SUCCESS\]/ { host=$NF; next }
/\[FAILURE\]/ { host=$NF" (FAILED)"; next }
NF >= 5 {
avail = $4
unit = substr(avail, length(avail))
val = substr(avail, 1, length(avail)-1) + 0
if (unit == "T") bytes = val * 1024^4
else if (unit == "G") bytes = val * 1024^3
else if (unit == "M") bytes = val * 1024^2
else if (unit == "K") bytes = val * 1024
else bytes = val
printf "%015.0f %-30s %-*s %-8s %-8s %-8s %s\n", bytes, host, fw, $1, $2, $3, $4, $5
}
' | sort -rn | awk -v fw="$fs_width" '{ $1=""; printf "%-30s %-*s %-8s %-8s %-8s %s\n", $2, fw, $3, $4, $5, $6, $7 }'
}
echo "=== /dev/sda1 ==="
printf "%-30s %-12s %-8s %-8s %-8s %s\n" "HOST" "FILESYSTEM" "SIZE" "USED" "FREE" "USE%"
echo "----------------------------------------------------------------------------------------------"
parse_and_sort '^/dev/sda1 ' 12
echo ""
echo "=== NFS Mounts ==="
printf "%-30s %-40s %-8s %-8s %-8s %s\n" "HOST" "FILESYSTEM" "SIZE" "USED" "FREE" "USE%"
echo "-------------------------------------------------------------------------------------------------------------"
parse_and_sort 'nfs' 40