When analyzing disk usage in Linux systems, many administrators instinctively reach for du -csh /
. While effective, this command comes with significant performance overhead as it recursively scans every file and directory. On large filesystems or production servers, this can cause:
- Extended execution time (minutes to hours)
- High I/O load
- CPU utilization spikes
- Potential performance impact on running services
For quick disk usage estimation with minimal overhead, consider these approaches:
# 1. Directory-level summary only
du -h --max-depth=1 /path/to/directory
# 2. Using file system statistics (instantaneous)
df -h /path/to/directory
# 3. Sampling method (faster but less precise)
find /path/to/directory -type f -printf '%s\n' | awk '{total += $1} END {print total}' | numfmt --to=si
For Quick Total Size Estimation
# Using stat on parent directory (fastest but may not match du)
stat -c "%s" /path/to/directory
For Recent Changes Analysis
# Focus only on files modified in last 30 days
find /path -type f -mtime -30 -printf '%s\n' | awk '{total += $1} END {print total}' | numfmt --to=si
For systems requiring regular monitoring without performance impact:
# Background sampling with ionice/nice
ionice -c 3 nice -n 19 du -hs /path/to/directory
# Cached results using tmp file
if [ -f /tmp/du_cache ] && [ $(date +%s -r /tmp/du_cache) -gt $(date +%s --date="1 hour ago") ]; then
cat /tmp/du_cache
else
du -hs /path/to/directory | tee /tmp/du_cache
fi
For interactive exploration with minimal overhead:
# NCurses-based viewer
sudo apt install ncdu
ncdu /path/to/directory
# Web-based visualization (requires python)
pip install dirtree
dirtree --port 8000 /path/to/directory
When working with large directories, du -csh /
can become painfully slow because it recursively calculates the size of every file and directory. This full scan creates significant I/O overhead and CPU usage, especially on systems with deep directory structures or millions of files.
Here are several approaches to get disk usage information with lower overhead:
1. Using --max-depth for Shallow Scans
du -h --max-depth=1 /path/to/directory
This limits recursion depth, showing only immediate subdirectories. For a quick overview of major space consumers:
du -h --max-depth=1 / | sort -h
2. Sampling with find and du
Get an estimate by analyzing only certain file types or sizes:
find /path -type f -size +100M -exec du -ch {} + | tail -1
3. Using ncdu for Interactive Analysis
The ncdu
tool provides a terminal UI and caches results:
sudo apt install ncdu # Debian/Ubuntu
ncdu /path/to/scan
For the fastest possible overview (but less accurate):
df -h
Or for specific mount points:
df -h /home
This one-liner gives a quick overview of large directories:
sudo du -xhd1 / | sort -h -r | head -20
Where:
-x
prevents crossing filesystem boundaries-h
shows human-readable sizes-d1
limits to top-level directories
For development environments where exact sizes aren't critical, consider:
timeout 5s du -h / 2>/dev/null | tail -n 20
This gives partial results after 5 seconds, showing the largest directories found in that time.
Track space usage trends without full rescans:
watch -n 3600 "du -sh /home/user/projects"