Running out of disk is one of the most common causes of server outages: databases stop writing, logs can’t rotate, updates fail, and websites throw errors. Planning storage up front, and monitoring it, prevents most of these surprises. Here’s how to estimate what your VPS needs.
Typical footprints
| Item | Typical size |
|---|---|
| Linux OS (Ubuntu/Debian, minimal) | 2–5 GB |
| Windows Server | 20–30 GB+ (VPS.DO requires plans with at least 50 GB of disk for Windows) |
| Web stack (Nginx, PHP, MySQL) | < 1 GB |
| WordPress core + plugins | 100–500 MB (plus media) |
| Docker images | 100 MB – several GB each; build cache grows |
| Databases | From MB to hundreds of GB; plus indexes and binary logs |
| Logs | MBs per day, much more for busy sites or debug logging |
| Local backups | 1–3× the data being backed up |
| Game servers | 5–60 GB per game (CS2 and ARK are large) |
| AI models | 2–10 GB per local model |
A simple estimate
Disk needed = OS + applications + data × (1 + growth over 12 months)
+ logs + local backups + 20–30% free headroom
Example (WordPress site with 10 GB of media and a 2 GB database):
| Item | GB |
|---|---|
| OS + stack | 6 |
| WordPress + media | 10 |
| Database | 2 |
| One year of growth (~50%) | 6 |
| Logs | 2 |
| Local backups (2 days before off-site upload) | 24 |
| Headroom (25%) | 12 |
| Total | ~62 GB |
Keep at least 15–20% free. Some filesystems and databases slow down, or behave badly, when nearly full.
SSD vs HDD
- SSD: fast random I/O, essential for databases, web apps and anything interactive. All VPS.DO plans use SSD storage.
- HDD: cheaper per GB, fine for archives and backups where speed doesn’t matter.
Benchmark disk performance with fio. See fio disk benchmark.
Where disk space disappears
- Logs: set up logrotate and limit the systemd journal (
SystemMaxUse=500Minjournald.conf). See logrotate and journalctl. - Docker: old images, stopped containers, and build cache. Clean up regularly. See Docker disk cleanup.
- Database binary logs (MySQL
binlog): set an expiry. - Old kernels and package caches:
sudo apt autoremove && sudo apt clean. - Forgotten local backups, and large core dumps.
Find what’s using space:
df -h
sudo du -xh / --max-depth=2 2>/dev/null | sort -h | tail -20
sudo ncdu /
See disk full troubleshooting.
Don’t forget inodes
Millions of tiny files (cache files, session files, mail queues) can exhaust inodes while space is still free:
df -i
Monitor and alert
- Alert at 80% and 90% usage (Netdata, Prometheus node exporter, Uptime Kuma push checks, or a simple cron script). See Netdata and Prometheus node exporter.
- Track growth over time, so you can upgrade before you run out.
When one server isn’t enough
- Move bulk data (media libraries, backups, archives) to a dedicated storage server or object storage, and keep the app server’s disk for the OS, app and database. VPS.DO’s Storage VPS plans offer 500 GB of SSD in the USA and Hong Kong. See storage VPS.
- Mount remote storage with SSHFS, NFS (over a private network or VPN), or rclone mount for object storage. See MinIO.
- Upgrade the plan when the app itself needs more local disk. See when to upgrade your VPS.
Quick reference
| Task | Command |
|---|---|
| Free space | df -h |
| Inodes | df -i |
| Biggest directories | du -xh / --max-depth=2 | sort -h |
| Interactive | ncdu / |
| Journal size | journalctl --disk-usage |
| Docker usage | docker system df |
Related: VPS bandwidth calculator and VPS as a backup server.