O Ubuntu 18.04 não pode continuar após a hibernação

17

O Hibernate funcionou corretamente quando eu estava usando o Ubuntu 17.04. Após a atualização para 17.10, não consegui retomar por causa da tela preta após o resumo ( esse bug ).

Após a atualização para o 18.04, se eu tentar iniciar o computador após a hibernação, ele será inicializado como se não houvesse hibernação.

Kamil
fonte
Eu tenho o mesmo problema com o 18.04, acho que a solução deve estar na especificação da partição correta para o resumo, mas ainda não consegui encontrar o caminho para fazer isso. Tudo o que descobri no Google não funcionou para mim.
User2819650
A partição está definida corretamente em /etc/initramfs-tools/conf.d/ resume à minha troca. Suspeito que a hibernação não seja feita corretamente ou o currículo durante a inicialização não funcione. Mas não sei como depurar mais. Syslog e dmesg não dão pistas de qual é o problema.
Kamil

Respostas:

29

Há alterações feitas nas configurações padrão quando comparadas com o LTS anterior (16.04). No meu caso, a hibernação não funcionou até que eu fiz várias etapas, entre elas aumentar o tamanho do arquivo de troca, ativá-lo, garantir que as políticas permitissem etc.

Essa pode ser facilmente a minha resposta mais longa em todo o StackExchange, então tentei tornar os cabeçalhos descritivos .

Botas como não havia hibernação

Seria prudente dar uma olhada nos seus logs ( dmesgpode ajudar) e ver se há algo lá. Existem razões pelas quais, apesar de você dizer ao sistema para hibernar, ele na verdade não funciona, ou suspende para a RAM (suspensão).

Examinar kern.loge syslogprocurar mensagens relacionadas ao hibernate também não faria mal. Seções que começam com "problema" podem ajudá-lo com problemas específicos.

Trocar arquivo ou partição de troca

Uma das mudanças cruciais é que agora você NÃO TEM uma partição de troca, mas possui um arquivo de troca.

O arquivo de troca pode não funcionar com sua combinação de hardware / drivers / SO e hibernação.

Hibernação desativada

As políticas também podem desativar ou proibir a hibernação.

Jargão

Suspender na RAM - a RAM mantém os dados, o computador dorme mais rápido, usa mais energia quando suspensa, acorda mais rápido. Alguns chamam isso de sono.

Suspender no disco - também conhecido como hibernação. A RAM é salva para troca (partição ou arquivo), o computador dorme mais devagar, consome menos energia enquanto hiberna, acorda mais devagar.

Suspender para RAM no Linux por Rafael J. Wysocki e A. Leonard Brown

Pré-requisitos - você tem espaço suficiente?

Para hibernar, você precisa (simplificação aqui) salvar toda a sua RAM no disco rígido. Portanto, você precisa reservar espaço suficiente para isso. Caso contrário, isso falhará e você não hibernará.

  1. free -m lhe dirá quanta memória você tem, usa e quanto está em sua troca.
  2. df -h lhe dirá quanto espaço em disco você tem em cada ponto de montagem e quanto é usado, livre, etc. Isso é importante, pois você poderá especificar mais tarde onde seu arquivo de troca estará localizado ou qual partição "aparar" terá espaço suficiente para sua troca.
  3. cat fstabdeve fornecer informações se você tiver uma partição ou arquivo de troca. De acordo com o Ubuntu Hibernation, as perguntas frequentes swapfilenem sempre funcionam com algumas combinações de hardware / drivers.

Se você não tiver espaço suficiente, siga as perguntas frequentes sobre a troca do Ubuntu . Ele mostra como aumentar o arquivo de troca, adicionar outro, verificar se ele está sendo usado etc. Com comandos e explicações. Recurso realmente agradável.

Não tenho espaço suficiente para caber na minha RAM!

Os documentos do kernel dizem:

/ sys / power / image_size controla o tamanho da imagem criada pelo mecanismo de suspensão em disco. Pode ser escrita uma string representando um número inteiro não negativo que será usado como limite superior do tamanho da imagem, em bytes. O mecanismo de suspensão em disco fará o possível para garantir que o tamanho da imagem não exceda esse número. No entanto, se isso for impossível, ele tentará suspender de qualquer maneira usando a menor imagem possível. Em particular, se "0" for gravado nesse arquivo, a imagem de suspensão será a menor possível. A leitura deste arquivo exibirá o limite de tamanho da imagem atual, que é definido como 2/5 da RAM disponível por padrão.

Portanto, tente ajustar o tamanho da imagem. Como - faça outra pergunta, por favor.

Pré-requisitos - seu kernel suporta suspensão para disco?

