PM: A imagem de hibernação não está presente ou não pôde ser carregada

PM: A imagem de hibernação não está presente ou não pôde ser carregada

Após hibernar com systemctl hibernate, o sistema inicializa normalmente como se tivesse sido desligado. Eu tenho o parâmetro resume na linha do kernel e o gancho resume em mkinitcpio.conf

Estas são as mensagens relevantes do kernel:

$ dmesg | grep -i swap
[    0.000000] Command line: initrd=\initramfs-linux.img root=/dev/sda2 rw resume=/dev/sda4
[    0.000000] Kernel command line: initrd=\initramfs-linux.img root=/dev/sda2 rw resume=/dev/sda4
[    0.350295] PM: Checking hibernation image partition /dev/sda4
[    8.776686] Adding 8191996k swap on /dev/sda4.  Priority:-1 extents:1 across:8191996k FS
$ dmesg | grep -i hibern
[    0.350295] PM: Checking hibernation image partition /dev/sda4
[    0.350301] PM: Hibernation image not present or could not be loaded.

Então a única possibilidade restante é quesystemctl não gravou no disco. Na verdade, quando executo o comando, a tela primeiro fica em branco por alguns segundos, depois posso ver meu terminal novamente e, finalmente, ele desliga sozinho.

Eu li que os pm-utils não funcionam muito bem com o systemd, então não gostaria de mudar para eles. Alguma sugestão?

Obrigado!

Responder1

Para elaborar o comentário de @AdrianRatnapala, você deve:

  1. Encontre o uuid da sua partição swap. Suponha que a partição seja sdb3, então

    $ ls -l /dev/disk/by-uuid/ | grep sdb3
    lrwxrwxrwx 1 root root 10 окт.   9 08:59 1dd7e123-1f82-45f0-a202-0ff3ea6f081a -> ../../sdb3
    
  2. Abra /etc/default/grube encontre a linha que começa com GRUB_CMDLINE_LINUX_DEFAULT=". Adicione aí entre as aspas resume=/dev/disk/by-uuid/your-swap-uuid. Como um exemplo:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=/dev/disk/by-uuid/1dd7e123-1f82-45f0-a202-0ff3ea6f081a"
    
  3. Execute como rootupdate-grub
  4. É necessária uma reinicialização para usar a nova linha de comando do kernel.

Responder2

Quero compartilhar meu sucesso aqui porque pode ajudar outras pessoas com esse problema. Resumindo, para quem deseja pular os detalhes: Depois de alterar a linha GRUB_CMDLINE_LINUX_DEFAULT no arquivo /etc/default/grub e fazer update-grub, desligue e reinicie completamente a máquina antes de tentar a hibernação.

Os detalhes: Acabei de implementar com sucesso a hibernação na instalação Linux do meu Lenovo ThinkPad T480 (dual boot Debian 9 e Windows) seguindo o conselho acima para adicionar um parâmetro resume=UUID= à linha GRUB_CMDLINE_LINUX_DEFAULT em /etc/default/grub. Mas não funcionou da primeira vez. Adicionei o parâmetro, executei update-grub e tentei hibernar (systemctl-hibernate). O sistema parecia hibernar, mas quando ligado novamente, a imagem da tela anterior aparecia e permanecia por vários segundos antes de a máquina entrar na tela de login que normalmente aparece na inicialização; todo o trabalho presente antes do fim da hibernação. Finalmente notei (syslog grep 'linha de comando') que a linha GRUB_CMDLINE_LINUX_DEFAULT alterada NÃO foi passada para o kernel. Depois de mais esforço, descobri que um desligamento completo e uma reinicialização resultariam na passagem da linha alterada (grep 'linha de comando' syslog novamente). Depois disso, o systemctl hibernate induziu a hibernação como antes, mas ao ligar o estado anterior da máquina foi restaurado corretamente.

informação relacionada