60 lines
1.3 KiB
Bash
Executable File
60 lines
1.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Dumps disk usage to stdout or to the file
|
|
#
|
|
# Parameters:
|
|
# - $1 (optional): Filename to append the output to.
|
|
#
|
|
# Usage:
|
|
# - Dump disk usage to stdout:
|
|
# ./disk-usage-dump.sh
|
|
#
|
|
# - Dump disk usage appending to th file:
|
|
# ./disk-usage-dump.sh my-log-file.log
|
|
#
|
|
# Use docker container to get root (script can be run under regular user, no
|
|
# need for sudo)
|
|
|
|
dump () {
|
|
echo
|
|
echo "### Disk usage dump at $(date) ###"
|
|
|
|
# Free disk space
|
|
echo
|
|
df -h /home/user
|
|
|
|
# Home dirs
|
|
echo
|
|
echo "Home dirs:"
|
|
docker run -v /home/user:/home/user alpine:3.15.0 du -hs /home/user/*
|
|
|
|
# Docker data dirs
|
|
echo
|
|
echo "Docker data dirs:"
|
|
docker run -v /home/user:/home/user alpine:3.15.0 du -hs /home/user/skynet-webportal/docker/data/*
|
|
|
|
# Largest dirs/files
|
|
echo
|
|
echo "Dirs or files over 1GB (first 100):"
|
|
docker run -v /home/user:/home/user alpine:3.15.0 du -h /home/user | grep -E "^[0-9]+\.?[0-9]*G" | sort -r -n | head -100
|
|
}
|
|
|
|
# Check argument is present
|
|
if [ -z "$1" ]; then
|
|
# Dump to stdout
|
|
dump
|
|
else
|
|
# Handle log paths
|
|
filename=$(basename "$1")
|
|
dirname=$(dirname "$1")
|
|
abs_dirname=$(realpath "$dirname")
|
|
|
|
# Make sure log dir exists
|
|
mkdir -p "$abs_dirname"
|
|
|
|
# Append to file
|
|
{
|
|
dump
|
|
} >> "$abs_dirname/$filename" 2>&1
|
|
fi
|