I have, by default, 250MB of swap space in Ubuntu, and I want to expand it to a larger size. I need 800MB, which I think will be enough to open several applications without having to hit the current limit of swap. I hope someone can help me.
You can always create swap file
to add more swap space. This is not same (in every aspect) as swap partition but it will be easy and dynamic.
/media/fasthdd/swapfile.img to anything you like, for example it can be
/swap.img as well.
/media/fasthdd/swapfile.img is just example filename, if you are using this one then of course there must be directory
/media/fasthdd/ with enough free space for your new swap file.
Use any of terminal applications to run commands. All command should be run with root privileges, to do this you can either add
sudo to beginning of every command or run
sudo bash before running commands.
1. Create empty file:
This file will contain virtual memory contents so make file big enough for your needs. This one will create 1Gb file which means +1Gb swap space for your system:
dd if=/dev/zero of=/media/fasthdd/swapfile.img bs=1024 count=1M
If you want to make 3Gb file then change count value to
man dd for more information.
2. Bake swap file:
Following command is going to make "swap filesystem" inside your fresh swap file.
3. Bring up on boot:
To make sure that your new swap space is activated while booting up computer you should add it to filesystem configuration file
/etc/fstab. Add it to end of file, this is recommended because other filesystems (at least one that contains swap file) must be mounted in read-write mode before we can access any files.
# Add this line to /etc/fstab /media/fasthdd/swapfile.img swap swap sw 0 0
You can either reboot your computer or activate new swap file by hand with following command:
If everything goes well
you should see that more swap space is available for use. You can use following commands to check your new swap and confirm that it is active:
cat /proc/swaps Filename Type Size Used Priority /media/fasthdd/swapfile.img file 8388604 2724 -1 grep 'Swap' /proc/meminfo SwapCached: 4772 kB SwapTotal: 8388604 kB SwapFree: 8355812 kB
GUI method for increasing the size of swap partition
Another way to increase the swap size is to use the GParted partition Editor. In short, you resize the swap partition, then right click on it and choose "Swapon".
It's easier to boot gparted-live-disk or an Ubuntu live disk (so that the all
/dev/sda partitions will be unmounted). If you run Ubuntu live disk in some versions before 18.04, you may need to install gparted by running the commands below:
sudo apt-get update sudo apt-get install gparted && sudo gparted
You must be able to increase the size of swap partition only if there is an unallocated space present before or after the swap partition. If there was no unallocated space (the space which we are trying to add with swap partition) below or above the swap partition, then we have to resize the partitions and get that unallocated space.
Case 1 - unallocated space present before or after the swap partition
In the above screenshot, I had 11.4 GB of unallocated space before the linux-swap and 12.8 GB after the swap partition.
To resize, right click on the swap partition (/dev/sda9 here) and click on the Resize/Move option. It will look like this:
Dragging the slider arrows left or right then click on the Resize/Move button. Your swap partition will be resized.
Case 2 - unallocated space is between the partitions
In the above screenshot, the unallocated space which we wants to add to the swap partition was between
/dev/sda8.To move the unallocated space from that to just above swap partition,we have to follow the simple steps given below,
Right-click on the /dev/sda8 partition and click on Resize/Move option.
click and move the slider to the extreme left,so that the unallocated space which was just above the
/dev/sda8partition will comes below
/dev/sda8.After that click Resize/Move button.
And now the unallocated space was just above to the swap partition which was like Case 1.Now follow Case 1.
Case 3 - if the unallocated space was present outside the Extended partition)
I had an unallocated space of 18 GB just below to the extended partition.To add this space to the linux-swap partition(which was present inside the extended partition),we have to follow the below steps,
Right-click on the extended partition and select Resize/Move option,it will be like the below screenshot
Click and drag the arrow to the extreme right and click on Resize/Move,so that the unallocated space of 18 GB will comes at the bottom of extended partition.I had a 14.80 GB of unallocated space already present at the bottom and now the 18.34 GB combines with that to create unallocated space of (18.34+14.80 GB) at the bottom of the extended partition.
Now there was an unallocated space just below to the swap partition,it will be like Case 1,then follow case 1.
NOTE: Don't forget to take backup of all your important datas before proceeding the above operations.
You can also use
fallocate if you want to reserve space for your swapfile, without the need to fill the file with 0 through
DESCRIPTION fallocate is used to preallocate blocks to a file. For filesystems which support the fallocate system call, this is done quickly by allocating blocks and marking them as uninitialized, requiring no IO to the data blocks. This is much faster than creating a file by filling it with zeros.
If you already have a
swap defined, you can either remove it or keep it, and your *nix will manage it (even better with by defining a
swapon priority). This could be usefull, in case you want to spread your swap between different devices, drive (based on their speed or other custom needs, see What is the purpose of multiple swap files on StackExchange).
fallocate usage for adding a second swap file
Check swap situation:
$ sudo swapon -s Filename Type Size Used Priority /swapfile file 262140 246276 -1
Create a 4G swap file
Standard way of creating and activating a swap file.
$ size="4G" && file_swap=/swapfile_$size.img && sudo touch $file_swap && sudo fallocate -l $size /$file_swap && sudo mkswap /$file_swap && sudo swapon -p 20 /$file_swap
Make your swap permanent
Add a line in your
/etc/fstab file so that swap will be initialized on the next reboot (we also update here the priority of the newly created swap space and we update the priority of the old swap file).
In your /etc/fstab file, notice the priority of the prev swap is now 10.
/swapfile none swap sw,pri=10 0 0 /swapfile_4G.img none swap sw,pri=20 0 0
Check swap situation after reboot:
$ sudo swapon -s Filename Type Size Used Priority /swapfile file 262140 0 10 /swapfile_4G.img file 4194300 0 20
Remove one of the swap space (for example the original 256Mb)
Remove the line related to the swap you want to remove.
Delete that swap
Delete and remove the swap file.
sudo swapoff /mnt/swapfile && sudo rm /mnt/swapfile
Resize Swap to 8GB
# Turn swap off # This moves stuff in swap to the main memory and might take several minutes sudo swapoff -a # Create an empty swapfile # Note that "1G" is basically just the unit and count is an integer. # Together, they define the size. In this case 8GB. sudo dd if=/dev/zero of=/swapfile bs=1G count=8 sudo mkswap /swapfile # Set up a Linux swap area sudo swapon /swapfile # Turn the swap on
Check if it worked
grep Swap /proc/meminfo
In my case I already had a swap file which I thought was 1GB but when I looked at it more closely it was only 256 MB big and when pre-compiling my rails assets the server would run out of memory
Errno::ENOMEM: Cannot allocate memory - nodejs
I created my swap file as described here: https://stackoverflow.com/a/34885004/784318
Now the line that creates an empty file called
/swapfile is as follows:
sudo dd if=/dev/zero of=/swapfile bs=1024 count=256k
Now to resize the swapfile I had to do these simple steps:
# Reboot the system to be able to switch swapping off sudo reboot # Turn swap off sudo swapoff -a # Delete the `/swapfile` rm -f /swapfile # Recreate the swapfile but with double file size memory sudo dd if=/dev/zero of=/swapfile bs=1024 count=512k # Turn swap back on sudo swapon -s # Change the permission to non-world-readable sudo chown root:root /swapfile sudo chmod 0600 /swapfile # Use the swap file sudo mkswap /swapfile sudo swapon /swapfile
The file was created (536870912 / 1024 / 1024 = 512 MB):
ls -lia /swapfile
768 -rw------- 1 root root 536870912 Apr 27 07:54 /swapfile
free -m command I could see that the file now is 512 MB like expected:
how to add a swap file
creat .img file
sudo dd if=/dev/zero of=/swap.img bs=1M count=1000
note!: bs=1M count=1000 ==> 1GB
(bs * count = size in megabytes )
other example :
sudo dd if=/dev/zero of=/swap.img bs=10M count=100
format .img file
sudo mkswap /swap.img
enable swap file
sudo swapon /swap.img
add swap file to fstab
add this line to your fstab (/etc/fstab)
/swap.img none swap sw 0 0
I have zfs and this worked for me.
sudo zfs create -V 8G -b $(getconf PAGESIZE) -o logbias=throughput -o sync=always -o primarycache=metadata -o com.sun:auto-snapshot=false rpool/swap
sudo mkswap -f /dev/zvol/rpool/swap
sudo swapon /dev/zvol/rpool/swap
/etc/fstab I added this line (with tabs as spaces):
/dev/zvol/rpool/swap none swap discard 0 0