Como posso hibernar no Ubuntu 16.04?

86

Como devo hibernar o Ubuntu 16.04 com sucesso?

Eu tentei quase todas as soluções na web, mas nenhuma delas foi realmente útil. Eu encontrei o meu problema quase completamente semelhante a este

Mahyar
fonte
2
Possível duplicata de Como habilitar a hibernação?
DJCrashdummy
Funciona sudo pm-hibernate?
precisa saber é o seguinte
2
a situação não mudou com o systemd? agora estamos destinados a utilizar systemctl hibernatepor isso, talvez não um joguete ... ou resposta, pelo menos atualizado pode ser obrigado a fazer a velha pergunta válida para enganar
Zanna
Qual versão do kernel você está executando? Digite uname -ro terminal (desculpas se você já sabia disso).
WinEunuuchs2Unix 2/16
por favor edite sua pergunta e adicionar a saída free para que possamos determinar se você tem a configuração de swap suficiente para hibernar com sucesso.
Elder Geek

Respostas:

62

Hibernação usando systemctle fazendo funcionar em casos difíceis

Para mim, pm-hibernatesempre falha. Após alguns ajustes, consegui hibernar usando a interface do systemd (sistema init no 16.04 e acima). Também consegui fazê-lo funcionar no 17.04 com um arquivo de troca. Este estudo de caso pode ser útil para outras pessoas com problemas.

Primeira tentativa:

sudo systemctl hibernate

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

Sua partição de swap ou arquivo de troca pode precisar do mesmo tamanho da RAM para permitir a hibernação, mas há uma boa chance de você poder hibernar se tiver pelo menos 2/5 do tamanho da RAM, de acordo com a página wiki do Arch , tente outras etapas antes de aumentar o tamanho da troca.

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

Encontre sua partição swap:

grep swap /etc/fstab

para mim isso retorna (saída parcial)

# swap was on /dev/mmcblk0p3 during installation

onde /dev/mmcblk0p3é a partição para especificar

Adicione um parâmetro de inicialização:

sudoedit /etc/default/grub

Para a linha inicial, GRUB_CMDLINE_LINUX_DEFAULTadicione resume=/dev/YourSwapPartitionà 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-grubou 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.

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 neste .

Defina mais alguns parâmetros de inicialização para capturar mais informações. Remova quiete splashadicione initcall_debuge o no_console_suspendque fará com que as chamadas do sistema init sejam impressas no console para que você possa ver o que está errado. Eu defini isso:

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

O que me ajudou a ver o que estava errado no resumo da hibernação.

No meu caso, após retomar, perdi o WiFi, e o kernel estava claramente chateado, pois a maioria dos comandos (por exemplo, ler qualquer coisa /sys, recarregar módulos ou qualquer systemctlcomando) não funcionaria - o processo parecia iniciar e travar (tudo isso seria voltou ao normal após a reinicialização, é claro). Observando o sistema muito lentamente sendo desligado e lendo todas as mensagens de depuração, notei que havia muitos problemas com "brcm", então achei que meu módulo de driver sem fio 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 reinsiro o módulo

sudo modprobe brcmfmac

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


Atualização: Hibernação usando um arquivo de swap no 17.04.

Mais uma vez, com a ajuda da página wiki do Arch e alguns ajustes adicionais, consegui que a hibernação funcionasse no 17.04 com um arquivo de troca. Isso exigiu um parâmetro de inicialização adicional, em resume_offset=nque n é o primeiro número physical_offsetna 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 a partição retomar. Essa será a partição raiz (ou qualquer partição em que seu arquivo de troca esteja localizado). Meus parâmetros agora são:

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

Onde /dev/mmcblk1p2está minha partição raiz (é mais provável que a sua seja algo parecido /dev/sda2).

Durante o currículo, vi a imagem sendo carregada com êxito, mas no meu caso (apenas um exemplo - YMMVAPD), mais alguns drivers ( i2c_designware) geraram alguns erros e eu tive 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, criei um tipo de script para descarregar os módulos com erros e imediatamente reinseri-los 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 da troca, identifique os drivers com erros e descarregue-os antes de iniciar a hibernação. Se o sistema não 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.