O kernel suporta o que está listado /sys/power/state, então:

cat /sys/power/state

Permitidos (a meu conhecimento) As entradas não incluem: mem, standby, freeze, disk. Explicação:

  • mem- tem vários significados, exatamente o que você encontrará em seu sistema cat /sys/power/mem_sleep. Eu tenho:s2idle [deep]
  • standby - Suspensão de inicialização (se suportada)
  • freeze - Suspender para ocioso (STI)
  • disk- Suspender para disco (STD), hibernação . Isso - você quer.

Então precisamos verificar cat /sys/power/disk. Se você tiver lá disabled, mergulhe em seu BIOS procurando o Secure Boot - essa é a única idéia que posso oferecer e a única coisa que sei que pode interferir e desativar a hibernação. Embora eu conheça apenas o SecureBoot, pode haver outras interferências, portanto, dar uma olhada no BIOS é uma boa idéia, mesmo que você não tenha nenhuma "inicialização segura".

Lendo aqui:

  1. Documentos do kernel
  2. Debian Wiki sobre hibernação

TBH, mesmo que seu kernel NÃO suporte a hibernação, você pode tentar de outra maneira, role para baixo até a seçãoInterfaces .

Leia isto - avisos e problemas - sem BTRFS

Em nenhuma ordem particular:

  1. Nem todos os chipsets funcionam (não há fontes que eu possa citar aqui, então digamos que isso seja boato)
  2. O VAIO tem problemas, supostamente há uma bandeira para combatê-los
  3. O SecureBoot é frequentemente citado como interferindo ou desativando a hibernação
  4. Wake-on-LAN consome energia mesmo com hibernação
  5. O número de módulos (especialmente os gráficos) pode ser inicializado ANTES de o sistema reiniciar adequadamente da hibernação - essa é geralmente a causa da tela preta ao reiniciar . Veja o ArchLinux Wiki para obter dicas sobre como depurar problemas. Eu também sugeriria as perguntas frequentes do Ubuntu sobre problemas de hibernação. A navegação pelos bugs do Launchpad também pode gerar resultados. IIRC, há um parâmetro do kernel especificando em segundos um atraso antes de continuar.
  6. Permitir que o procedimento de hibernação seja diferente para diferentes versões do Polkit

Não use BTRFS e hibernar: dados corrompidos serão o resultado.

Eu quero hibernar - partição swap

Há casos em que as pessoas renunciam ao arquivo de troca e retornam à troca de partição. Afinal, funcionou no LTS anterior. Eu não tentei, então não vou oferecer indicadores.

