To get an idea how much free space remains on your partitions, use df(1)
. This program displays the total number of filesystem blocks on each partition, how many blocks are in use, and how many blocks are free. It also gives you the percent in use.
One annoying thing about df
is that it offers this information in 512-byte blocks by default. This was fine when disks were much smaller, but today, it’s like measuring the distance of an airplane flight in yards. Some people have done this for so long that they automatically perform block transformations in the back of their mind.[19] For the rest of us, the -h
flag tells df
to provide human-readable output, such as megabytes or gigabytes, giving us something like this:
# df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/sd0a 1005M 39.1M 916M 4% /
/dev/sd0k 26.9G 27.0G -104M -1% /home
/dev/sd0d 3.5G 12.0K 3.3G 0% /tmp
…
You might wonder why the /home partition in this example has negative free space. How is that possible? By default, FFS reserves 5 percent of each partition for moving files and reducing fragmentation. When you exceed 100 percent disk utilization, you begin tapping into this reserved space.
FFS performance degrades quickly when the partition is overfull. It’s best to keep some free space on your disk so that FFS can defragment itself.
You can reduce the amount of space FFS reserves, but doing so will impact performance. See tunefs(8)
for instructions on how to shoot yourself in the foot.
When you see a partition is full, the obvious question is “What’s filling up my disk?” Every hard drive I’ve ever owned has gradually filled up for no apparent reason. You can identify individual large files with ls -l
, but recursively examining every directory in the filesystem is impractical and tedious (not to mention annoying).
To check the number of filesystem blocks used within each directory below the current directory, use du(1)
.
$ du
164 ./.ssh
2 ./old
6 ./.mozilla/firefox/bcpuv16e.default/chrome
80 ./.mozilla/firefox/bcpuv16e.default/Cache/0/B0
354 ./.mozilla/firefox/bcpuv16e.default/Cache/0/31
28 ./.mozilla/firefox/bcpuv16e.default/Cache/0/7A
…
When I run du
in my home directory, I get 700 entries; of those, 563 are related to some Mozilla tool. This kind of list intimidates the new sysadmin and makes the experienced sysadmin work too hard. Rather than cull through this list manually, tell du
to show only the total for directories in the current directory, and then sort the output so that the largest directories appear first.
$ du -s * | sort -rnk 1
25224805 Dark_Shadows_Complete_Series
141104 mibs
14948 tarballs
4668 work
1864 pix
…
I now know why my /home partition is full.
You can tell du
to display human-readable values with the -h
flag, but doing so will show values in a mix of gigabytes, megabytes, and kilobytes, making sort
far less useful.
Many disk tools—including, but not limited to, du(1)
and df(1)
—display information in 512-byte blocks. If you’re accustomed to working in blocks, you probably won’t mind seeing them. If you’re not used to working in blocks, however, they’ll probably make you want to tear out your hair.
The environment variable BLOCKSIZE
tells these programs to display information using blocks of a different size. If you set BLOCKSIZE
to K
, df
and du
will display totals in kilobytes. If you set it to M
, these tools will show megabytes instead. Check your shell manual page or the dotfiles in your home directory for examples of setting environment variables.