Eu me deparei com o mesmo problema, então eu tomei outra chance de portar o mesmo script, que você pode ver aqui . Ele não toca em nenhum armazenamento não volátil depois de luksSuspend
, por isso funciona mesmo com criptografia real de disco completo com um / boot criptografado. No entanto, você precisa ser cuidadoso - pode não funcionar como esperado ocasionalmente!
O script portado faz o seguinte:
- Crie uma montagem de ramfs em algum lugar
- Extraia o conteúdo do initramfs lá (incluindo o script de suspensão initramfs)
- Vincular os diretórios relevantes (por exemplo,
/sys
,/proc
,/dev
,/run
) ao ramfs mount - Interrompa todos os serviços que possam interferir (systemd-udevd, systemd-journald)
- Remontar o sistema de arquivos raiz (ext4 ou btrfs) com nobarrier, para que o Linux não seja interrompido ao tentar entrar no S3 e, em seguida, sincronizar
- Chroot na montagem initramfs, que sincroniza novamente, executa
luksSuspend
e coloca o computador em repouso - Após o acionamento,
luksResume
, remontar sistemas de arquivos, reiniciar serviços, desmontar montagens de ligação no initramfs mount - Finalmente, desmonte a montagem initramfs para liberar a RAM usada para os arquivos initramfs
Eu ainda não fiz testes extensivos no meu script, mas parece funcionar de forma confiável para mim. Se você usar outro sistema de arquivos (ou seja, não ext4 ou btrfs), poderá ter problemas com a barreira, portanto, também precisará modificar o script.
De qualquer forma, é bom testar e verificar se os scripts funcionam primeiro. Se você experimentar travamentos ao tentar colocar o Linux no S3 (ou seja, em echo mem > /sys/power/state
), então você poderá recuperar:
- Antes de suspender, abra um terminal tty ou outro (que será acessível, então idealmente um tty)
- Carregue o cryptsetup e as bibliotecas relevantes na RAM:
sudo cryptsetup luksResume anything_here
- Suspender usando o script
- Se ele travar após o chroot (por exemplo, após
starting version xxx
ser exibido no novo vt), alterne para o tty que você abriu anteriormente e executesudo cryptsetup luksResume your_luks_device_name_here
- Se isso travar também, abra outro vt e faça chroot em
/run/initramfs
:sudo chroot /run/initramfs /bin/ash
- Tente executar
luksResume
:cryptsetup luksResume your_luks_device_name_here && exit
- Seu computador deve suspender. Você pode acordá-lo, matar o (s) script (s) se eles ainda estiverem em execução, desmontar as montagens de bind e
/run/initramfs
e remontar seu sistema de arquivos raiz com barreira, se aplicável.