Zanna
fonte
De onde vêm essas informações, que 2/5 do tamanho da RAM podem ser suficientes e sob quais circunstâncias? Eu tenho uma opção de usuário no Gnome, "Hibernar" e parece hibernar, mas ao acordar, ele não funciona corretamente. Eu tenho uma partição de swap de 8 GB e 32 GB de RAM. Isso não é 2/5, mas antes de criar um arquivo de troca de 32 GB (ou partição), seria bom saber.
cslotty
@cslotty eu tenho essa informação do wiki IIRC Arch - deixe-me saber se você conseguir isso, por favor
Zanna
Obrigado, @Zanna. Eu descobri que na verdade não é hibernar, o que eu quero, mas suspender (S3 / STR) - sry.
precisa saber é
@cslotty não se preocupe. Nesse caso, a troca não é um problema seu, pois não está relacionado.
Zanna
1
Obrigado, eu precisava de uma síntese desta resposta, bem como de uma dica sobre como desativar o SecureBoot para fazê-lo funcionar no final.
oligofren
62

Você pode usar

sudo pm-hibernate 

para verificar se a hibernação funciona no seu sistema ( isso hibernará o seu computador ).

Se não funcionar, verifique se o tamanho da sua troca é 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 do terminal e execute este comando:

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

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

Salve as alterações, feche o nano e reinicie o sistema para tornar o Hibernate disponível em "Opções de energia".

Referência: como 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.

NirajW
fonte
Precisamos reiniciar após editar o arquivo para disponibilizar o Hibernate em "Opções de energia".
precisa saber é
21
'sudo pm-hibernate' matou meu sistema imediatamente sem aviso. Você deve dizer às pessoas que é o que vai acontecer.
Yair Daon
melhor resposta . Isso também funciona nas versões 17.4 e 17.10.
Saurabh Bhandari 23/09
1
Esta resposta combinada com a que diz para adicionar "resume =" ao GRUB_CMDLINE_LINUX_DEFAULT resolveu isso para mim - thx!
Christoph
Tenho 17 GB na minha partição de swap e 16 GB de RAM, por que não está funcionando? Parece estar hibernando, porque leva uma eternidade para desligar o computador, enquanto se eu "desligar" ele desliga quase imediatamente. Mas quando ligo meu computador, tudo está fechado e tenho que começar de novo. Isso não está hibernando. Por que não pode ser tão simples como no Windows? Eu gostaria de alguma ajuda se alguém tiver idéias sobre como eu posso fazê-lo hibernar corretamente.
precisa saber é o seguinte
20

Eu acho que, como habilitar a resposta do hibernate para 16.04, é conhecido por todos, conforme descrito no Ubuntu Wiki (veja abaixo se você precisar das etapas). Mas as coisas que precisam ser verificadas não são completas, eu acho. Pelo menos, foi o que eu encontrei.

Coisas a verificar

Nos meus próprios testes, encontrei pelo menos uma verificação extra que você deve executar. Eu não encontrei sobre 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 . No meu teste, descobri que se você tiver partições btrfs , o hibernate não funcionará. Remover ou alterar o tipo de partição para ext4não me ajudou. Eu precisava remover o btrfs-toolspacote.

    sudo apt-get purge btrfs-tools
    

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

  2. Além disso, você precisa verificar se possui uma partição de swap grande o suficiente para armazenar o conteúdo da RAM. Se a sua RAM for de 4 GB, a troca deve ter pelo menos 4 GB de largura (você deve alocar mais alguns MB para garantir).

Etapas para ativar a hibernação

Envolve estas etapas

  1. Crie um arquivo como raiz no /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. Sair com Ctrl-X

  4. Reinicie o polkitddaemon

    sudo systemctl restart polkitd.service
    

Deve habilitar a hibernação.

Anwar
fonte
2
Obrigado, Anwar. Eu arquivei bug # 1619846 e referiu-lhe a sua resposta acima. Alguma chance de você propor alterações / acréscimos mais exatos a essa página na documentação oficial?
Gunnar Hjalmarsson
1
@GunnarHjalmarsson Eu proporia essa ressalva. Mas vou precisar de mais testadores para verificar isso. Avisarei depois
Anwar
Ok, vamos conversar mais então.
Gunnar Hjalmarsson
Eu instalei em uma partição btrfs e limpei de btrfs-toolsacordo com suas instruções. Ainda não pode hibernar.
Oxwivi 4/09/16
1
No disco há apenas vfatpara UEFI, e btrfse swap. Na verdade, estou suspeitando que é devido ao hardware (laptop AMD). Vou testar isso em outro sistema com btrfs e voltar para você.
Oxwivi 4/09/16
7

