Plan pages list RAM first, but a full disk takes a server down just as surely. With "No space left on device", databases stop writing and sites stop answering, however much memory is free. Disk use isn't hard to predict once you know what grows. We booted fresh servers from our own images and measured each of the usual suspects.
What a fresh server uses
Measured right after the first boot:
| System | Disk used |
|---|---|
| Alpine Linux 3.21 | 153 MB |
| Debian 12 | 1.2 GB |
| Ubuntu 24.04 | 2.7 GB |
| Windows Server 2022 | 14.0 GB |
On Linux, almost all of a 15 GB Nano is yours from day one. Windows takes more than a quarter of its 50 GB plan before you install anything, and as you'll see below, updates take more.
Part of Ubuntu's 2.7 GB was easy to win back. 440 MB was the package cache from first-boot updates, and three kernels were installed where one is in use. Two commands brought it to 2.16 GB:
sudo apt clean
sudo apt autoremove --purge
Docker: images add up fast
Installing Docker itself added about 300 MB. The images are what count. We pulled eight common ones, one after another, and measured how much the disk grew each time:
| Image | Disk added |
|---|---|
nginx:alpine | 91 MB |
nginx:latest | 232 MB |
postgres:16 | 501 MB |
python:3.12-slim | 59 MB |
node:22 | 1,564 MB |
mariadb:11 | 437 MB |
wordpress:latest | 960 MB |
redis:7-alpine | 55 MB |
| Total | 3.9 GB |
Images that share a base reuse its layers, which is why python:3.12-slim added only 59 MB after nginx:latest and postgres:16 had already brought in the same Debian base. Alpine-based images are several times smaller than the full ones. node:22 alone is 1.5 GB, so build with node:22-slim or node:22-alpine when you can.
Images pile up when you update: each docker compose pull leaves the old version behind. On our test server one command cleared all of them:
docker system df
docker system prune -a
It reported 4.1 GB reclaimed. prune -a removes every image no container is using, so run it when your stack is up. Volumes are left alone unless you add --volumes.
Logs: the one that fills a disk overnight
Docker keeps everything a container prints, with no size limit by default. We started a container that printed one short line in a loop, the kind of output a health check or debug mode produces. After 30 seconds its log file was 6 MB. At that rate it would write about 17 GB a day, more than a whole Micro plan's disk.
Set a limit for all new containers in /etc/docker/daemon.json:
{
"log-driver": "local",
"log-opts": { "max-size": "10m", "max-file": "3" }
}
Then sudo systemctl restart docker and recreate your containers (docker compose up -d --force-recreate). Existing containers keep the settings they were created with. With the limit, the same test container's log was 4 MB after 30 seconds and can never pass 30 MB.
The system journal is already capped: on our 25 GB Ubuntu server, journald limits itself to 2.3 GB, a tenth of the filesystem. It was using 15 MB.
Windows: updates need room
Our Windows Server 2022 image dated from 2022, so we brought it up to date. Used space went from 12.6 GB to 20.8 GB while the first cumulative update installed, and reached 24.5 GB after the second. Windows keeps the old version of every system file an update replaces. Cleaning those out brought it back to 14.6 GB, and a fresh server from the updated image now starts at 14 GB. Keep at least 10 GB free for the next update. The Windows update guide shows the cleanup commands.
What to choose
| What you run | Disk that's comfortable | Plan |
|---|---|---|
| A bot, a VPN, a small static site | 15 GB | Nano, $3/mo |
| A Docker stack with a few images | 25 GB | Micro, $5/mo |
| WordPress with a database and uploads, several stacks | 35 GB | Small, $8/mo |
| Bigger databases, many images, local backups | 45 GB | Medium, $12/mo |
| Windows Server 2022 | 50–60 GB | Windows-Small, $11/mo |
Two rules make any of these last longer: cap container logs before you deploy, and copy backups off the server instead of keeping them on its disk. If a server is already full, our guide to freeing up disk space works through it step by step. For the memory side of sizing, see how much RAM a VPS needs. All plans are on the VPS page, and payment is in USDT, USDC or ETH on Base, Ethereum or Polygon.
Comments
No comments yet. Be the first.