17

I know how to create and use a swap partition but can I also use a file instead?

How can I create a swap file on a Linux system?

3 Answers3

20

Let's start with the basic information, you should inspect what vm.swappiness is set, and if set wisely to a more acceptable value than 60, which is the default, you should have no problem. This command can be run as normal user:

sysctl vm.swappiness

For instance, I have 32GB RAM server with 32GB swap file with vm.swappiness = 1. Quoting the Wikipedia:

vm.swappiness = 1: Kernel version 3.5 and over, as well as Red Hat kernel version 2.6.32-303 and over: Minimum amount of swapping without disabling it entirely.


In this example, we create a swap file:

  • 8GB in size,

  • Located in / (the root directory).

Change these two things accordingly to your needs.

  1. Open terminal and become root (su); if you have sudo enabled, you may also do for example sudo -i; see man sudo for all options):

    sudo -i
    
  2. Allocate space for the swap file:

    dd if=/dev/zero of=/swapfile bs=1G count=8
    

Optionally, if your system supports it, you may add status=progress to that command line.

Note, that the size specified here in G is in GiB (multiples of 1024).

  1. Change permissions of the swap file, so that only root can access it:

    chmod 600 /swapfile
    
  2. Make this file a swap file:

    mkswap /swapfile
    
  3. Enable the swap file:

    swapon /swapfile
    
  4. Verify, whether the swap file is in use:

    cat /proc/swaps
    
  5. Open a text editor you are skilled in with this file, e.g. nano if unsure:

    nano /etc/fstab
    
  6. To make this swap file available after reboot, add the following line:

    /swapfile        none        swap        sw        0        0
    
3
$ sudo fallocate -l 1G /swapfile
$ sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile

Editor's note: Step 1 and Step 2 are interchangeable.

kolypto
  • 139
0

Please check the script for creating a SWAP Memory of 16GB:

#!/bin/bash

#find Free free -h #Checking availability space df -h #swap Off sudo swapoff /swapfile #Allocate swap sudo fallocate -l 16G /swapfile #correct amount of space was reserved ls -lh /swapfile #file only accessible to root sudo chmod 600 /swapfile #amount of space was reserved for the root ls -lh /swapfile #now mark the file as swap space sudo mkswap /swapfile #Swap On sudo swapon /swapfile #swap Show sudo swapon --show #statment echo -e "\n\n Swap 16Gb done"

exit 0

Pratik Mehta
  • 101
  • 1