Eu quero hibernar - com arquivo de troca

  1. Verifique se você tem espaço suficiente lá. O FAQ de troca do Ubuntu informa quanto você precisa, os comandos acima também o fazem. Se precisar de mais informações aqui, faça outra pergunta, pois esse é um tópico demorado.
  2. Aumente o arquivo de troca ou crie um novo com tamanho suficiente (de preferência, concordo com o @muru ) e mude para o /etc/fstabnovo. Reinicie para ver se a alteração foi bem-sucedida (armazene o backup do fstabpara que você possa reverter facilmente, por precaução.
  3. Aponte seu kernel para ele com parâmetros apropriados, para que ele saiba de onde retornar.
  4. Atualize / reconfigure seu carregador de inicialização e reinicie.

Parâmetros do kernel? Assustador!

Leia com atenção e decida se você deseja fazer isso, mas é apenas uma maneira de configurar seu kernel. Pode ser mais fácil hibernar via systemde uswsusp(consulte Interfaces , abaixo). Pode ser que você - como eu - acabe decidindo que suspender para a RAM é suficiente e não deseja ter 32 GB em um arquivo de troca (não tão bom para pessoas com um SSD em seus laptops, por exemplo). Mas!

  1. O hibernar para trocar arquivo requer resume=saber em qual partição está o arquivo de troca e resume_offset=saber onde está o arquivo de troca para começar a retomar.
  2. hibernar para partição requer resume=apontar para trocar partição.
  3. resolver problemas de tela preta pode muito bem exigir resumedelay=.

Documentos do kernel sobre o atraso na retomada da hibernação:

resumeedelay = [HIBERNATION] Atraso (em segundos) para pausar antes de tentar ler os arquivos de resumo

Parâmetros necessários para arquivo de swap e hibernação :

resume = [SWSUSP]

      Specify the partition device for software suspend

      Format:

      {/dev/<dev> | PARTUUID=<uuid> | <int>:<int> | <hex>}

resume_offset = [SWSUSP]

      Specify the offset from the beginning of the partition
      given by "resume=" at which the swap header is located,
      in <PAGE_SIZE> units (needed only for swap files).

      See Documentation/power/swsusp-and-swap-files.txt

Para resume=escolher o mesmo estilo que o rootelemento possui fstab. Então, ou /dev/sdaXou UUIDou LVM. Para hibernar para arquivo - forneça uma partição onde seu arquivo pode ser encontrado.

Lendo:

  1. https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt
  2. https://wiki.archlinux.org/index.php/Kernel_parameters

Problema - cabeçalho de troca não encontrado

O arquivo de troca precisa ser formatado corretamente. Se seus logs lhe disserem isso, você está tentando hibernar para um arquivo ou o parâmetro resume não está correto.

Alterne para particionar ou corrigir o arquivo ou alterar a interface usada para hibernação.

Consulte: /unix/43508/debian-hibernate-problem-pm-swap-header-not-found

mkswapé usado para formatar o arquivo, leia mais aqui

Problema! Hibernação não permitida!

Teste: pm-hibernate(se o pacote pm-utils estiver instalado) ou systemctl hibernateinformar que você não tem permissão. Configuração padrão no Ubuntu desde o IIRC 12.04.

Solução (s): depende da versão do Polkit, da versão e do sabor do Ubuntu ... Consulte esta pergunta . Além disso, o ArchWiki no Polkit pode ajudar.

Para o Mint, consulte: https://forums.linuxmint.com/viewtopic.php?t=259912

Problema! Hibernação desativada por algo na BIOS!

Teste: cat /sys/power/disktem disabled. Os logs mostram "Falha ao hibernar o sistema via logind: verbo de suspensão não suportado".

Solução: pesquise seu BIOS e encontre a coisa problemática. Desligue isso.

Solução 2: tente outra interface de hibernação.

Consulte: Como ativar a hibernação no 16.04.1? (systemd) .

Interfaces

  1. swsusp - interface de kernel de baixo nível. Consulte Pré-requisitos - kernel para quais arquivos. Gravar arquivos diretamente pode causar suspensão (na RAM, no disco e no híbrido). De acordo com SwapFAQ problemático com a hibernação para arquivo.
  2. uswsusp - ArchWiki e Debian Wiki e uma bela pergunta do AskUbuntu com uma descrição de como usá-lo .
  3. systemd - ArchWiki nele
  4. pm-utils - AFAIK, que é uma coleção de scripts originalmente do Debian -, de bom grado, darei as boas-vindas a mais informações.

Considerações finais

Para mim, foram quase dois dias de trabalho para compilar isso. Esperamos que isso ajude você (e outros) a resolver seu problema mais rapidamente. Ainda faltam pontos, mas são 2 horas da manhã e não tenho vontade de escrever mais agora. Claro que estou aberto a sugestões de alguém para melhorar isso, então comente. Responderei quando durmo, trabalho etc. :-)

Não tenho certeza de que hibernar para o disco é ótimo. Eu fui dormir no final. Mas, para mim, o problema era ter um arquivo de 32 GB apenas para poder hibernar, já que geralmente estou evitando a troca. Meu arquivo de troca inicial tinha 2 GB e estava quase vazio. YMMV. No entanto, boa sorte! E comece com os logs!

LAFK diz Restabelecer Monica
fonte
Ótima resposta! Mas o que acabou resolvendo meu caso foi o Swap FAQ vinculado e me dizendo para adicionar "resume = UUID" a uma variável no meu arquivo de configuração do grub e / ou sth semelhante ao initramfs-tools. Por alguma razão, eu tinha um UUID errado, o que provavelmente era o problema. Portanto, sugiro que alguém com um problema semelhante verifique primeiro o que está escrito nas Perguntas frequentes sobre swap, em "Como adiciono ou modifico uma partição de swap?", E o terceiro ponto sobre a hibernação.
RimaNari 23/08/19
1
"disk - Suspender para disco (STD), hibernação. Isso - você deseja." Eu sou o único que deu um chute nisso? Muito obrigado.
spakmad 12/01
Ótima resposta! uma pequena observação: em uma das minhas máquinas, o currículo após o hibernar funcionou apenas após uma segunda tentativa de inicialização (nada foi exibido no monitor na primeira tentativa). Eu poderia consertar a instalação de uma pilha HWE: $ sudo apt install linux-generic-hwe-18.04(para alguns hardwares linux-generic-hwe-18.04-edgepode até valer uma chance).
hiro protagonist
1
Ah Eu não vou hibernar! Eu tenho 512 GB de RAM. Oh bem ... (Eu tenho espaço suficiente no meu disco rígido de 10 TB, mas levaria horas para reiniciar!)
Alexis Wilke
9

