LINUX.ORG.RU

История изменений

Исправление uwuwuu, (текущая версия) :

Я все проделал как в том гисте, что-то передал и оно работает

$ sudo mount /dev/nvme1n1p1 /mnt/btr_pool 

$ sudo btrfs su cr /mnt/btr_pool/@swap 

$ sudo mkdir /var/lib/swap

$ sudo mount -o subvol=@swap /dev/nvme1n1p1 /var/lib/swap

$ sudo btrfs fi mkswapfile --size 32g --uuid clear /var/lib/swap/swapfile 
create swapfile /var/lib/swap/swapfile size 32.00GiB (34359738368)

$ sudo swapon /var/lib/swap/swapfile                                     

# Добавляем хук resume
$ sudo -e /etc/mkinitcpio.conf
...
HOOKS=(... filesystems resume ...)

$ sudo mkinitcpio -p linux          
==> Building image from preset: /etc/mkinitcpio.d/linux.preset: 'default'
  -> -k /boot/vmlinuz-linux -c /etc/mkinitcpio.conf -g /boot/initramfs-linux.img
  ...

$ sudo -e /etc/systemd/system/hibernate-preparation.service                    
[Unit]
Description=Enable swap file and disable zram before hibernate
Before=systemd-hibernate.service

[Service]
User=root
Type=oneshot
ExecStart=/bin/bash -c "/usr/sbin/swapon /var/lib/swap/swapfile && /usr/sbin/swapoff /dev/zram0"

[Install]
WantedBy=systemd-hibernate.service

$ sudo systemctl enable hibernate-preparation                   
Created symlink /etc/systemd/system/systemd-hibernate.service.wants/hibernate-preparation.service → /etc/systemd/system/hibernate-preparation.service.

$ findmnt -no UUID -T /var/lib/swap/swapfile
8ce809ab-7858-4b8e-90cf-7d0f5f220c96

$ sudo btrfs inspect-internal map-swapfile -r /var/lib/swap/swapfile                                     
72754432

$ sudo -e /boot/loader/entries/arch.conf                   
...
options root=PARTUUID=... resume=UUID=8ce809ab-7858-4b8e-90cf-7d0f5f220c96 resume_offset=72754432

$ echo "UUID="$(blkid -o value -s UUID /dev/nvme1n1p1)" /var/lib/swap btrfs defaults,noatime,compress=no,commit=120,nodatacow,subvol=@swap 0 0" | sudo tee -a /etc/fstab
UUID=8ce809ab-7858-4b8e-90cf-7d0f5f220c96 /var/lib/swap btrfs defaults,noatime,compress=no,commit=120,nodatacow,subvol=@swap 0 0

# Опционально
$ echo "/var/lib/swap/swapfile none swap defaults,discard 0 0" | sudo tee -a /etc/fstab
/var/lib/swap/swapfile none swap defaults,discard 0 0

# гибернация не будет запускаться, если размер текущего swap меньше необходимого (у zram по умолчанию максимальный размер 8 GiB)
$ sudo mkdir -p /etc/systemd/system/systemd-logind.service.d

$ cat <<-EOF | sudo tee /etc/systemd/system/systemd-logind.service.d/override.conf
[Service]
Environment=SYSTEMD_BYPASS_HIBERNATION_MEMORY_CHECK=1
EOF

$ sudo mkdir -p /etc/systemd/system/systemd-hibernate.service.d

$ cat <<-EOF | sudo tee /etc/systemd/system/systemd-hibernate.service.d/override.conf
[Service]
Environment=SYSTEMD_BYPASS_HIBERNATION_MEMORY_CHECK=1
EOF

Исправление uwuwuu, :

Я все проделал как в том гисте, что-то передал и оно работает

$ sudo mount /dev/nvme1n1p1 /mnt/btr_pool 

$ sudo btrfs su cr /mnt/btr_pool/@swap 

$ sudo mkdir /var/lib/swap

$ sudo mount -o subvol=@swap /dev/nvme1n1p1 /var/lib/swap

$ sudo btrfs fi mkswapfile --size 32g --uuid clear /var/lib/swap/swapfile 
create swapfile /var/lib/swap/swapfile size 32.00GiB (34359738368)

$ sudo swapon /var/lib/swap/swapfile                                     

# Добавляем хук resume
$ sudo -e /etc/mkinitcpio.conf
...
HOOKS=(... filesystems resume ...)

$ sudo mkinitcpio -p linux          
==> Building image from preset: /etc/mkinitcpio.d/linux.preset: 'default'
  -> -k /boot/vmlinuz-linux -c /etc/mkinitcpio.conf -g /boot/initramfs-linux.img
  ...

$ sudo -e /etc/systemd/system/hibernate-preparation.service                    
[Unit]
Description=Enable swap file and disable zram before hibernate
Before=systemd-hibernate.service

[Service]
User=root
Type=oneshot
ExecStart=/bin/bash -c "/usr/sbin/swapon /var/lib/swap/swapfile && /usr/sbin/swapoff /dev/zram0"

[Install]
WantedBy=systemd-hibernate.service

$ sudo systemctl enable hibernate-preparation                   
Created symlink /etc/systemd/system/systemd-hibernate.service.wants/hibernate-preparation.service → /etc/systemd/system/hibernate-preparation.service.

