find /opt/terraform-web/workspaces -maxdepth 1 -type d -printf '%TY-%Tm-%Td %TH:%TM %p\n' | sort | tail -20
find /opt/terraform-web/workspaces -maxdepth 1 -type d | wc -l
sudo du -sh /opt/terraform-web/workspaces
sudo du -sh /opt/terraform-web/workspaces/* 2>/dev/null | sort -h | tail -5
# 2. Не tmpfs ли это и не симлинк ли (тогда чистка — при перезагрузке)
df -h /opt/terraform-web/workspaces
readlink -f /opt/terraform-web/workspaces
mount | grep -E 'tmpfs|/opt'
# 3. Кто чистит: cron всех пользователей и systemd
sudo crontab -l; sudo crontab -l -u tf-runner
sudo grep -rn "workspace" /etc/cron* /var/spool/cron/ 2>/dev/null
sudo grep -rn "terraform-web\|workspaces" /etc/tmpfiles.d/ /usr/lib/tmpfiles.d/ 2>/dev/null
systemctl list-timers --all | head
# 4. Сверка с БД: у скольких заявок workspace прописан, но каталога нет
cd /opt/terraform-web/backend && /opt/terraform-web/venv/bin/python -c "
from database import SessionLocal
import db_models, os
db = SessionLocal()
rows = db.query(db_models.VMRequest).filter(db_models.VMRequest.workspace.isnot(None)).all()
missing = [(r.id, r.status.value, r.workspace) for r in rows
if not os.path.isdir('/opt/terraform-web/workspaces/' + r.workspace)]
print('заявок с workspace:', len(rows), ' каталог отсутствует у:', len(missing))
for m in missing[:15]: print(m)
"