uswsusp (Português)

From ArchWiki

Status de tradução: Esse artigo é uma tradução de uswsusp. Data da última tradução: 2020-02-23. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.

µswsusp (userspace software suspend) é um conjunto de ferramentas de espaço de usuário usadas para hibernação (suspender para disco) e suspender (suspender para RAM ou standby) em sistemas Linux. Isso consiste em:

s2ram - um wrapper em torno do mecanismo do kernel de suspensão para RAM, permitindo que o usuário execute algumas manipulações de adaptador gráfico do usuário antes de suspender e depois de retomar isso pode ajudar a trazer os gráficos (e todo o sistema) de volta à vida após o currículo. Incorpora a funcionalidade de vbetool e radeontool, bem como alguns truques próprios. Inclui uma lista de configurações de hardware de trabalho, juntamente com os conjuntos de operações apropriados a serem executados para retomá-los com êxito. Isso é feito por uma lista de permissões de hardware mantida pelo HAL - s2ram traduz as opções do banco de dados HAL em parâmetros s2ram.

Nota: Como o HAL está obsoleto e os drivers do KMS podem salvar o estado da placa gráfica diretamente sem as peculiaridades do espaço do usuário, o desenvolvimento do s2ram está descontinuado e nenhuma outra entrada na lista de permissões é aceita. Se um driver KMS estiver em uso, o s2ram suspenderá diretamente a máquina.

s2disk - a implementação de referência do software userspace suspender (µswsusp); coordena as etapas necessárias para suspender o sistema (como travar os processos, preparar o espaço de troca, etc.) e manipula a gravação e leitura de imagens. s2disk já possui suporte a compressão e criptografia da imagem e outros recursos (por exemplo, uma boa barra de progresso, salvar a imagem em um disco remoto, jogar tetris enquanto retoma, etc.) podem ser facilmente adicionados.

s2both - combina as funcionalidades de s2ram e s2disk e é muito útil quando a bateria está quase esgotada. s2both escreve o instantâneo do sistema para o swap (assim como o s2disk), mas depois coloca a máquina em STR (assim como s2ram). Se a bateria tiver energia suficiente, você pode retomar rapidamente a partir do STR, caso contrário, você ainda pode retomar a partir do disco sem perder o seu trabalho.

Instalação

Instale uswsusp-gitAUR.

Configuração

Você deve editar /etc/suspend.conf antes de tentar suspender para o disco.

  • Se estiver usando uma partição swap:
resume device = /dev/disk/by-label/swap

sendo que by-label/swap deve ser substituído com o dispositivo de bloco correto contendo a partição swap.

resume device = /dev/sdXN  # a partição que contém o arquivo swap
resume offset = 123456

sendo que X e N são a letra do dispositivo e o número da partição, respectivamente, e 123456 é a posição a partir do início do dispositivo de retomada no qual o cabeçalho do arquivo swap está localizado. O deslocamento da retomada pode ser obtido executando:

# swap-offset seu_arquivo_swap
  • O parâmetro image size (opcional) pode ser usado para limitar o tamanho da imagem de instantâneo do sistema criada por s2disk. Se não for possível criar uma imagem do tamanho desejado, o s2disk vai suspender de qualquer maneira, usando uma imagem maior. Se o tamanho da imagem estiver definido como 0, a imagem será o menor possível.
  • O parâmetro shutdown method (opcional) especifica a operação que será executada quando a máquina estiver pronta para ser desligada. Se definido como reboot, a máquina será reinicializada imediatamente. Se definido para platform, a máquina será desligada usando operações especiais de gerenciamento de energia disponíveis no kernel, que podem ser necessárias para que o hardware seja reinicializado corretamente após o reinício, e pode fazer com que o sistema retome mais rapidamente. Se definido como shutdown, a máquina simplesmente será desligada, o que pode causar problemas para alguns hardwares.
  • Se o parâmetro compute checksum estiver definido como y, as ferramentas s2disk e resume usarão o algoritmo MD5 para verificar a integridade da imagem.
  • Se o parâmetro compress estiver definido como y, as ferramentas s2disk e resume usarão o algoritmo de compactação LZF para compactar/descompactar a imagem.
  • Se splash estiver definido como y, s2disk e/ou resume usarão um sistema inicial. Atualmente, há suporte a splashy e fbsplash, os quais não estão disponíveis no Arch Linux.
    Nota: Isso exige opções adicionais ao configure para µswsusp (--enable-splashy e --enable-fbsplash, respectivamente).
  • A opção resume pause introduzirá um atraso depois de retomar com sucesso da hibernação, para permitir que o usuário leia as estatísticas (velocidade de leitura e gravação, tamanho da imagem, etc.)
  • Se threads estiver ativado, o s2disk usará vários encadeamentos para compactar, criptografar e gravar a imagem. Isso deve acelerar as coisas. Para detalhes, leia os comentários em suspend.c

Suporte a criptografia

Tango-view-refresh-red.pngThis article or section is out of date.Tango-view-refresh-red.png

Reason: suspend-keygen não está mais disponível. Veja [1] (Discuss in Talk:Uswsusp (Português))
  • gere uma chave com o utilitário suspend-keygen incluído no pacote;
  • escreva o nome da chave em /etc/suspend.conf;
encrypt = y
RSA key file = caminho_para_arquivo_de_chave

Recriar initramfs

Nota: Sempre que você modificar /etc/suspend.conf, você precisará reconstruir seu initramfs. Se você não fizer isso, e o Linux não conseguir encontrar sua imagem na inicialização, você não verá uma mensagem de erro indicando isso. Seu processo de inicialização irá travar depois de iniciar o hook uresume, normalmente após a mensagem com a versão libgcrypt.