Use o UUID da partição swap em vez de seu ponto de montagem no parâmetro RESUME resume=UUID=<#>em ambos /etc/default/grube/etc/initramfs-tools/conf.d/resume

Crie uma entrada para a partição swap /etc/fstab sem um ponto de montagem semelhante a este

# Entry for Swap : 
UUID=# none  swap    sw              0       0

Em /etc/default/grubeu usei uma entrada separada para retomar a hibernação

# FOR HIBERNATION 
GRUB_CMDLINE_LINUX="resume=UUID=..."

Criar um kit de políticas na autoridade local (pkla)

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

E insira ai

[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

[Enable hibernate to be run via cron]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.hibernate-multiple-sessions
ResultAny=yes

Após essa atualização, initramfs e GRUB

sudo update-initramfs -u -k all
sudo update-grub

Reinicie, abra alguns aplicativos e use systemctl hibernate(sem sudo) para ver se funciona

Roey
fonte
funciona bem! Muito obrigado.
Yossarian42 25/07
valeu cara, você me salvou!
Vahe Shadunts
1

Para mim, sempre funcionou até 18.04 e depois das 18.04 eu o habilitei como em muitos artigos, mas de repente parou de funcionar ontem (funcionando bem por 4-5 meses),

e aqui está o ... UMA COISA que o fez funcionar novamente ...

Diga ao grub2 onde está a partição swap:

Primeiro descubra em qual partição está usando o comando abaixo:

cat /etc/fstab

O meu está no sda7, como é a seguinte saída:

swap estava em / dev / sda7 durante a instalação

Em seguida, adicione no Grub2 a seguinte adição à seguinte linha, usando o seguinte comando:

sudo gedit / etc / default / grub

GRUB_CMDLINE_LINUX_DEFAULT = "intel_pstate = desativar currículo = / dev / sda7"

A parte importante é resume=/dev/sda7

/ dev / sda7 no meu caso

Atualize o Grub com o seguinte comando e, depois disso, ele começou a funcionar perfeitamente novamente:

sudo update-grub

Depois de muitas tentativas, essa foi a única coisa que funcionou, talvez tenha sido apenas por causa de uma atualização no kernel que estragou tudo, mas mesmo assim isso funcionou.

markackerman8-gmail.com
fonte
0

espero que isso ajude alguém, mas estou executando o popos / ubuntu 19.04. Na minha configuração, eu era capaz de hibernar usando s2disk ou pm-hibernate, mas o currículo estava falhando. Para corrigir isso, como meu sistema é inicializado usando UEFI em vez de grub. Eu apenas tive que reinstalar o carregador de inicialização. Para verificar se você está executando o UEFI, use o seguinte:

[ -d /sys/firmware/efi ] && echo "Installed in UEFI mode" || echo "Installed in Legacy mode"

se estiver no modo UEFI, segui este guia para reinstalar o carregador de inicialização, varia se você estiver usando um disco nvme ou disco sata: https://support.system76.com/articles/bootloader/

certifique-se de que nas opções do kernalboot especifique a partição ou o UUID de onde retornar, por exemplo, algo como isto:

resume = UUID = ed8347ed-2eb4-40bc-bc77-cc53b987ed88

Você pode adicionar isso: 1) sudo kernel-stub -a "resume = UUID = ..." 2) edite o arquivo /etc/initramfs-tools/conf.d/resume e adicione: resume = UUID = ed8347ed- 2eb4-40bc-bc77-cc53b987ed88

verifique no arquivo / var / log / syslog algo parecido com isto: 4 de agosto 22:26:42 pop-os / usr / bin / kernelstub [19639]: kernelstub: DEBUG kopts: root = UUID = b37019a8-91f5-445f-94c1 -7359a49ed5df ro quiet loglevel = 0 systemd .show_status = false resume = UUID = ed8347ed-2eb4-40bc-bc77-cc53b987ed88

Se o resumo estiver ausente ou errado, você precisará atualizar seu kernal de inicialização novamente.

Lingster
fonte
0

Além de configurar o ponto de resumo de troca no grub mencionado na resposta do Sam73 , descobri que o meu Ubuntu 18.04 também precisa instalar laptop-mode-tools:

$sudo apt install laptop-mode-tools

então mude ENABLE_LAPTOP_MODE_ON_AC=1no arquivo de configuração:

$sudo vim /etc/laptop-mode/laptop-mode.conf

inicie o modo laptop com:

$sudo laptop_mode start

PS Você pode verificar se o laptop inicia ou não com

$cat /proc/sys/vm/laptop_mode

Se imprimir 0, o laptop_modenão está funcionando, caso contrário, indica que funciona bem.

Yossarian42
fonte