When downloading a Debian netinstall (180MB) or business card ISO (50MB), many administrators expect a base system under 200MB. Yet after installation, even without additional packages, you'll typically see:
# du -sh / --exclude=/proc --exclude=/sys --exclude=/dev 548M /
This size comes from several essential components:
- Basic POSIX tools (coreutils, findutils, etc.)
- Package management infrastructure (apt, dpkg)
- Essential libraries (glibc, zlib, openssl)
- Minimal networking stack
- Systemd and init scripts
The apparent contradiction stems from Linux distributions prioritizing:
1. Dependency resolution (pulling in recommended packages) 2. Hardware compatibility (drivers/firmware) 3. Maintenance conveniences (man pages, docs) 4. Security tools (apparmor, auditd)
Option 1: Debian's debootstrap with Custom Profile
# Create ultra-minimal base: debootstrap --variant=minbase --include=apt,netbase bullseye /mnt/minimal # Compare sizes: du -sh /mnt/minimal # Typically 120-180MB
Option 2: Alpine Linux Alternative
# Alpine's base image: apk add --no-cache alpine-base du -sh / # ~8MB without packages, ~50MB with basic utils
For containerized environments or embedded systems, consider:
docker pull alpine:latest
(2.5MB compressed)- BusyBox-based builds (single binary approach)
- Buildroot/Yocto custom compilations
Before pursuing extreme minimalism, consider:
1. 50MB saved = ~$0.0002/month on AWS 2. Debugging time costs often outweigh storage savings 3. Security updates become manual for custom builds
When installing Debian/Ubuntu minimal servers, you'll typically see disk usage between 500MB-750MB even with netinstall ISOs. Let's break down why:
# Check installed size (Debian/Ubuntu):
du -sh / --exclude=/proc --exclude=/sys --exclude=/dev
# Sample output: 648M /
The "minimal" installation includes essential packages that add up:
- Base system (apt, dpkg, coreutils): ~120MB
- Linux kernel and modules: ~150MB
- Documentation and man pages: ~80MB
- System logging (rsyslog): ~30MB
- Networking tools: ~50MB
For production servers where every MB counts, consider these methods:
1. Post-install Cleanup
# Remove documentation
apt-get purge $(dpkg -l | grep ^ii | awk '{print $2}' | grep -E 'doc$|man$|info$')
# Clean apt cache
apt-get clean
# Remove old kernels (Ubuntu)
apt-get purge $(dpkg -l | grep linux-image- | \
awk '{print $2}' | grep -v $(uname -r))
2. Alternative Minimal Distros
For Debian-based ultra-minimal options:
- Debian Live: Start with ~300MB base
- Devuan: Systemd-free alternative
- Alpine Linux: Musl-based (~5MB base)
3. Custom Build with debootstrap
# Create minimal chroot
debootstrap --variant=minbase --include=ssh,iproute2 \
stable /mnt/minimal http://deb.debian.org/debian
# Compare size:
du -sh /mnt/minimal
# Typically 200-300MB
Before aggressively minimizing:
- Maintain essential debugging tools (strace, tcpdump)
- Keep package management functional
- Ensure secure updates can still be applied