Edite seu arquivo /etc/mkinitcpio.conf e adicione "uresume" à entrada HOOKS.

HOOKS="base udev autodetect block uresume filesystems"

e Gere novamente o initramfs.

Exemplo de configuração

/etc/suspend.conf
snapshot device = /dev/snapshot

resume device = /dev/disk/by-label/swap

# tamanho da imagem é em bytes
image size = 1468006400

#suspend loglevel = 2

compute checksum = y

compress = y

#encrypt = y

#early writeout = y

#splash = y

# até 60 (segundos)
#resume pause = 30  

threads = y

Uso

Autônomo

Para suspender para o disco, execute:

# s2disk

Para suspender para a RAM, execute primeiro:

# s2ram --test

para ver se sua máquina está no banco de dados das máquinas que sabe-se que funciona. Se retornar algo como Machine matched entry xyz, então prossiga e execute:

# s2ram

Caso contrário, o parâmetro --force será necessário, possivelmente combinado com outros parâmetros (consulte s2ram --help). Pode falhar.

Agora você poderia tentar suspender chamando diretamente s2disk na linha de comando:

# s2disk

Provavelmente, é necessário recorrer a uma ferramenta de espaço de usuário que chama internamente s2disk.

Com systemd

Para colocar seu sistema em hibernação, conhecido como Suspensão para o Disco, com systemctl hibernate, edite o systemd-hibernate.service, adicionando:

/etc/systemd/system/systemd-hibernate.service.d/override.conf
[Service]
ExecStart=
ExecStartPre=-/usr/bin/run-parts -v -a pre /usr/lib/systemd/system-sleep
ExecStart=/usr/bin/s2disk
ExecStartPost=-/usr/bin/run-parts -v --reverse -a post /usr/lib/systemd/system-sleep

Depois disso, execute systemctl hibernate para colocar seu sistema em hibernação. Faça alterações semelhantes em systemd-hybrid-sleep.service (substitua s2disk por s2both) para ativar o modo de suspensão híbrido baseado no µswsusp.

Solução de problemas

Minha máquina não está na lista branca

Se s2ram não corresponder a sua máquina a uma entrada em sua lista de desbloqueio, ela exibirá algumas strings de identificação de propósito geral para sua máquina (as mesmas fornecidas s2ram -i). Neste caso, você pode tentar forçar s2ram a suspender sua máquina usando s2ram -f.

s2ram -f não funciona

Se s2ram -f não funcionar, tente as diferentes alternativas oferecidas por s2ram. Execute s2ram -h para obter uma lista das opções possíveis:

# s2ram -h
Usage: s2ram [-nhi] [-fspmrav]

Options:
    -h, --help:       this text.
    -n, --test:       test if the machine is in the database.
                      returns 0 if known and supported
    -i, --identify:   prints a string that identifies the machine.
    -f, --force:      force suspending, even on unknown machines.

The following options are only available with -f/--force:
    -s, --vbe_save:   save VBE state before suspending and restore after resume.
    -p, --vbe_post:   VBE POST the graphics card after resume
    -m, --vbe_mode:   get VBE mode before suspend and set it after resume
    -r, --radeontool: turn off the backlight on radeons before suspending.
    -a, --acpi_sleep: set the acpi_sleep parameter before suspend
                      1=s3_bios, 2=s3_mode, 3=both
    -v, --pci_save:   save the PCI config space for the VGA card.

Experimente as seguintes variações:

  s2ram -f -a 1
  s2ram -f -a 2
  s2ram -f -a 3
  s2ram -f -p -m
  s2ram -f -p -s
  s2ram -f -m
  s2ram -f -s
  s2ram -f -p
  s2ram -f -a 1 -m
  s2ram -f -a 1 -s

Se nenhuma dessas combinações funcionar, inicie novamente, mas adicione a opção -v.

Note que misturar a opção -a e as opções do vbetool (-p, -m, -s) normalmente é apenas uma medida de último recurso, geralmente não faz muito sentido.

Se você encontrar várias combinações que funcionam (por exemplo, s2ram -f -a 3 e s2ram -f -p -m funcionam na sua máquina), o método do kernel (-a) deve ser preferido sobre os métodos do espaço do usuário (-p, -m, -s).

Verifique todas as combinações em ambos os casos ao relatar o sucesso para os desenvolvedores do s2ram:

  • ao executar o s2ram a partir do console
  • ao executar o s2ram a partir do X

s2ram não funciona com qualquer combinação de opções

Existe um truque que não corresponde a uma opção de linha de comando porque requer operações adicionais de você. Ele é marcado com NOFB na lista branca e usado para os laptops que são suspensos e retomados corretamente apenas se nenhum framebuffer for usado. Se você verificar que nenhuma opção de linha de comando do s2ram funciona, você pode tentar desabilitar o framebuffer. Para fazer isso, você precisa editar a configuração do gerenciador de inicialização, remover quaisquer valores possíveis vga=<foo> da linha do kernel e reinicializar. Isso, pelo menos, se você usar o framebuffer VESAFB (como no kernel padrão do Arch). Se você usar um driver de framebuffer diferente, consulte a documentação do driver para ver como desabilitá-lo.

Veja também

  • Site oficial do Uswsusp
  • Arquivo HOWTO incluído no código-fonte do kernel Linux
  • /usr/share/doc/suspend/README Documentação do Uswsusp
  • /usr/share/doc/suspend/README.s2ram-whitelist README do s2ram-whitelist