A full disk causes immediate service failures — MySQL stops writing, PHP throws errors and mail queues freeze. This guide recovers space quickly and safely.
Step 1 — Emergency Space Recovery
# Check disk usage immediately
df -h
# Find large files fast
du -sh /* 2>/dev/null | sort -rh | head -20
du -sh /var/* 2>/dev/null | sort -rh | head -10
# Quick wins — truncate large log files
sudo truncate -s 0 /var/log/syslog
sudo truncate -s 0 /var/log/auth.log
sudo truncate -s 0 /var/log/nginx/access.log
Step 2 — Clean Package Cache
sudo apt clean
sudo apt autoremove -y
sudo apt autoclean
# Check recovered space
df -h
Step 3 — Clean Old Log Files
# Remove rotated logs
sudo find /var/log -name "*.gz" -delete
sudo find /var/log -name "*.1" -delete
sudo find /var/log -name "*.old" -delete
# Vacuum systemd journal
sudo journalctl --vacuum-size=100M
sudo journalctl --vacuum-time=7d
Step 4 — Find and Remove Large Files
# Files over 100MB
sudo find / -type f -size +100M -not -path "/proc/*" 2>/dev/null | sort -k5 -rn
# Old MySQL binary logs (biggest culprit)
ls -lah /var/lib/mysql/mysql-bin.*
mysql -u root -p -e "PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 3 DAY);"
Step 5 — Clean WordPress Uploads
# Find large image directories
du -sh /var/www/*/wp-content/uploads/* | sort -rh | head -20
# Remove image resize cache (WordPress regenerates)
find /var/www -path "*/uploads/*" -name "*-[0-9]*x[0-9]*.jpg" -delete
Step 6 — Set Up Log Rotation
sudo nano /etc/logrotate.d/custom
/var/log/nginx/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
postrotate
nginx -s reopen
endscript
}
Conclusion
Disk full situations need immediate action and long-term prevention. Our team monitors disk usage proactively as part of managed server support.
Comments