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)