Como posso hibernar no Ubuntu 16.04?

50

Como devo hibernar com êxito o Ubuntu 16.04?

Já experimentei quase todas as soluções na Web, mas nenhuma delas foi realmente útil. Eu encontrei meu problema quase completamente semelhante a este

    
por Mahyar 05.05.2016 / 21:01

9 respostas

40

Você pode usar

sudo pm-hibernate 

para verificar se o hibernate funciona no seu sistema ( isto irá hibernar o seu computador ).

Se não funcionar, verifique se o tamanho do seu swap é pelo menos tão grande quanto a sua RAM.

Para adicionar a opção ao menu de configurações, você pode criar um arquivo de configuração. Abra uma janela de terminal e execute este comando:

sudo nano /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla

Ele abre o nano com um arquivo vazio. Copie as linhas abaixo e cole-as na janela nano.

[Re-enable hibernate by default in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

[Re-enable hibernate by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.handle-hibernate-key;org.freedesktop.login1;org.freedesktop.login1.hibernate-multiple-sessions;org.freedesktop.login1.hibernate-ignore-inhibit
ResultActive=yes

Em seguida, salve as alterações e feche o nano e reinicialize o sistema para disponibilizar o Hibernate em "Opções de energia".

Referência: Como faço para hibernar meu computador? na documentação oficial do Ubuntu 16.04.

Espero que funcione. Isso funcionou para mim depois de tentar todas as outras opções.

    
por NirajW 02.09.2016 / 08:01
29

Hibernação usando systemctl e fazendo com que funcione em casos difíceis

Para mim, pm-hibernate sempre falha. Depois de alguns ajustes, consegui hibernar usando a interface do systemd (sistema init em 16.04 e acima). Eu também consegui fazê-lo funcionar em 17.04 com um arquivo de troca. Este estudo de caso pode ser útil para outras pessoas com problemas.

Primeiro tente:

sudo systemctl hibernate

Se isso falhar, comece a solução de problemas: no estado de hibernação (HTD ou ACPI S4), o estado da máquina é gravado no disco, de modo que não é necessária energia para preservá-lo. O estado é gravado em uma partição de troca ou em um arquivo de troca. Nota: se estiver usando o BTRFS, NÃO tente usar um arquivo de troca, pois isso pode causar corrupção no sistema de arquivos

Sua partição swap ou arquivo de troca pode precisar ter o mesmo tamanho que a RAM para permitir a hibernação, mas há uma boa chance de que você possa hibernar se ela tiver pelo menos 2/5 do tamanho da RAM, de acordo com < a href="https://wiki.archlinux.org/index.php/Power_management/Suspend_and_hibernate#About_swap_partition.2Ffile_size"> a página wiki do Arch , portanto, tente outras etapas antes de aumentar tamanho de swap.

Se o seu problema é que você obtém uma inicialização limpa em vez do currículo esperado, no mínimo você provavelmente precisará definir um parâmetro de inicialização para localizar a imagem do disco

Encontre sua partição de swap:

grep swap /etc/fstab

para mim isso retorna (saída parcial)

# swap was on /dev/mmcblk0p3 during installation

em que /dev/mmcblk0p3 é a partição a ser especificada

Adicione um parâmetro de inicialização:

sudoedit /etc/default/grub

Para a linha que inicia GRUB_CMDLINE_LINUX_DEFAULT add resume=/dev/YourSwapPartition para a seção entre aspas (substitua pela partição que você identificou anteriormente). Usando meu exemplo:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=/dev/mmcblk0p3" 

Sempre que você alterar este arquivo, você deve executar sudo update-grub ou as alterações não terão efeito.

Agora você precisa reiniciar. Então você pode tentar hibernar, emitindo o comando:

sudo systemctl hibernate

Para continuar, pressione o botão liga / desliga e o sistema inicializará.

Se você ainda tiver problemas, inicie a depuração.

Eu incluo meu caso abaixo como exemplo, mas informações detalhadas sobre a depuração dos estados S podem ser encontradas neste blog e também este .

Defina mais alguns parâmetros de inicialização para capturar mais informações. Remova quiet e splash e adicione initcall_debug e no_console_suspend , o que fará com que as chamadas do sistema init sejam impressas no console para que você possa ver o que está errado. Eu configurei isso:

GRUB_CMDLINE_LINUX_DEFAULT="resume=/dev/mmcblk0p3 no_console_suspend initcall_debug"

O que me ajudou a ver o que estava errado no reinício da hibernação.

No meu caso, depois de continuar, perdi o WiFi, e o kernel claramente estava chateado, pois a maioria dos comandos (por exemplo, lendo qualquer coisa de /sys , recarregando módulos ou qualquer comando systemctl ) não funcionaria - o processo pareceria iniciar e apenas pendurar (tudo isso seria retornado ao normal após a reinicialização, é claro). Assistindo o sistema muito lentamente desligar e ler todas as mensagens de depuração, notei que havia muitos problemas com "brcm", então eu imaginei que o meu módulo de driver sem fio da Broadcom era o culpado. Com certeza ajustei meu procedimento de hibernação para descarregar o módulo primeiro:

sudo modprobe -r brcmfmac
sudo systemctl hibernate

no currículo eu reinseri o módulo

sudo modprobe brcmfmac

E tudo funcionou perfeitamente. Eu também tenho que colocar na lista negra o módulo btsdio que parece ser incompatível com brcmfmac

Atualização: hibernação usando um arquivo de troca em 17.04.

Mais uma vez com a ajuda da página wiki do Arch e alguns ajustes adicionais, consegui fazer a hibernação funcionar no dia 17.04 com um arquivo de troca. Isso exigiu um parâmetro de inicialização adicional, resume_offset=n , em que n é o primeiro número em physical_offset na saída de sudo filefrag -v /swapfile :

$ sudo filefrag -v /swapfile
Filesystem type is: ef53
File size of /swapfile is 1425873920 (348114 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..   32767:      34816..     67583:  32768:            
   1:    32768..   63487:      67584..     98303:  30720:            
   .... 

Portanto, o parâmetro de inicialização adicional no meu caso é resume_offset=34816 . Você ainda precisa definir um parâmetro de inicialização para que a partição seja retomada. Esta será a partição raiz (ou qualquer partição em que seu arquivo de swap esteja localizado) Meus parâmetros são agora:

GRUB_CMDLINE_LINUX_DEFAULT="no_console_suspend initcall_debug resume=/dev/mmcblk1p2 resume_offset=34816"

Onde /dev/mmcblk1p2 é minha partição raiz (é mais provável que você seja algo como /dev/sda2 ).

Durante a continuação, vi o carregamento da imagem com sucesso, mas no meu caso (apenas um exemplo - YMMVAPD), mais alguns drivers ( i2c_designware ) geraram alguns erros e obtive um congelamento completo do sistema no currículo. A hibernação funciona se eu descarregar esses módulos além de brcmfmac , mas o sistema rapidamente se torna inutilizável sem esses módulos. Por isso, fiz uma espécie de script para descarregar os módulos com bugs e reinseri-los imediatamente no currículo:

# remove buggy modules
modprobe -r brcmfmac i2c_designware_platform i2c_designware_core &&
# hibernate
echo disk > /sys/power/state
# reinsert
modprobe i2c_designware_core i2c_designware_platform brcmfmac

Quando quero hibernar, corro sudo bash script . Isso funciona muito bem.

TL; DR

Use systemd, defina um parâmetro de inicialização para retomar a troca, identifique drivers com problemas e descarregue-os antes de iniciar a hibernação. Se o sistema não puder funcionar por muito tempo sem esses módulos ou você precisar descarregar vários, pode ser mais fácil usar um script simples para iniciar a hibernação.

    
por Zanna 05.09.2016 / 09:36
16

Eu acho que, como ativar o modo de hibernação para 16.04, a resposta é conhecida por todos, como descrito no Ubuntu Wiki (Veja abaixo se você precisa dos passos). Mas as coisas que precisam de verificação não são completas, eu acho. Pelo menos, foi o que encontrei.

Coisas a verificar

De meus próprios testes, eu encontrei pelo menos um cheque extra que você deve realizar. Eu não encontrei isso em nenhum lugar da Internet.

Aqui estão algumas verificações -

  1. Verifique se você não está usando nenhuma partição btrfs . Sim . Do meu teste, descobri que se você tiver partições btrfs , o modo de hibernação não funcionará. Remover ou alterar o tipo de partição para ext4 não me ajudou. Eu precisava remover o pacote btrfs-tools .

    sudo apt-get purge btrfs-tools
    

    Você pode querer verificar outros novos tipos de partição que não são bem testados. Sem remover o pacote, a lista negra do driver também pode funcionar, mas eu não testei isso.

  2. Além disso, você precisa verificar se tem uma partição de troca grande o suficiente para conter o conteúdo da RAM. Se a sua RAM é de 4 GB, a troca deve ser pelo menos 4 GB grande (você deve alocar mais alguns MB para ser seguro).

Etapas para ativar o modo de hibernação

Envolve estes passos

  1. Crie um arquivo como root em /etc/polkit-1/localauthority/50-local.d/enable-hibernate.pkla

    sudo -i nano /etc/polkit-1/localauthority/50-local.d/enable-hibernate.pkla
    
  2. Coloque esse conteúdo nesse arquivo

    [Re-enable hibernate by default in upower]
    Identity=unix-user:*
    Action=org.freedesktop.upower.hibernate
    ResultActive=yes
    
    [Re-enable hibernate by default in logind]
    Identity=unix-user:*
    Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.handle-hibernate-key;org.freedesktop.login1;org.freedesktop.login1.hibernate-multiple-sessions;org.freedesktop.login1.hibernate-ignore-inhibit
    ResultActive=yes
    
  3. Salve o arquivo pressionando Ctrl - O . Saia com Ctrl - X

  4. Reinicie o daemon polkitd

    sudo systemctl restart polkitd.service
    

Ele deve ativar o modo de hibernação.

    
por Anwar 03.09.2016 / 05:12
3

Inicialização Segura

(Eu fiz uma pergunta semelhante perguntando para um foco nas respostas baseadas em systemd, compartilhando minha solução aqui para as pessoas que seguem esta questão)

Esta solução vem dos tópicos Fedora fez a mudança para systemd há um tempo atrás, então há mais material lá).

No meu caso (instalação 16.04.1 nova em uma máquina que sempre suportava hibernação), chamar o obsoleto sudo pm-hibernate parecia não fazer nada, e a abordagem atualizada do systemd, systemctl hibernate , retornaria:

Failed to hibernate system via logind: Sleep verb not supported

Acontece que o boot seguro foi o culpado: ao instalar o 16.04 você é perguntado o que você quer fazer com ele (o que é uma novidade, tanto quanto me lembro) e o mantive ligado sem pensar muito.

Na minha máquina com inicialização segura, cat /sys/power/disk respondeu:

 [disabled]

Após reiniciar e desativar a inicialização segura nas configurações da BIOS (elas são específicas da máquina, mas geralmente bem simples), tentei cat /sys/power/disk e obtive:

 [platform] shutdown reboot suspend 

que parece melhor. E, de fato, chamar systemctl hibernate resulta em uma sequência bem-sucedida de hibernação / descongelamento.

Além disso, depois disso eu pude ver a hibernação disponível como uma opção em vários lugares da interface gráfica, sem a necessidade de qualquer polkit hack. Portanto, parece que systemd estava realmente adivinhando a partir de /sys/power/disk que o sistema não conseguiu hibernar.

    
por Marc 11.01.2017 / 07:50
2

Primeiro, eu recomendo que você teste se a sua máquina suporta hibernação, porque a razão pela qual a hibernação é desativada por padrão é porque às vezes ela tem resultados desagradáveis em algumas máquinas. Teste sua máquina abrindo o terminal ( Ctrl + Alt + T ) e, em seguida, digitando sudo pm-hibernate

Sua máquina deve hibernar. Desperte sua máquina após a hibernação e observe se ela se comporta mal ou se ela age normalmente. Se você tiver alguma anormalidade após a hibernação, aconselho-o a não continuar com o procedimento a seguir. No entanto, se funcionar bem, continue a ativar a hibernação fazendo isso:

sudo gedit /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla

Edite o arquivo aberto e adicione as seguintes linhas:

[Re-enable hibernation]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

Depois disso, reinicie sua máquina e, depois de fazer o login, você verá uma opção de hibernação adicionada no menu de energia, no canto de configurações superior direito.

    
por kelvinelove 06.05.2016 / 09:53
2

Expandindo meu próprio comentário para a resposta do kelvinelove, o arquivo que ele sugere editar não existia no meu sistema (novo Ubuntu 16.04). Em vez disso, fiz isso:

  1. sudo nano /var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla

  2. Procure por estas seções (elas estão certas uma da outra):

      

    [Desativar a hibernação por padrão em upstream] Identity = unix-user: *   Ação = org.freedesktop.upower.hibernate ResultActive = no

         

    [Desativar a hibernação por padrão no logind] Identity = unix-user: *   Ação = org.freedesktop.login1.hibernate; org.freedesktop.login1.handle-hibernate-key;   ResultActive = não

  3. Altere ResultActive = no para ResultActive = yes para ambos.

  4. Pressione Ctrl + O para salvar o arquivo.
  5. Reinicie seu computador
  6. A opção Hibernate agora está disponível em seus menus de energia.

EDIT: Gunnar apontou que este arquivo é sobrescrito se um determinado pacote for atualizado, então, dependendo das suas intenções, provavelmente não é a melhor solução.

Fonte: link

    
por fgblomqvist 24.08.2016 / 03:47
2

Existem alguns recursos muito bons aqui para ajudá-lo a resolver alguns dos problemas de hibernação mais comuns no Ubuntu.

No meu caso, rodando o Ubuntu 16.10 em um Lenovo u300s, para que o hibernate funcione corretamente eu tive que fazer o seguinte:

  • Crie um arquivo de permuta de tamanho adequado (normalmente configuro para ~ 1x em tamanho, mas eu ouvi até 1,6x e 2x)
  • Edite /etc/default/grub para incluir a seguinte linha:

    GRUB_CMDLINE_LINUX_DEFAULT="respingo silencioso pci = nomsi RESUME = UUID = 92781adb-f2a6-4f15-88fc-e1ce801291dd"

O RESUME refere-se ao seu UUID de arquivo de troca específico. Em particular, na configuração da minha máquina pci=nomsi foi a chave.

Boa sorte!

    
por richbl 14.11.2016 / 01:34
1

Para mim, funciona para instalar hibernate package, reinicializar e executar sudo hibernate-disk . Tenho certeza que é possível adicioná-lo ao menu, mas não vale a pena para mim.

    
por Aiphee 18.11.2016 / 08:54
0

Você precisa ativá-lo manualmente com um pouco de esforço. Está desativado por padrão.

link

Então, se não funcionar, pode ser um problema no kernel do 4.4.0, e você pode ter que atualizar o kernel.

    
por Mookey 05.05.2016 / 21:39