DEV Community

Eric F 🇺🇦
Eric F 🇺🇦

Posted on • Edited on

Adding a swapfile in #Linux

I usually go with a swapfile instead of a swap partition. So, during installation I don't create that partition, and instead I add the swapfile later.

So, here's how I do it.

First, I do everything as su:

~$ su -
Password:
~# 
Enter fullscreen mode Exit fullscreen mode

 

Create the directory and the swapfile. I prefer the path /var/vm/. Others may prefer /var/swap/. To create the swapfile - you can use dd, or fallocate if you prefer that one. I use dd.

The size of the swapfile may vary on your needs. I usually go with quite a big one, so in case I want to hibernate - there will be enough room. So, on an old laptop with 3G of RAM - I'll go with 4G.

~# mkdir /var/vm && cd /var/vm
vm# dd if=/dev/zero of=./swapfile0 bs=1M count=4096 status=progress 
4237295616 bytes (4,2 GB, 3,9 GiB) copied, 45 s, 94,2 MB/s
4096+0 records in
4096+0 records out
4294967296 bytes (4,3 GB, 4,0 GiB) copied, 45,6187 s, 94,1 MB/s
Enter fullscreen mode Exit fullscreen mode

 

And set the permissions to 600:

vm# chmod 600 swapfile0
vm# ls -l swapfile0
total 4194304
-rw-------. 1 root root 4294967296  5 jan 03.14 swapfile0
Enter fullscreen mode Exit fullscreen mode

 

Then make it an actual swapfile, turn the swap on, and check the status.

vm# mkswap swapfile0
Setting up swapspace version 1, size = 4 GiB (4294963200 bytes)
no label, UUID=<unique hash string>
vm# swapon swapfile0
vm# swapon -s
Filename            Type        Size    Used    Priority
/var/vm/swapfile0   file        4194300 0       -2
Enter fullscreen mode Exit fullscreen mode

 

To make it mount on boot, we need to add it to /etc/fstab. So, with your favorite editor (eg. vim, vi, nano, etc)…

vm# vim /etc/fstab
Enter fullscreen mode Exit fullscreen mode

 

And add these lines to the end of the file:

# Swapfile0
/var/vm/swapfile0   none    swap    defaults    0 0
Enter fullscreen mode Exit fullscreen mode

Using the free command will get you information on how much swap you have and are using.

$ free -h
              total        used        free      shared  buff/cache   available
Mem:          2,9Gi       1,3Gi       493Mi       140Mi       1,1Gi       1,3Gi
Swap:         4,0Gi       132Mi       3,9Gi
Enter fullscreen mode Exit fullscreen mode

SELinux

To make sure it works fine with SELinux, we need to set the correct context to the file: 'swap_t'.

~# semanage fcontext -a -t swapfile_t '/var/vm/swapfile0'
~# restorecon /var/vm/swapfile0 
~# ls -lZ /var/vm/
total 4194304
-rw-------. 1 root root unconfined_u:object_r:swapfile_t:s0 4294967296  5 jan 03.17 swapfile0
Enter fullscreen mode Exit fullscreen mode

Tuning

To tune the cache so it doesn't swap too much, you can add these settings to sysctl.conf. In some systems/distros, you can add them directly there. In others you make an xtra file that will be sourced.

On my Rocky Linux system, I use an xtra file, like this:

~# vim /etc/sysctl.d/90-swappiness.conf
Enter fullscreen mode Exit fullscreen mode

 

Then add this content:

#
# /etc/sysctl.d/90-swappiness.conf
#
# Description:
#     sysctl.conf settings for swap
#

vm.swappiness=10
vm.vfs_cache_pressure=40

vm.dirty_background_ratio=10
vm.dirty_ratio=15 
Enter fullscreen mode Exit fullscreen mode

 

Now all is good. :)


// Happy hacking… 👍

· Eric

Top comments (0)