#!/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