$ findmnt -no UUID -T /var/lib/swap/swapfile
8ce809ab-7858-4b8e-90cf-7d0f5f220c96

$ sudo btrfs inspect-internal map-swapfile -r /var/lib/swap/swapfile                                     
72754432

$ sudo -e /boot/loader/entries/arch.conf                   
...
options root=PARTUUID=... resume=UUID=8ce809ab-7858-4b8e-90cf-7d0f5f220c96 resume_offset=72754432

$ echo "UUID="$(blkid -o value -s UUID /dev/nvme1n1p1)" /var/lib/swap btrfs defaults,noatime,compress=no,commit=120,nodatacow,subvol=@swap 0 0" | sudo tee -a /etc/fstab
UUID=8ce809ab-7858-4b8e-90cf-7d0f5f220c96 /var/lib/swap btrfs defaults,noatime,compress=no,commit=120,nodatacow,subvol=@swap 0 0

# Опционально на всякий случай (zram generator отрубает swap на диске)
$ echo "/var/lib/swapfile none swap defaults,discard 0 0" | sudo tee -a /etc/fstab
/var/lib/swapfile none swap defaults,discard 0 0

# гибернация не будет запускаться, если размер текущего swap меньше необходимого (у zram по умолчанию максимальный размер 8 GiB)
$ sudo mkdir -p /etc/systemd/system/systemd-logind.service.d

$ cat <<-EOF | sudo tee /etc/systemd/system/systemd-logind.service.d/override.conf
[Service]
Environment=SYSTEMD_BYPASS_HIBERNATION_MEMORY_CHECK=1
EOF

$ sudo mkdir -p /etc/systemd/system/systemd-hibernate.service.d

$ cat <<-EOF | sudo tee /etc/systemd/system/systemd-hibernate.service.d/override.conf
[Service]
Environment=SYSTEMD_BYPASS_HIBERNATION_MEMORY_CHECK=1
EOF

Исходная версия uwuwuu, :

Я все проделал как в том гисте, что-то передал и оно работает

$ sudo mount /dev/nvme1n1p1 /mnt/btr_pool 

$ sudo mkdir /var/lib/swap

$ sudo mount -o subvol=@swap /dev/nvme1n1p1 /var/lib/swap

$ sudo btrfs fi mkswapfile --size 32g --uuid clear /var/lib/swap/swapfile 
create swapfile /var/lib/swap/swapfile size 32.00GiB (34359738368)

$ sudo swapon /var/lib/swap/swapfile                                     

# Добавляем хук resume
$ sudo -e /etc/mkinitcpio.conf
...
HOOKS=(... filesystems resume ...)

$ sudo mkinitcpio -p linux          
==> Building image from preset: /etc/mkinitcpio.d/linux.preset: 'default'
  -> -k /boot/vmlinuz-linux -c /etc/mkinitcpio.conf -g /boot/initramfs-linux.img
  ...

$ sudo -e /etc/systemd/system/hibernate-preparation.service                    
[Unit]
Description=Enable swap file and disable zram before hibernate
Before=systemd-hibernate.service

[Service]
User=root
Type=oneshot
ExecStart=/bin/bash -c "/usr/sbin/swapon /var/lib/swap/swapfile && /usr/sbin/swapoff /dev/zram0"

[Install]
WantedBy=systemd-hibernate.service

$ sudo systemctl enable hibernate-preparation                   
Created symlink /etc/systemd/system/systemd-hibernate.service.wants/hibernate-preparation.service → /etc/systemd/system/hibernate-preparation.service.

$ findmnt -no UUID -T /var/lib/swap/swapfile
8ce809ab-7858-4b8e-90cf-7d0f5f220c96

$ sudo btrfs inspect-internal map-swapfile -r /var/lib/swap/swapfile                                     
72754432

$ sudo -e /boot/loader/entries/arch.conf                   
...
options root=PARTUUID=... resume=UUID=8ce809ab-7858-4b8e-90cf-7d0f5f220c96 resume_offset=72754432

$ echo "UUID="$(blkid -o value -s UUID /dev/nvme1n1p1)" /var/lib/swap btrfs defaults,noatime,compress=no,commit=120,nodatacow,subvol=@swap 0 0" | sudo tee -a /etc/fstab
UUID=8ce809ab-7858-4b8e-90cf-7d0f5f220c96 /var/lib/swap btrfs defaults,noatime,compress=no,commit=120,nodatacow,subvol=@swap 0 0

# Опционально на всякий случай (zram generator отрубает swap на диске)
$ echo "/var/lib/swapfile none swap defaults,discard 0 0" | sudo tee -a /etc/fstab
/var/lib/swapfile none swap defaults,discard 0 0

# гибернация не будет запускаться, если размер текущего swap меньше необходимого (zram по дефолту 8 GiB)
$ sudo mkdir -p /etc/systemd/system/systemd-logind.service.d

$ cat <<-EOF | sudo tee /etc/systemd/system/systemd-logind.service.d/override.conf
[Service]
Environment=SYSTEMD_BYPASS_HIBERNATION_MEMORY_CHECK=1
EOF

$ sudo mkdir -p /etc/systemd/system/systemd-hibernate.service.d

$ cat <<-EOF | sudo tee /etc/systemd/system/systemd-hibernate.service.d/override.conf
[Service]
Environment=SYSTEMD_BYPASS_HIBERNATION_MEMORY_CHECK=1
EOF