How to add a Swap File in Linux
There might be situations when you need extra swap space to improve your Linux server/desktop system performance. How do you add a swap file to Linux system using command line options without creating a new partitions? Or is it even possible. Well in answer for the second question..Yes, its possible. and as for the question on how it is done, come lets find out 🙂
In Linux, as in most other Unix-like operating systems, it is common to use a whole partition of a hard disk for swapping. You can add swap file as a dedicated partition which is the usual way we do it or use following instructions below to create a swap file.
You need to use the dd command to create swap file. The mkswap command is used to set up a Linux swap area on a device or in a file.
Step #1: Login as the Root User
Open a terminal window (select Applications > Accessories > Terminal) or login to remote server using the ssh client. Switch to the root user by typing su - (or sudo -s) and entering the root password, when prompted:
OR
Step #2: Create Storage File
Type the following command to create 512MB swap file (1024 * 512MB = 524288 block size):
Sample outputs:
524288+0 records in
524288+0 records out
536870912 bytes (537 MB) copied, 3.23347 s, 166 MB/s
Where,
- if=/dev/zero : Read from /dev/zero file. /dev/zero is a special file in that provides as many null characters to build storage file called /swapfile1.
- of=/swapfile1 : Read from /dev/zero write storage file to /swapfile1.
- bs=1024 : Read and write 1024 BYTES bytes at a time.
- count=524288 : Copy only 523288 BLOCKS input blocks
Step #3: Secure swap file
Setup correct file permission for security reasons, enter
# chmod 0600 /swapfile1
The reason we set the permissions 600 is self explanatory. A world-readable swap file is a huge local vulnerability which should not be the permissions to be given for a swap partition. The above commands make sure only root user can read and write to the file.
Step #4: Set up a Linux swap area
Type the following command to set up a Linux swap area in a file:
Sample outputs:
Setting up swapspace version 1, size = 524284 KiB
no label, UUID=0e5e7c60-bbba-4089-a76c-2bb29c0f0839
Step #5: Enabling the swap file
Finally, activate /swapfile1 swap space immediately, enter:
# swapon /swapfile1
Step #6: Update /etc/fstab file
To activate /swapfile1 after Linux system reboot, add entry to /etc/fstab file. Open this file using a text editor such as vi:
# vi /etc/fstab
Append the following line:
/swapfile1 none swap sw 0 0
Save and close the file. Next time Linux comes up after reboot, it enables the new swap file for you automatically.
How do I verify swap is activated or not?
Simply use the free command:
$ free -m
total used free shared buffers cached
Mem: 1876 1798 77 0 119 1440
-/+ buffers/cache: 237 1638
Swap: 4607 0 4607
How can I display swap usage summary on Linux?
Type the following swapon command:
# swapon -s
Filename Type Size Used Priority
/dev/sda6 partition 4194296 0 0
/swapfile1 file 524280 0 -1
How do I set swappiness on a Linux server?
The syntax is:
# sysctl vm.swappiness=VALUE
# sysctl vm.swappiness=20
OR
# echo VALUE > /proc/sys/vm/swappiness
# echo 30 > /proc/sys/vm/swappiness
The value which is specified in /proc/sys/vm/swappiness file controls how aggressively the kernel will swap memory pages. Specifying a heigher value increase its agressiveness. The default value is 60. To make changes permanent add the following line to/etc/sysctl.conf:
echo ‘vm.swappiness=30’ >> /etc/sysctl.conf