It is possible to use a swap file on btrfs
, but there are some considerations that need taking care of.
btrfs
filesystem doesn't let to create snapshots if there is a working swap file on the subvolume. That means that it is highly recommended to place a swap file on a separate subvolume.
Let's assume that the current swap is already off, the /
is on /dev/sda1
and Ubuntu is installed with /
on @
subvolume and /home
is on @home
subvolume.
Mount /dev/sda1
to /mnt
.
sudo mount /dev/sda1 /mnt
If you run ls /mnt
, you'll see @
, @home
and other subvolumes that may be there.
Create a new @swap
subvolume.
sudo btrfs sub create /mnt/@swap
Unmount /dev/sda1
from /mnt
.
sudo umount /mnt
Create /swap
directory where we plan to mount the @swap
subvolume.
sudo mkdir /swap
Mount the @swap
subvolume to /swap
.
sudo mount -o subvol=@swap /dev/sda1 /swap
Create the swap file.
sudo touch /swap/swapfile
Set 600 permissions to the file.
sudo chmod 600 /swap/swapfile
Disable COW for this file.
sudo chattr +C /swap/swapfile
Set size of the swap file to 4G as an example.
sudo dd if=/dev/zero of=/swap/swapfile bs=1M count=4096
Format the swapfile.
sudo mkswap /swap/swapfile
Turn the swap file on.
sudo swapon /swap/swapfile
Now the new swap should be working.
You also need to update /etc/fstab
to mount all this on boot. Add there two lines:
UUID=XXXXXXXXXXXXXXX /swap btrfs subvol=@swap 0 0
/swap/swapfile none swap sw 0 0
The UUID
is the one of your /dev/sda1
.
Swap file can't be located on a btrfs raid of any sort.
Comments and suggestions are welcome.