A principal fonte para esta resposta (além da minha própria experiência) é esta página no wiki do Arch Linux .
Nesta resposta, eu uso o sudoedit
para fazer alterações nos arquivos de propriedade da raiz. Se preferir, basta chamar seu editor de texto favorito com permissões de root, mas se quiser usar um editor de GUI e estiver usando o Wayland, consulte Por que não o gksu / gksudo ou o lançamento de um aplicativo gráfico com o sudo funciona com o Wayland? .
Se você não puder hibernar, esteja ciente de que ainda é possível (provavelmente) economizar energia usando o estado de suspensão, no qual o estado da RAM é mantido. O comando systemd para isso é systemctl suspend
e é mais provável que funcione do que a hibernação.
Deve-se dizer que não é garantido que a hibernação funcione; é por isso que iniciar a hibernação por meio da GUI é desativado por padrão. Mesmo se você fizer tudo certo, você ainda pode ter problemas. Seu sistema pode falhar, seu estado de máquina pode não ser recuperável (você pode perder o trabalho não salvo, por exemplo) e você pode se encontrar na triste situação de manter pressionado o botão de energia por muito tempo. Tempo. Eu recomendo apenas tentar testar a hibernação depois de salvar todo o seu trabalho e deixar apenas alguns aplicativos ociosos abertos (como um emulador de terminal que não está fazendo nada).
A hibernação envolve gravar o estado da RAM em uma área do disco. O espaço de troca é usado para esse propósito. Quer seja um arquivo ou uma partição, ele deve funcionar da mesma maneira. O Arch Wiki diz que você deve ser capaz de hibernar se sua troca for pelo menos 2/5 do tamanho da RAM. Redhat fornece esta orientação sobre tamanho de swap necessário para hibernação que contradiz totalmente a Wiki Arch! Mas eu recomendo outras etapas de depuração antes de tentar aumentar o tamanho do espaço de troca.
Se você está usando o Btrfs você pode não ser capaz de hibernar e o Btrfs não suporta arquivos de troca, de acordo com o Arch Wiki. O formato padrão para partições principais no Ubuntu 17.10 (e todas as outras versões atualmente suportadas) é ext4, não Btrfs, então a maioria dos usuários não precisa se preocupar com isso.
A resposta de NirajW aqui explica como testar e ativar a hibernação se ela funcionar. O comando que ele sugere é
sudo pm-hibernate
Isso falha para mim, não importa quais outros ajustes eu faça (o meu sistema trava instantaneamente e nunca se recupera). Em vez disso eu uso
sudo systemctl hibernate
Você também pode tentar
echo disk | sudo tee /sys/power/state
A hibernação é o estado de energia mais baixo possível (ACPI S4). O que deve acontecer é que o sistema é desligado, a máquina está desligada e pode ser deixada indefinidamente, e quando você ligá-la novamente, em vez de uma inicialização limpa, você entra e retoma sua sessão.
Se você tiver uma inicialização limpa quando tentar hibernar, a primeira coisa a tentar é definir um parâmetro de inicialização para que o GRUB saiba onde encontrar o estado da máquina para carregar de volta na RAM (pelo menos é assim que eu entender o processo. Se isso não for preciso, por favor me corrija).
Configurando parâmetros de inicialização para continuar
Novas instalações do Ubuntu 17.04 e 17.10 possuem um arquivo de troca. Se você atualizou de uma instalação anterior, ainda terá uma partição de troca. O procedimento para configurar os parâmetros de continuação é diferente se você tiver um arquivo de troca. Verifique sua configuração executando
grep swap /etc/fstab
Se você tiver uma partição swap, a saída mostrará o rótulo da partição, por exemplo
# swap was on /dev/sda3 during installation
Se não houver saída, execute
ls /
e procure por /swapfile
.
Se você tem uma partição swap
Para adicionar o parâmetro resume, você executaria
sudoedit /etc/default/grub
Localize a linha que começa com GRUB_CMDLINE_LINUX_DEFAULT=
e adicione aos parâmetros entre aspas duplas a string resume=/Your/Swap/Partition
, substituindo /Your/Swap/Partition
pelo caminho do arquivo do dispositivo encontrado em /etc/fstab
. No exemplo que forneci, a linha completa provavelmente seria (dependendo de quais outros parâmetros estavam sendo usados - quiet
e splash
são os parâmetros padrão em uma instalação Ubuntu do desktop):
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=/dev/sda3"
Depois de editar este arquivo, você deve executar
sudo update-grub
para gravar a configuração no arquivo que o GRUB lê na inicialização. Se você esquecer de fazer isso, suas alterações não terão efeito;) Você também é aconselhado a reinicializar após isso antes de tentar a hibernação.
Se você tiver um arquivo de troca
Você precisa definir um parâmetro para continuar da hibernação. Seu /swapfile
deve estar em sua partição raiz, portanto, defina um parâmetro de inicialização resume=/Your/Root/Partition
em que /Your/Root/Partition
é o caminho do arquivo do dispositivo para sua partição raiz, por exemplo, /dev/sda2
.Se você não tiver certeza, verifique o conteúdo de /etc/fstab
para ver qual partição está montada em /
Você também precisa definir um parâmetro de inicialização para o offset do arquivo de troca. Você pode encontrar o valor para este parâmetro executando o comando sudo filefrag -v /swapfile
. Aqui está o início da saída deste comando no meu sistema (é exatamente o mesmo que a saída que obtive no dia 17.04, mas agora estou usando o Ubuntu MATE 17.10):
$ 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:
...
O número para o parâmetro offset é o primeiro número na coluna physical_offset
. No meu exemplo, é 34816
. Isso significa que o parâmetro de inicialização que eu defini seria resume_offset=34816
.
Para adicionar os dois parâmetros de inicialização, edite o arquivo de configuração para o GRUB:
sudoedit /etc/default/grub
Encontre a linha que começa com GRUB_CMDLINE_LINUX_DEFAULT=
e adicione os dois parâmetros de inicialização, para que, após as alterações, a linha leia algo como
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=/dev/sda2 resume_offset=34816"
mas substitua /dev/sda2
e 34816
pelos valores do seu sistema.
Salve o arquivo, saia e execute
sudo update-grub
para gravar a configuração no arquivo que o GRUB lê quando é carregado. Reinicialize e tente novamente a hibernação.
Se você ainda não puder hibernar, tente desabilitar a Inicialização Segura em suas configurações UEFI (ou BIOS), caso ainda não tenha sido feito.
Se você ainda não puder hibernar, você pode tentar depurar o processo definindo alguns parâmetros de inicialização adicionais, conforme explicado em detalhes em esta postagem sobre depuração de estados de suspensão . Edite /etc/default/grub
novamente, remova os parâmetros quiet
e splash
e adicione os parâmetros de depuração que deseja tentar (por exemplo, eu uso initctl_debug
e no_console_suspend
), execute sudo update-grub
, reinicialize e tente novamente .
As informações disponibilizadas pelos parâmetros de depuração podem levar você a descobrir o que está errado e permitir que você encontre uma solução. Eu uso meu próprio sistema como um estudo de caso em minha resposta a outra pergunta sobre hibernação . No meu caso, o problema é sempre drivers com bugs. Em todas as versões do Ubuntu que usei, precisei descarregar o módulo brcmfmac
do kernel antes da hibernação e reinseri-lo no currículo. Se módulos mais essenciais precisarem ser descarregados, eu uso uma espécie de script (executado com sudo bash filename
) para hibernação (substituindo list of buggy modules
pelos nomes dos módulos reais que precisam ser retirados):
modprobe -r list of buggy modules &&
echo disk > /sys/power/state
modprobe list of buggy modules
Eu uso o operador &&
para que a hibernação não seja tentada se o descarregamento falhar por algum motivo. Se a continuação for bem-sucedida, os módulos serão recarregados imediatamente no kernel, para que o sistema permaneça ativo.
Você pode encontrar etapas diferentes para seu sistema específico.