Disk Monitoring

Disk monitoring covers two distinct problems: disk space usage (running out of space crashes applications and corrupts writes) and disk I/O performance (slow disks cause processes to wait in uninterruptible sleep, degrading the entire system). Both need monitoring but require different tools. A third consideration is disk health: SMART monitoring provides early warning of hardware failure before a disk dies unexpectedly.

Disk space usage

df -h              # Disk space on all mounted filesystems
df -h /var/log     # Specific filesystem
du -sh /var/log/*  # Top-level directory sizes

df -h output

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        50G   38G   10G  80% /
/dev/sda2       200G  145G   45G  73% /var
tmpfs           3.9G  2.1G  1.8G  54% /dev/shm

→ / is at 80% — set alert at 85%, investigate at 90%
# Find the largest directories (when disk is filling):
du -sh /* 2>/dev/null | sort -rh | head -10    # Top-level
du -sh /var/* 2>/dev/null | sort -rh | head -10

# Find recently modified large files:
find / -size +100M -mtime -7 -type f 2>/dev/null | xargs ls -lh 2>/dev/null

Inode exhaustion

# Inode exhaustion: filesystem can't create new files even with free space
df -i    # Check inode usage (-i flag)

df -i output showing inode exhaustion

Filesystem      Inodes  IUsed  IFree IUse% Mounted on
/dev/sda1      3276800 3276799      1  100% /var/spool/mail
→ 100% inodes used! Cannot create any new files despite having disk space
# Find directory with most files (the inode hog):
find /var/spool -type d | while read dir; do
    count=$(ls "$dir" | wc -l)
    echo "$count $dir"
done | sort -rn | head -10

iostat for I/O performance

# Install sysstat for iostat:
sudo apt install -y sysstat

# Monitor disk I/O in real time:
iostat -xz 1 3    # Extended stats, skip idle devices, 1-second interval

iostat -xz output

Device   r/s   w/s  rkB/s  wkB/s  await  svctm  %util
sda     45.2  23.1  892.1  445.2   8.42   1.23   8.5%  ← healthy
sdb      1.2 892.4    4.5 8924.1  245.3  18.72  99.8%  ← saturated!

await: average I/O wait time in ms (>20ms for HDD = overloaded, >1ms for SSD = overloaded)
%util: disk utilization (>80% = bottleneck)

SMART health monitoring

# Install smartmontools for disk health monitoring:
sudo apt install -y smartmontools

# Check disk health:
sudo smartctl -H /dev/sda    # Quick health check

SMART health status

SMART overall-health self-assessment test result: PASSED
# If FAILED: disk is predicting imminent failure — backup immediately
# View SMART attributes (warning signs):
sudo smartctl -A /dev/sda | grep -E "Reallocated|Pending|Uncorrectable"
# Reallocated_Sector_Ct > 0 = sectors failed and replaced — disk is degrading
# Current_Pending_Sector > 0 = sectors about to fail

# Enable automatic SMART monitoring:
sudo systemctl enable --now smartd

Conclusion

Set up monitoring alerts for disk space above 85%, inode usage above 85% (run df -i in your monitoring, not just df -h), and SMART failures. For production servers, enable smartd for automatic disk health monitoring — it emails when a drive reports degraded SMART attributes, giving you time to replace the drive before it fails completely. Check iostat %util and await when applications are slow and CPU looks idle: the bottleneck may be disk I/O.

Need help with Ubuntu administration?

Work directly with Muhammad Irfan Aslam for Ubuntu Server, Linux, cloud, Docker, DevOps, CI/CD, or infrastructure troubleshooting support.

Work with Muhammad Irfan Aslam