BTRFS Swap on Install

Is there anyway we can get the Installation script to install a @SWAP partition? i am having problems creating one after the install and turning on during boot. I have created one, but I always have to do a swapon after boot. I have followed the wiki, but it doesn’t really explain how to make a @SWAP, just a swapfile.

Should be as simple as adding the appropriate entry in /etc/fstab. This is mine:

UUID=f0eef397-b328-4c1e-997b-546af5354ed6       none            swap    sw 0 0

I’m not sure what you mean by “@SWAP” partition.

btrfs sub create /mnt/@swap

That’s a subvolume and not a partition.

This is a subvolume, not a partition. If this is the route you want to go, then you’ll need to create a swapfile inside the @swap subvolume, then add it to your /etc/fstab.

You have (2) sets of instructions that must be followed:

  1. From https://wiki.archlinux.org/title/Btrfs#Swap_file, you create a zero-length file that will be used to create the swapfile

  2. From https://wiki.archlinux.org/title/Swap#Swap_file_creation, you create/activate the swapfile, then add it to /etc/fstab.

While I totally understand the convenience of using swapfiles over swap partitions, it was way easier setting up a swap partition.

1 Like

I need to type faster! :innocent:

Does the swap file need to be in a separate subvolume?

Wiki only says that it only needs to be not in a snapshotted subvolume.

But then wiki adds this line:

The proper procedure is to create a new subvolume to place the swap file in.

It can be on any subvolume, as long as it’s not snapshotted. For example, it could reside on /var/cache because it’s not included in snapshots (by default, anyway). Creating a new subvolume is just a way to guarantee that it’s not going to be snapshotted.

1 Like

@NeoFax

cat /etc/fstab

lsblk -f

sudo btrfs subvolume list -p /

could give the forum some “hard” info to go by.

1 Like

So, If I wanted to create the subvolume @SWAP on the standard RPI4 install I would do:

sudo btrfs sub create /var/swap/@swap
cd /var/swap
sudo truncate -s 0 ./swapfile
sudo chattr +C ./swapfile
sudo btrfs property set ./swapfile compression none
sudo dd if=/dev/zero of=./swapfile bs=1M count=512 status=progress
sudo chmod 0600 ./swapfile
sudo mkswap -U clear ./swapfile
sudo swapon ./swapfile

Then change my /etc/fstab by adding:

UUID=XXXXXXXXXXXXXXX /swap btrfs subvol=@swap 0 0
/var/swap/swapfile none swap sw 0 0

Or am I missing any steps? Also, do I need to do this from another system and mount the usb inside it to create the subvolume and such?

:pray: i no use btrfs . I have litte dig + find this .

Notes if you are using Btrfs

For Btrfs, first create a zero-length file, set the No_COW attribute on it with chattr, and make sure compression is disabled. This is not needed on other filesystems (like ext4) !!

sudo truncate -s 0 /swapfile
sudo chattr +C /swapfile
sudo btrfs property set /swapfile compression none

If you are using a subvol for swap like current default BTRFS installs will do your swapfile location needs to be changed to /swap/swapfile instead of /swapfile.

HERE…
https://discovery.endeavouros.com/storage-and-partitions/adding-swap-after-installation/2021/03/

Swap file is supported on Btrfs. That is the way to go. No issue.

You’ve got the wrong location for your swapfile:

cd /var/swap/@swap: this is the subvolume that you created, not /var/swap

Your /etc/fstab should look like this; no need to mount @swap as it’s already under a mounted filesystem (/@):

/var/swap/@swap/swapfile none swap sw 0 0

The article at that link states

Just a note, it’s not recommended to make a swap partition on an SSD, this can damage the medium.

I never heard of that… and I can’t see why that should be the case…

1 Like

It is on a PNY 128GB Atache usb drive attached to a RPI400.