Is there a way to increase my existing "swapfile" without having to destroy and re-create it? I would like to up my swap space from 1GB to 2GB. Currently it is set up as such:

$ sudo swapon -s
Filename                Type        Size    Used    Priority
/swapfile               file        1048572 736640  -1
$ ls -lh /swapfile
-rw------- 1 root root 1.0G Nov  9  2016 /swapfile

I'm using Ubuntu 14.04.

  • How much RAM do you have? Is 2G enough? I think that you'll have to swapoff, create a new /swapfile, mkswap, and swapon -a – heynnema Jun 21 '17 at 21:16
  • 1
    Add a new swap file, follow the instruction of the above question. you can have 2 swap file ;) – Ravexina Jun 21 '17 at 21:16
  • 1
    @Ravexina, A newbie question perhaps, but why would I want to add a new swap file rather than increasing the size of the existing one? Or is it not possible to increase an existing swap file? – Dave Jun 21 '17 at 21:25
  • @Dave That's possible too, as you may know we can swapoff then dd and mkswap finally swapon. I thought you don't want to touch your file. – Ravexina Jun 21 '17 at 21:29
  • 2
    @Ravexina post that as answer – Sergiy Kolodyazhnyy Jun 21 '17 at 21:42
up vote 41 down vote accepted

First disable swap file:

sudo swapoff /swapfile

Now let's increase the size of swap file:

sudo dd if=/dev/zero of=/swapfile bs=1M count=1024 oflag=append conv=notrunc

The above command will append 1GiB of zero bytes at the end of your swap file.

Setup the file as a "swap file":

sudo mkswap /swapfile

enable swaping:

sudo swapon /swapfile
  • 2
    sudo fallocate -l 2G /swapfile is probably safer than dd (although it doesn't keep the original swapfile), and it also needs a sudo chmod 600 /swapfile. – heynnema Jun 21 '17 at 23:18
  • 3
    @heynnema Doesn't fallocate make sparse files? The swapon manpage says sparse swap files are problematic (specifically mentioning fallocate). – muru Jun 22 '17 at 1:37
  • @muru I think the answer is yes, it creates sparse files, "as preallocation is done quickly by allocating blocks and marking them as uninitialized, requiring no IO to the data blocks"... but then the mkswap command should take care of that, no? The big concern with this dd example is if the user enters a space before the "swapfile", and wipes their root. – heynnema Jun 22 '17 at 1:45
  • 3
    @heynnema no, the mkswap manpage also says that the files should not contain any holes. – muru Jun 22 '17 at 1:46
  • 1
    @heynnema: What you could do is to use fallocate to pre-allocate disk space and then use dd to fill the holes with zeros. – David Foerster Jun 22 '17 at 9:49

You should add a new swapfile instead of resizing the exist one because it costs you nothing to do so. To resize a swapfile, you must first disable it, which evicts the swap contents to RAM, which increases pressure on RAM and may even summon the OOM killer (not to mention that you could possibly be thrashing your disks for several minutes). Multiple swap files are not a problem, it's trivially easy to setup yet another swap file. There's quite literally no benefit to resizing a swap file over adding another.

dd if=/dev/zero of=/some/file count=1K bs=1M
mkswap /some/file
sudo chown root:root /some/file
sudo chmod 600 /some/file
sudo swapon /some/file
  • Is the sudo chmod 600 /some/file required, or no? – heynnema Jun 22 '17 at 1:59
  • And does count=1K give a 1G file? count is in block size, yes? And that can be 512/4096? Or is my math wrong? – heynnema Jun 22 '17 at 2:06
  • @heynnema 1K*1M is 1G, so yes, it gives a 1G file. It can be whatever you want it to be. Once the swapfile is activated, you can't normally write to it or modify it (only root can, IIRC, so permissions wouldn't matter anyway). – muru Jun 22 '17 at 2:12
  • 2
    +1 This approach also makes it easy to disconnect one of the swapfiles if you later decide you need the disk space back. – joeytwiddle Jun 22 '17 at 8:51
  • 1
    This really needs to be marked as the correct answer. Wow, bravo! – Beshoy Girgis Apr 27 at 23:36

You can create another swap file as i did:

  1. sudo fallocate -l 4G /swapfile
  2. sudo chmod 600 /swapfile
  3. sudo mkswap /swapfile
  4. sudo swapon /swapfile
  5. Verify it is working with sudo swapon --show
    To make it permanent add a file to the fstabfile typing:
    echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

I have good results on my Ubuntu 17.04 following the advice of Arian Acosta from the blogpost. One can substitute the 4G here sudo fallocate -l 4G /swapfile with any amount of gigabytes you want. For example sudo fallocate -l 2G /swapfile for TS.

Generally speaking, the recommended size for a swap file is 2X the amount of RAM, but you can make it as big as you need. Remember that this is not a substitute for memory because performance is much worse since things are stored in the disk.

I’ve created a simple bash script that increments the swap file to 4GB and tested it on Ubuntu 16.04.

This can be run line by line or a bash script, but I use it to make headless installations.

#!/bin/bash
echo "====== Current Swap ======"
sudo swapon -s
echo "====== Turning Off Swap ======"
sudo swapoff /swapfile
echo "====== Allocating 4GB Swap ======"
sudo fallocate -l 4G /swapfile
echo "====== Making Swap ======"
sudo mkswap /swapfile
echo "====== Setting Permissions to Root Only  ======"
sudo chmod 600 /swapfile
echo "====== Turning On Swap ======"
sudo swapon /swapfile
echo "====== Current Swap ======"
sudo swapon -s
echo "====== Done! ======"
  • 1
    You should have added an argument to the script, which is the amount of SWAP to be added and finally add it to fstab. But still, i like this – LnxSlck Nov 24 at 10:48

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.