  These three classic Unix utilities like to get their hands
dirty with file systems.
****************************************************
df - display disk space usage on mounted filesystems
****************************************************
Every newbie sysadmin learns df right off the bat;
it displays mounted file systems and the disk space usage on each. By
default (in linux) it displays the statistics as measured in 1k blocks.
For the less mathematically inclined, try the -h (human readable) option:
[usr-3@srv-3 usr-3]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda1 1.9G 108M 1.6G 6% /
/dev/hda7 10G 2.4G 7.2G 25% /home
/dev/hda5 99M 435k 93M 1% /tmp
/dev/hda6 2.9G 1.8G 972M 66% /usr
/dev/hda3 243M 93M 138M 40% /var
none 251M 0 251M 0% /dev/shm
eel:/share 169G 74G 87G 46% /share
You'll notice that both local and nfs filesystems are included. Sometimes
you'll get wacky messages that a device is full but df shows plenty of
space. If your filesystem holds many small files, chances are you're out
of inodes. To check this use the -i option:
[usr-3@srv-3 usr-3]$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/hda1 251392 17692 233700 8% /
/dev/hda7 1359872 63108 1296764 5% /home
/dev/hda5 26104 50 26054 1% /tmp
/dev/hda6 384768 100644 284124 27% /usr
/dev/hda3 64512 629 63883 1% /var
none 64304 1 64303 1% /dev/shm
eel:/share 0 0 0 - /share
The number of inodes is set at filesystem creation time, and cannot
be changed once the filesystem is made. So if you're creating a file
system which you know will be holding many small files of 1-10K, use
the options in mke2fs to increase the number of inodes beyond the default.
Finally, use the -T option to include file system types in the listing:
[usr-3@srv-3 usr-3]$ df -T
Filesystem Type 1k-blocks Used Available Use% Mounted on
/dev/hda1 ext3 1976492 110504 1765584 6% /
/dev/hda7 ext3 10689180 2509896 7636292 25% /home
/dev/hda5 ext2 101089 435 95435 1% /tmp
/dev/hda6 ext3 3028080 1878800 995460 66% /usr
/dev/hda3 ext2 248895 94291 141752 40% /var
none tmpfs 257216 0 257216 0% /dev/shm
eel:/share nfs 177265344 77013672 91247124 46% /share
************************************************
du - estimate disk space usage by directory/file
************************************************
Now that you've determined your disk space usage, how will you figure out
who or what is hogging up all that disk space? One way is to use du to
summarize disk space usage by directory/file. For a quick summary of the
space usage in a directory:
[root@srv-3 home]# du -h --max-depth=1
16k ./lost+found
2.2G ./usr-3
188M ./eore
21M ./web
2.4G .
Again, -h makes it human readable, and the --max-depth option tells du
to summarize directories which are only n or fewer levels down from the
command line argument (in this case /home, our current working directory
because we did not specify a directory on the command line.)
If we forgo the -h option, we can pipe it through sort and find the
piggiest files:
[root@srv-3 usr-3]# du | sort -g
the biggest directories show up at the bottom:
429812 ./code/blh/base/src
513876 ./music/zz
532640 ./code/blh/base
541740 ./music
612196 ./tools/general
781756 ./tools
823384 ./code/blh
862448 ./code
2264696 .
So let's investigate that pesky music directory -- that doesn't look
legit for a user on one of *my* systems! Use the -a option to list
counts for files as well as directories:
[root@srv-3 music]# du -a | sort -n
28 ./songlists
4240 ./shake-your-ass/Bodyrock.mp3
4552 ./shake-your-ass/11_Southern_girls.mp3
4924 ./shake-your-ass/Chemical Brothers - Block Rockin' Beat.mp3
5400 ./shake-your-ass/VIOLENTLY_HAPPY_Fluke(Well_Tempered).mp3
24300 ./zz/6girlinformme.wav
27828 ./shake-your-ass
28420 ./zz/95rottenworldblues.wav
34100 ./zz/91musiqueautomatic.wav
34276 ./zz/92ratormole.wav
34524 ./zz/3caringiscreepy.wav
513876 ./zz
541740 .
Uh huh. I could go have a talk with this user! Especially if I'm backing
her music files to tape with my file server backup! Or perhaps I should
just mount her home directory on my workstation.
******************************************************************
dd - copy and convert files
******************************************************************
The dd utility is used to copy and convert files block by block.
It reads from standard in by default and writes to standard out.
[usr-3@srv-3 tmp]$ cat upper
I AM A BUNCH OF UPPER CASE CHARACTERS.
[usr-3@srv-3 tmp]$ dd conv=lcase < upper > lower
0+1 records in
0+1 records out
[usr-3@srv-3 tmp]$ cat lower
i am a bunch of upper case characters.
One can also specify input files and output files at the command line:
[usr-3@srv-3 tmp]$ dd conv=lcase if=upper of=lower
0+1 records in
0+1 records out
There are several conversion options which can be discovered by reading
the fine dd man page; to be honest I've never used dd for this much at
all. I use it to make images of file systems.
example: make a Red Hat boot floppy.
[root@srv-3 images]# dd if=bootnet.img of=/dev/fd0
2880+0 records in
2880+0 records out
[root@srv-3 images]# mount /dev/fd0 /mnt/floppy -t msdos
[root@srv-3 images]# cd /mnt/floppy/
[root@srv-3 floppy]# ls
boot.msg initrd.img param.msg snake.msg vmlinuz
general.msg ldlinux.sys rescue.msg syslinux.cfg
And there you have it. A bootable Red Hat install floppy. Add a kickstart
config file and you're on your way to having unattended automated installs.
It's useful for larger file systems as well (this takes a few minutes and
works the system):
[root@srv-3 home]# dd if=/dev/hda3 of=/home/tmp/var.img
514080+0 records in
514080+0 records out
[root@srv-3 tmp]# mount var.img var -o loop
[root@srv-3 tmp]# cd var
[root@srv-3 var]# ls
cache gdm local log mail opt run tmp yp
db lib lock lost+found nis preserve spool www
[root@srv-3 tmp]# df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda1 1976492 110508 1765580 6% /
/dev/hda7 10689180 2767220 7378968 28% /home
/dev/hda5 101089 435 95435 1% /tmp
/dev/hda6 3028080 1878800 995460 66% /usr
/dev/hda3 248895 94291 141752 40% /var
none 257216 0 257216 0% /dev/shm
eel:/share 177265344 77013676 91247120 46% /share
/home/tmp/var.img 248895 94291 141752 40% /home/tmp/var
The -o loop option to mount allows us to mount files which contain file
system images as filesystems. It is handy, let me tell you!
This article has been brought to you by the letter D.
|