#!/usr/bin/env python3 # -*- coding: utf-8 -*- """Аудит диска — только чтение. Что занимает место и что из этого мусор.""" import os, subprocess, time def sh(c, t=60): try: r = subprocess.run(c, shell=True, capture_output=True, text=True, timeout=t) return (r.stdout or r.stderr or "").strip() except Exception as e: return f"<{type(e).__name__}>" print("=" * 64) print("DISK", sh("df -h / | awk 'NR==2{print $3\" / \"$2\" (\"$5\")\"}'")) print("=" * 64) print("\n--- TOP LEVEL ---") print(sh("du -xh --max-depth=1 / 2>/dev/null | sort -rh | head -8")) print("\n--- /var ---") print(sh("du -xh --max-depth=1 /var 2>/dev/null | sort -rh | head -6")) print("\n--- LOGS ---") print("journal:", sh("journalctl --disk-usage 2>/dev/null")) print(sh("du -xh --max-depth=1 /var/log 2>/dev/null | sort -rh | head -5")) print("docker:", sh("du -xsh /var/lib/docker 2>/dev/null")) print("\n--- /opt/arena/runs ---") print("size:", sh("du -xsh /opt/arena/runs 2>/dev/null")) print("entries:", sh("ls /opt/arena/runs 2>/dev/null | wc -l")) print("oldest/newest:") print(sh("ls -1t /opt/arena/runs 2>/dev/null | tail -2 | sed 's/^/ oldest: /'")) print(sh("ls -1t /opt/arena/runs 2>/dev/null | head -2 | sed 's/^/ newest: /'")) print(" by age:") for d, label in ((1, "moved <1d"), (7, "<7d"), (30, "<30d")): n = sh(f"find /opt/arena/runs -maxdepth 1 -mtime -{d} | wc -l") print(f" {label:12} {n}") older = sh("find /opt/arena/runs -maxdepth 1 -mtime +30 | wc -l") sz30 = sh("find /opt/arena/runs -maxdepth 1 -mtime +30 -exec du -xsb {} + 2>/dev/null | awk '{s+=$1} END{printf \"%.1f GB\", s/1073741824}'") print(f" older 30d {older} ({sz30})") print(" biggest inside:") print(sh("du -xh --max-depth=1 /opt/arena/runs 2>/dev/null | sort -rh | head -5")) print(" file types:") print(sh("find /opt/arena/runs -type f -printf '%f\\n' 2>/dev/null | sed 's/.*\\.//' | sort | uniq -c | sort -rn | head -6")) print("\n--- OTHER SUSPECTS ---") for p in ("/opt/arena/_killed_variants", "/opt/arena/local_ml_models", "/opt/arena/backups", "/root", "/home"): print(f" {p:30} {sh(f'du -xsh {p} 2>/dev/null | cut -f1')}") print(" *.log in /opt/arena:", sh("find /opt/arena -name '*.log' -exec du -cxsb {} + 2>/dev/null | tail -1 | awk '{printf \"%.0f MB\", $1/1048576}'")) print(" core dumps:", sh("find / -xdev -name 'core.*' -o -name '*.core' 2>/dev/null | wc -l"))