Adding Swap Space on the Fly in Linux

Sometimes in the course of a system’s existence you find that the swap partition you set up at install-time just isn’t enough anymore. Maybe you’re upgrading your system to RedHat 7.1 from a version of RedHat that used less swap in relation to physical RAM. Perhaps you’re running Oracle. Or maybe you’re adding more memory and would like to increase swap space accordingly.

Our machine srv-2 is swapping like mad and we just can’t take it down right now to add more RAM. So to keep the machine from running out of memory entirely and freezing, we’ll add 128 MB more swap space by creating a swap file.

First we check out the memory usage:

[root@srv-2 /root]# free -m
total       used       free     shared    buffers     cached
Mem:           251        242          8         22         11         32
-/+ buffers/cache:        198         52
Swap:          133        133          0

Make sure we have 128 MB laying around somewhere:

[root@srv-2 /root]# df
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/hda9               132207     33429     91952  27% /
/dev/hda1                15522      2537     12184  17% /boot
/dev/hda6              6143236    739000   5092176  13% /opt
/dev/hda7              1035660    836204    146848  85% /usr
/dev/hda5              2071384    344048   1622112  17% /usr/local
/dev/hda8               303344     14439    273244   5% /var

OK, we’re going to make a swap file in /opt by using dd to create a file 128 MB in size.

[root@srv-2 /opt]# dd if=/dev/zero of=swapfile bs=1024 count=132207
132207+0 records in
132207+0 records out
[root@srv-2 /opt]# ls -l
total 132364
drwxr-xr-x   20 usr-3 users        4096 May 22 10:46 usr-3
drwxr-xr-x    2 root     root        16384 Feb 21 07:04 lost+found
-rw-r--r--    1 root     root     135379968 May 29 11:52 swapfile

Hey, I know, let’s not make it world-readable…

[root@srv-2 /opt]# chmod 600 swapfile
[root@srv-2 /opt]# ls -l
total 132364
drwxr-xr-x   20 usr-3 users        4096 May 22 10:46 usr-3
drwxr-xr-x    2 root     root        16384 Feb 21 07:04 lost+found
-rw-------    1 root     root     135379968 May 29 11:52 swapfile

Now we set up the swap area and enable it.

[root@srv-2 /opt]# mkswap swapfile
Setting up swapspace version 1, size = 135372800 bytes
[root@srv-2 /opt]# swapon swapfile

And viola! Twice as much swap as before.

[root@srv-2 /opt]# free
total       used       free     shared    buffers     cached
Mem:        257632     254632       3000       2512      36172      15096
-/+ buffers/cache:     203364      54268
Swap:       268708     136512     132196

You can edit /etc/fstab to enable your swap file automatically at boot time.
By adding an entry like this:

/opt/swapfile           swap                    swap    defaults        0 0

Sure, swapping’s ugly, slow and will grind your hard drives to dust. But even modern systems which have been tuned for performance require a generous oodle of swap space.