scripts/disk-usage-report.sh

#!/usr/bin/env bash
# scripts/disk-usage-report.sh
# Summary of disk usage that cron can email each Sunday.

set -euo pipefail

HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck source=/dev/null
. "${HERE}/lib/log.sh"

ROOTS=(
    /srv/homelab
    /mnt/tank/media
    /mnt/tank/photos
    /mnt/tank/docs
    /var/lib/docker
)

printf '== %s ==\n' "$(date -u +%FT%TZ)"

printf '\n-- filesystems\n'
df -hT -x tmpfs -x overlay -x squashfs

printf '\n-- directory totals\n'
for root in "${ROOTS[@]}"; do
    if [[ -d "${root}" ]]; then
        du -sh --one-file-system "${root}" 2>/dev/null || true
    fi
done

printf '\n-- largest dirs under /mnt/tank/media\n'
if [[ -d /mnt/tank/media ]]; then
    du -h --max-depth=3 /mnt/tank/media 2>/dev/null | sort -hr | head -n 20
fi

printf '\n-- docker space\n'
docker system df -v 2>/dev/null | head -n 40 || true

printf '\n-- zfs pool summary\n'
if command -v zpool >/dev/null 2>&1; then
    zpool list
    zfs list -r -o name,used,avail,refer
fi