Modo de segurança

(Fiz uma pergunta semelhante solicitando foco nas respostas baseadas em systemd, compartilhando minha solução aqui para as pessoas que seguem esta pergunta)

Esta solução vem dos tópicos do Fedora (eles mudaram para o systemd há um tempo atrás, então há mais material lá).

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

Failed to hibernate system via logind: Sleep verb not supported

Acontece que a inicialização segura foi a culpada: na instalação do 16.04, você é perguntado o que deseja fazer com ela (que é uma coisa nova, até onde me lembro) e eu a mantive LIGADA sem pensar muito.

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

 [disabled]

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

 [platform] shutdown reboot suspend 

qual parece melhor. E, de fato, a chamada systemctl hibernateresulta em uma sequência de hibernação / degelo bem-sucedida.

Além disso, depois disso, eu pude ver a hibernação disponível como uma opção em vários locais da interface gráfica, sem a necessidade de qualquer polkitinvasão. Portanto, parece que, systemdna verdade, estava supondo /sys/power/diskque o sistema não era capaz de hibernar.

Marc
fonte
Eu fiz exatamente o que você explicou aqui. Porém, após executar o comando "systemctl hibernate", a tela ficou preta por 3 segundos e a área de trabalho voltou com todos os meus programas abertos, exatamente como antes de executar o comando. Quando eu executei o comando "cat / sys / power / disk" ... ele me mostrou este texto: "[platform] shutdown reboot suspend test_resume", que é semelhante ao resultado quando você executou o mesmo do seu lado, mas o último texto : "teste_resumo". Você tem uma idéia do que eu poderia tentar resolver meu problema?
foxhard
Não tenho certeza, parece que a hibernação não funciona imediatamente no seu hardware, e é por isso que está desativada por padrão, como outros apontaram. Convém iniciar uma pergunta separada sobre seu problema específico.
Marc
Apenas trabalhando para mim. Hiberna, mas em vez de acordar da hibernação, entra na inicialização normal e fica presa para sempre até um desligamento físico intenso.
Matt
6

Esta instrução funcionou para minha instalação do Ubuntu 18.04.

  1. sudo apt install hibernate Ele instalará o hibernate e outras dependências necessárias para hibernar
  2. grep swap /etc/fstab (UUID fing)
  3. sudoedit /etc/default/grub Na linha GRUB_CMDLINE_LINUX_DEFAULT = "quiet splash" adicione UUID de troca. A linha se parece com isso GRUB_CMDLINE_LINUX_DEFAULT = "resumo silencioso = UUID de troca"
  4. sudo update-grub
  5. Reinicie e após reiniciar sudo systemctl hibernate. Se tudo funcionar ok, adicione as entradas do menu.
  6. sudo gedit /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla agora cole isso:
[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

copiado de https://askubuntu.com/a/819891/712203

  1. Reinicie o computador
  2. Instale https://extensions.gnome.org/extension/755/hibernate-status-button/
Krzysztof Swiatly
fonte
1
em vez de adicionar um valor fixo, /etc/default/grubconsidere atualizar o initramfs usando update-initramfs -u -k alle procure uma mensagem como The initramfs will attempt to resume from /dev/dm-0. Isso definirá automaticamente o dispositivo de retomada.
ukos 21/02
Obrigado, funciona perfeitamente no Ubuntu 18.04! Observe que, se for a primeira vez que você usa uma extensão gnome, será necessário instalar uma extensão do navegador e um conector. Isso é explicado no link de extensão na parte superior.
Karim Sonbol 16/03
4

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

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

  2. Procure estas seções (elas são corretas uma pela outra):

    [Desabilitar hibernação por padrão no upower] Identidade = usuário unix: * Ação = org.freedesktop.upower.hibernate ResultActive = no

    [Desabilitar hibernação por padrão no logind] Identidade = usuário unix: * Ação = org.freedesktop.login1.hibernate; org.freedesktop.login1.handle-hibernate-key; ResultActive = no

  3. Altere ResultActive = no para ResultActive = yes para os dois.

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

EDIT: Gunnar apontou que esse arquivo é substituído se um determinado pacote for atualizado, portanto, dependendo de suas intenções, provavelmente não é a melhor solução.

Fonte: http://www.zedt.eu/tech/linux/enable-hibernation-xubuntu-16-04/

fgblomqvist
fonte
O arquivo in /etcnão deveria existir por padrão. É um arquivo de configuração que você cria. A edição de um arquivo pertencente ao pacote, como sugerido acima, é um mau conselho, pois será substituído na próxima atualização do pacote.
Gunnar Hjalmarsson 02/09
@GunnarHjalmarsson Se for esse o caso, eu diria que deve ser declarado que pode não existir. Espero mais de uma resposta Ask do Ubuntu mais bem avaliada do que uma "cópia / cole este comando" -> "digite esta resposta no estilo" que não tenha nenhum tipo de verificação de se você está fazendo a coisa certa (exceto verificar se funcionou) . E se alguém encontrar essa resposta em alguns anos, mas tiver medo de tentar uma vez que o arquivo está vazio e as instruções claramente indicarem para adicionar ao arquivo, implicando que ela existe? No entanto, agradeço as informações, que serão adicionadas à resposta para conclusão.
Fgblomqvist 03/09/19
1
Ponto justo; Editei a resposta de NirajW com esse esclarecimento. Note-se que a fonte original de informação nesta página fala sobre criação .
Gunnar Hjalmarsson
Isto é perfeito que você me salvou irmão :)
Azam Alvi
4

Para mim, ele trabalha para instalar o hibernatepacote, reiniciar e depois executar sudo hibernate-disk. Tenho certeza de que é possível adicioná-lo ao menu, mas não vale o tempo para mim.

Aiphee
fonte
3

Primeiro, recomendo que você teste se a sua máquina suporta hibernação, porque o motivo da desativação da hibernação é que, às vezes, ela apresenta resultados desagradáveis ​​em algumas máquinas. Teste sua máquina abrindo o terminal ( Ctrl+ Alt+ T) e digitandosudo pm-hibernate

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

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

Edite o arquivo aberto e adicione estas linhas:

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

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

kelvinelove
fonte
Eu tenho o thinkpad -E550 e não tem nenhum problema com a hibernação quando meu sistema operacional é o ubuntu 15.1 ou o windows8.1. mas usando o ubuntu 16.04, quando uso o comando "sudo pm-hibernate", ele não hiberna completamente e apenas a tela fica preta e a máquina ainda está ligada.
Mahyar
No meu caso, o comando não faz nada. O terminal vai para a nova linha e aguarda o próximo comando, ou seja, o comando anterior foi executado. Mas ele não faz nadaat all
Aalok
Isso não funciona para mim. Ubuntu 16.04. A opção Hibernar não aparece e fica desativada em Configurações -> Energia, mais alguma coisa?
Daniele Segato
Editando a política já existente é melhor: zedt.eu/tech/linux/enable-hibernation-xubuntu-16-04
fgblomqvist
Conteúdo incompleto em com.ubuntu.enable-hibernate.pkla. Ver resposta postada por NirajW.
Gunnar Hjalmarsson 02/09
3

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

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

  • Crie um arquivo de troca de tamanho apropriado (normalmente eu defino para ~ 1x no tamanho, mas já ouvi até 1,6x e 2x)
  • Edite /etc/default/grubpara incluir a seguinte linha:

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

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

Boa sorte!

richbl
fonte
O grub não faz distinção entre maiúsculas e minúsculas? Por que usar RESUME?
NelsonGon 20/09
1

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

http://ubuntuhandbook.org/index.php/2014/04/enable-hibernate-ubuntu-14-04/

Então, se não funcionar, pode ser um problema do kernel 4.4.0 e talvez você precise atualizar o kernel.

Mookey
fonte
2
A resposta refere-se a 14.04, enquanto a pergunta é sobre 16.04.
Gunnar Hjalmarsson 02/02