Table des matières

Comment activer l'hibernation avec l'install de base CachyOS

Procédure

Enable hibernation in CachyOS alongside zram swap with full disk encryption on BTRFS

How to enable hibernation in CachyOS alongside zram swap with full disk encryption on BTRFS

I use CachyOS on my laptop at the moment. I like to use the hibernation option, especially suspend-then-hibernate, but it’s not easy to enable in CachyOS, because there is no swap partition or swapfile created by default, because it utilizes zram. I wanted to use hibernation without losing the advantages of zram, so I went for a large swapfile with low priority to enable hibernation alongside zram. I use the default filesystem of CachyOS - BTRFS and I use full disk encryption. Here’s how I did it. Do this at your own risk, I am not responsible for mistakes I made or you make. Steps to enable hibernation

Create a subvolume for your swapfile

  sudo btrfs subvolume create /swap

Calculate the size of your swapfile

It’s your zram size + your RAM size. You can see the size of your zram with:

  swapon --show

Mine was 30GB and my RAM size is 30GB, so my swapfile needs to be 60GB. That’s a lot of space, but for me not a problem.

Create the swapfile

  sudo btrfs filesystem mkswapfile --size 60g --uuid clear /swap/swapfile

Find the UUID of the (virtual) device where the swapfile resides, copy it for later use

  sudo findmnt -no UUID -T /swap/swapfile

You will get something like 58239ee3-aa2b-32ef-b7b2-2f591ee2251b

Aquire swap file offset, copy it for later use

  sudo btrfs inspect-internal map-swapfile -r /swap/swapfile

You will something like 52635

Add kernel parameters you acquired is step 4 and 5

Edit the file /etc/sdboot-manage.conf and add resume=UUID=step 4 and resume_offset=step 5 in LINUX_OPTIONS=. It will look something like this:

  LINUX_OPTIONS="zswap.enabled=0 resume=UUID=58239ee3-aa2b-32ef-b7b2-2f591ee2251b resume_offset=52635 nowatchdog splash"

Regenerate all systemd-boot entries with the following command

  sudo sdboot-manage gen

Configure initramfs - add resume hook

Edit the file /etc/mkinitcpio.conf and add resume into HOOKS= It must be after udev and encrypt. It will look something like this:

  HOOKS=(base udev autodetect microcode kms modconf block keyboard keymap consolefont plymouth encrypt resume filesystems)

Regenerate initramfs

  sudo mkinitcpio -P

Add swapfile to fstab with low priority

Edit the file /etc/fstab and add on the last line:

  /swap/swapfile none swap defaults,pri=0 0 0

Enable swap on running system

  sudo swapon /swap/swapfile

Check if swap is enabled

  swapon --show

You should now see something like

  NAME           TYPE       SIZE USED PRIO
  /swap/swapfile file        60G   0B    0
  /dev/zram0     partition 30,7G 6,3M  100

Reboot your system

After reboot, hibernation should be enabled in the settings of your Desktop Environment (if you use one). You can also test it on the command line with:

sudo systemctl hibernate Suspend then hibernate

If you’re a fan of suspend-then-hibernate, like me (ideal for laptops if you ask me), you should edit the file /etc/systemd/sleep.conf, remove the # in front of HibernateDelaySec= and add the number of seconds. I have 7200 seconds (2 hours). You also need to configure it in your Desktop Environment after that. Gnome has no setting for that, but KDE Plasma (Settings-Power Managment) does.

/etc/systemd/sleep.conf

[Sleep]
#AllowSuspend=yes
#AllowHibernation=yes
#AllowSuspendThenHibernate=yes
#AllowHybridSleep=yes
#SuspendState=mem standby freeze
#HibernateMode=platform shutdown
#MemorySleepMode=
HibernateDelaySec=7200
#HibernateOnACPower=yes
#SuspendEstimationSec=60min

Sources used:

Résolution des problèmes

Le système se réveille immédiatement après hibernation

Il faut blacklister le module intel_hid