Hack #21. Manage Temporary Files and Swap Space

Add more temporary or swap space without repartitioning.

When you install any operating system, it's important to allocate sufficient
disk space to hold temporary and swap files. Ideally, you already know the optimum
sizes for your system so you can partition your disk accordingly during the
install. However, if your needs change or you wish to optimize your initial
choices, your solution doesn't have to be as drastic as a repartition - and
reinstall - of the system.

TIP: man tuning has some practical advice for guesstimating
the appropriate size of swap and your other partitions.

Clearing /tmp

Unless you specifically chose otherwise when you partitioned your disk, the
installer created a /tmp filesystem for you:

Here I searched /etc/fstab for the /tmp filesystem. This
particular filesystem is 256 MB in size. Only a small portion contains temporary
files.

TIP: The df (disk free) command will always show you
a number lower than the actual partition size. This is because eight percent
of the filesystem is reserved to prevent users from inadvertently overflowing
a filesystem. See man tunefs for details.

It's always a good idea to clean out /tmp periodically so it doesn't
overflow with temporary files. Consider taking advantage of the built-in periodic
script /etc/periodic/daily/110.clean-tmps [Hack #20] .

You can also clean out /tmp when the system reboots by adding this
line to /etc/rc.conf:

clear_tmp_enable="YES"

Moving /tmp to RAM

Another option is to move /tmp off of your hard disk and into RAM.
This has the built-in advantage of automatically clearing the filesystem when
you reboot, since the contents of RAM are volatile. It also offers a performance
boost, since RAM access time is much faster than disk access time.

Before moving /tmp, ensure you have enough RAM to support your desired
/tmp size. This command will show the amount of installed RAM:

Notice that the filesystem is now md0, the first memory disk,
instead of ad0s1e, a partition on the first IDE hard drive.

Creating a Swap File on Disk

Swap is different than /tmp. It's not a storage area for temporary
files; instead, it is an area where the filesystem swaps data between
RAM and disk. A sufficient swap size can greatly increase the performance of
your filesystem. Also, if your system contains multiple drives, this swapping
process will be much more efficient if each drive has its own swap partition.

Note that the swapinfo command displays the size of your swap
files. If you prefer to see that output in MB, try the swapctl
command with the -lh flags (which make the listing more
human):

% swapctl -lh
Device: 1048576-blocks Used:
/dev/ad0s1b 624 0

To add a swap area, first determine which area of disk space to use. For example,
you may want to place a 128 MB swapfile on /usr. You'll first need
to use dd to create this as a file full of null (or zero) bytes.
Here I'll create a 128 MB swapfile as /usr/swap0:

Next, change the permissions on this file. Remember, you don't want users storing
data here; this file is for the filesystem:

# chmod 600 /usr/swap0

Since this is really a file on an existing filesystem, you can't mount
your swapfile in /etc/fstab. However, you can tell the system to find
it at boot time by adding this line to /etc/rc.conf:

swapfile="/usr/swap0"

To start using the swapfile now without having to reboot the system, use mdconfig:

# mdconfig -a -t vnode -f /usr/swap0 -u 1 && swapon /dev/md1

The -a flag attaches the memory disk. -t vnode marks
that the type of swap is a file, not a filesystem. The -f flag
sets the name of that file: /usr/swap0.

The unit number -u 1 must match the name of the memory disk /dev/md1.
Since this system already has /tmp mounted on /dev/md0, I
chose to mount swap on /dev/md1. && swapon tells
the system to enable that swap device, but only if the mdconfig
command succeeded.

See Also

Dru Lavigne
is a network and systems administrator, IT instructor, author and international speaker. She has over a decade of experience administering and teaching Netware, Microsoft, Cisco, Checkpoint, SCO, Solaris, Linux, and BSD systems. A prolific author, she pens the popular FreeBSD Basics column for O'Reilly and is author of BSD Hacks and The Best of FreeBSD Basics.