[TUTORIAL] Configurando Hibernação com Swapfile

tallescg
editado dezembro 2020 em Tutoriais

Atualmente, as distros linux mais modernas já implementam o uso do arquivo de troca(swapfile), desobrigando o usuário a criar uma partição swap.
Esse tutorial não tem a pretensão de debater os prós e contras do uso de Swap como partição ou arquivo, se vc deve ou não usar Swap e qual o tamanho certo a ser usado.
Vamos apenas nos ater aos procedimentos e recomendações encontradas em fonte confiáveis.

Update 3:

  • Adicionado o requisito de secure boot desativado.

Update 2:

  • Alterado o comando usado para criar o swapfile por bugs no fallocate.
  • Retirado o uso do swapon para subir o swapfile por bugs no mesmo.
  • Retirado o comando blkid, ele não funciona corretamente com os bugs citados.

Update 1:

  • Alterado o comando para obter o PARTUUID de forma mais direta;
  • Alterado o comando para obter o physical_offset de forma mais direta;
  • Alterado a configuração do RESUME para um boot mais rápido;

Requisito

O secure boot precisa estar desativado para que o sistema possa hibernar.
Isso foi consequência de um patch no kernel e essa informação pode ser verificada em um post do Jeremy Cline no Bugzilla.

1 - Definindo o tamanho do SWAP.

Do livro Fedora 31 Essentials: Learn to install, administer and deploy Fedora 31 systems de Neil Smyth temos a recomendação:

4GB RAM minimum Swap = 2GB
4GB to 16GB RAM minimum swap = 4GB
16GB to 64GB RAM minimum swap = 8GB

Outra referência que acho bem acertada pode ser achada aqui:
RAM No.hiber W.Hiber Max.Size
2GB 1GB 3GB 4GB
4GB 2GB 6GB 8GB
8GB 3GB 11GB 16GB
12GB 3GB 15GB 24GB
16GB 4GB 20GB 32GB

Vc pode seguir estas recomendações se preferir, mas pessoalmente, recomendo que ao usar hibernação, use um valor de swap pelo menos igual ao valor da sua RAM atual. Afinal, com este valor, vc não precisa se preocupar com a quantidade de RAM que seus programas estão utilizando no momento em que precisar hibernar o pc.

2 - Criando o SWAPFILE.

Para criar o swapfile seguiremos os passo do tutorial do leandroramos:

Desligue e remova o swapfile antigo. Na imagem, foi usado /mnt/swapfile mas o local não é imperativo:
sudo swapoff -a
sudo rm /mnt/swapfile

Para um pc com 8GB de RAM, crie um swapfile de mesmo tamanho.
sudo dd if=/dev/zero of=/mnt/swapfile bs=1k count=8192k status=progress
( o valor count é obtido fazendo RAM x 1k; no caso 8 x 1024 = 8192)

Altere os privilégios do arquivo, formate o swap:
sudo chmod 600 /mnt/swapfile
sudo mkswap /mnt/swapfile

Edite seu fstab para que o swap fique ativo a cada reboot, adicionando o caminho do swapfile e os devidos parâmetros:
sudo nano /etc/fstab

Adicione a linha /mnt/swapfile none swap sw 0 0:

Use Ctrl+X para sair, confirme com S a modificação e confirme com Enter o nome do arquivo a ser salvo. Reinicie e confirme que o swapfile está funcionando.

3 - Configurando o RESUME.

Use o comando abaixo para obter o PARTUUID da partição onde o swapfile se encontra:
sudo findmnt -no SOURCE,PARTUUID -T /mnt/swapfile

Esta configuração, funciona perfeitamente em distros como Ubuntu ou Arch usando UUID. Mas para funcionar no Fedora 31, só obtive sucesso utilizando o PARTUUID.

Agora precisamos do physical_offset do swapfile. Para visualizar usamos:
sudo filefrag -v /mnt/swapfile|more
Dependendo do tamanho do swapfile, vc terá várias linhas de retorno, mas só precisamos do primeiro dado:

Um jeito mais simples de conseguir esse valor é usando o comando abaixo:
sudo filefrag -v /mnt/swapfile|awk 'NR==4{gsub(/\./,"");print $4;}'

Com os dados anotados, configuramos os parâmetros no GRUB, para que o sistema consiga carregar o estado da máquina quando retornar da hibernação na linha GRUB_CMDLINE_LINUX:
sudo nano /etc/default/grub

Adicione os valores na linha GRUB_CMDLINE_LINUX="rhgb quiet".
No nosso exemplo ficará da seguinte forma:

GRUB_CMDLINE_LINUX="rhgb quiet resume=PARTUUID=6982616b-bb5f-4202-a8a2-f7aaebd6b2e6 resume_offset=1114112"

Atenção!! PARTUUID sem aspas!!
Veja o texto selecionado na foto:

Use Ctrl+X para sair, confirme com S a modificação e confirme com Enter o nome do arquivo a ser salvo.

Em caso de erros ao retornar da hibernação adicione após o resume_offset o parâmetro:
resumedelay=15

4 - Fiinalizando.

Agora basta atualizar as configurações do GRUB e testar a hibernação via comando ou botão de hibernar no sistema:

para instalações em modo Legacy
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
para instalações em modo UEFI
sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
para hibernar via comando
sudo systemctl hibernate

Abraços!!

Comentários