Running out of disk space is one of the most disruptive events on a Linux server, and it often happens silently until a service crashes or a write fails. Red Hat Enterprise Linux 8 ships with several tools to help you stay ahead of the problem: df for a quick filesystem overview, du for directory-level usage, lsblk to see the full block-device tree, and the interactive ncdu utility for rapid drill-down. Combining these tools gives you a complete picture of where your disk space is going and how to reclaim it.

Prerequisites

  • A running RHEL 8 system with root or sudo access
  • EPEL 8 repository enabled for ncdu (sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm)
  • ncdu installed: sudo dnf install -y ncdu
  • Basic familiarity with the Linux command line

Step 1 — Check Filesystem Usage with df

The df (disk free) command reports the amount of space used and available on each mounted filesystem. The -h flag prints human-readable sizes (KB, MB, GB). Pay attention to the Use% column — when any filesystem exceeds 80–85%, it warrants investigation.

# Show all mounted filesystems in human-readable format
df -h

# Show only real filesystems (exclude tmpfs, devtmpfs, etc.)
df -hT --exclude-type=tmpfs --exclude-type=devtmpfs

# Show inode usage (running out of inodes = no new files, even with free space)
df -i

# Show the filesystem type alongside usage
df -hT

# Check a specific mount point
df -h /var

Inode exhaustion (shown by df -i) is easy to overlook. A filesystem can show free blocks but still refuse to create new files if all inodes are consumed — a common problem on mail spools or directories with millions of small files.

Step 2 — Find Large Directories with du

The du (disk usage) command reports how much space a directory and its contents consume. Combined with sort and head, it quickly identifies the biggest offenders across the entire filesystem.

# Show the total size of a single directory
du -sh /var/log

# Summarise all top-level directories, sorted by size (largest first)
sudo du -sh /* 2>/dev/null | sort -rh | head -20

# Drill down one level into a specific directory
du -h --max-depth=1 /var | sort -rh

# Find the top 10 largest directories under /var
du -h /var 2>/dev/null | sort -rh | head -10

# Show sizes for all direct children of /home
du -sh /home/*

Step 3 — Inspect Block Devices with lsblk and blkid

lsblk displays the full block-device tree — physical disks, partitions, LVM volumes, and loop devices — in a single readable table. The -f flag adds filesystem type, label, UUID, and mount point information, making it invaluable for storage mapping.

# Show all block devices with filesystem info
lsblk -f

# Show sizes in human-readable format with device type
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT,LABEL

# List all partitions on a specific disk (detailed)
sudo fdisk -l /dev/sda

# Show UUID and filesystem type for all block devices
sudo blkid

# Find a device by its UUID
sudo blkid | grep "your-uuid-here"

The UUID shown by blkid is the value to use in /etc/fstab for persistent mounts — never rely on device names like /dev/sdb1 which can change between reboots when disks are added or removed.

Step 4 — Interactive Disk Usage with ncdu

ncdu (NCurses Disk Usage) provides a terminal-based interactive browser that lets you navigate directory trees and instantly see what is consuming space. It is far faster for exploration than running repeated du commands manually.

# Install ncdu from EPEL
sudo dnf install -y ncdu

# Scan and browse the entire filesystem (run as root for full access)
sudo ncdu /

# Scan only /var (useful on servers where /var fills up most often)
sudo ncdu /var

# Export a scan to a file for later review (useful on remote servers)
sudo ncdu -o /tmp/disk_scan.json /
# Load and browse the saved scan on another machine
ncdu -f /tmp/disk_scan.json

Inside ncdu: use the arrow keys to navigate, Enter to descend into a directory, d to delete a file or folder, i for item info, and q to quit. Press ? for the full key-binding help screen.

Step 5 — Find Large Individual Files with find

Sometimes a single runaway log file or core dump is responsible for filling a filesystem. The find command can locate files above a size threshold anywhere on the system.

# Find all files larger than 100 MB on the entire filesystem
sudo find / -xdev -type f -size +100M -exec ls -lh {} ; 2>/dev/null

# Find files larger than 1 GB and display size, sorted
sudo find / -xdev -type f -size +1G 2>/dev/null | xargs ls -lh | sort -k5 -rh

# Find core dump files (often very large)
sudo find / -xdev -name 'core' -o -name 'core.[0-9]*' 2>/dev/null

# Find log files larger than 50 MB under /var/log
sudo find /var/log -type f -size +50M -exec ls -lh {} ;

# Find files not accessed in the last 180 days (candidates for archiving)
sudo find /var -type f -atime +180 -exec ls -lh {} ; 2>/dev/null | head -20

Conclusion

You now have a complete toolkit for disk usage monitoring on RHEL 8: df -h for a fast per-filesystem overview including inode usage, du -sh /* | sort -rh to find the heaviest top-level directories, lsblk -f and blkid to map your storage layout, ncdu for interactive drill-down, and find -size to hunt down individual large files. Running these tools together takes under five minutes and will surface the cause of almost any disk-space emergency. Consider adding a daily df check to your crontab to receive early warnings before a filesystem reaches capacity.

Next steps: How to Manage LVM Logical Volumes on RHEL 8, How to Schedule Automated Tasks with cron and anacron on RHEL 8, and How to Configure Log Rotation with logrotate on RHEL 8.