Guia Completo: Configurar Hibernação no Ubuntu 24.04 com Swap File
Versão: Ubuntu 24.04 LTS (Noble Numbat)
Kernel: 6.17+
Swap: Arquivo
swap.img(não partição dedicada)Atualizado: Julho 2026
⚠️ O que torna este guia diferente
O Ubuntu 24.04 mudou silenciosamente o sistema de permissões do polkit. A maioria dos tutoriais na internet usa o formato .pkla (antigo), que não funciona mais no Ubuntu 24.04. Este guia cobre:
- Configuração com swap file (não partição)
- O bug do initramfs com swap files
- O novo formato de regras do polkit (JavaScript
.rules) -
Erro
sh: write error: invalid argument— e como evitá-lo - Debug passo a passo quando algo dá errado
Pré-requisitos
- Ubuntu 24.04 LTS instalado
-
bashcomo shell padrão - Swap file já criado (ex:
/swap.imgde 36GB) ou disposição para criar um (veja a próxima seção) - Swap ativo (
swapon --showmostra o arquivo) - Swap >= RAM física (recomendado para hibernação segura)
Verificar pré-requisitos
# Distro
cat /etc/os-release | grep PRETTY_NAME
# Swap ativo
swapon --show
# RAM total
free -h
Enter fullscreen mode Exit fullscreen mode
Criar ou recriar o swap file (/swap.img)
Se você ainda não tem um swap file ou precisa aumentar/redimensionar a swap, siga este passo. Se já tiver /swap.img ativo e do tamanho certo, pode pular.
⚠️ Atenção: Ao recriar o
swap.img, o offset físico muda. Sempre que deletar e criar um novo swap file, você precisa refazer o Passo 1 (offset) e o Passo 2 (GRUB).
1. Desativar e remover o swap antigo
# Desativa qualquer swap ativa
sudo swapoff -a
# Remove o arquivo antigo (se existir)
sudo rm -f /swap.img
# Remove a entrada antiga do /etc/fstab (evita erros no boot)
sudo sed -i '/swap/d' /etc/fstab
Enter fullscreen mode Exit fullscreen mode
2. Criar o novo arquivo de swap
O tamanho deve ser pelo menos igual à RAM física. No exemplo abaixo, criamos 36GB (ajuste conforme sua RAM):
# Método recomendado: fallocate (mais rápido)
sudo fallocate -l 36G /swap.img
# Alternativa: dd (mais lento, mas compatível com qualquer filesystem)
# sudo dd if=/dev/zero of=/swap.img bs=1M count=36864 status=progress
Enter fullscreen mode Exit fullscreen mode
3. Configurar permissões e formatar como swap
# Apenas o root pode acessar o swap
sudo chmod 600 /swap.img
# Formata como área de swap
sudo mkswap /swap.img
Enter fullscreen mode Exit fullscreen mode
4. Ativar o swap
sudo swapon /swap.img
Enter fullscreen mode Exit fullscreen mode
5. Configurar para ativar automaticamente no boot
Adicione ao /etc/fstab:
echo '/swap.img none swap sw 0 0' | sudo tee -a /etc/fstab
Enter fullscreen mode Exit fullscreen mode
Ou edite manualmente:
sudo nano /etc/fstab
Enter fullscreen mode Exit fullscreen mode
Adicione a linha:
/swap.img none swap sw 0 0
Enter fullscreen mode Exit fullscreen mode
6. Verificar
swapon --show
free -h
Enter fullscreen mode Exit fullscreen mode
Esperado: /swap.img aparece em swapon --show e o tamanho total de swap é >= RAM.
Passo 1: Coletar informações do sistema
Você precisa de dois valores:
1.1 UUID da partição raiz (onde o swap.img está)
sudo findmnt -no UUID -T /swap.img
Enter fullscreen mode Exit fullscreen mode
Exemplo:
58bf371d-01d1-4316-98c3-ef845c1825f2
1.2 Offset físico do swap.img no disco
sudo filefrag -v /swap.img | awk 'NR==4{gsub(/\./,"");print $4}'
Enter fullscreen mode Exit fullscreen mode
Exemplo:
14241792⚠️ Importante: Se o
filefragretornar algo como14241792.., remova os dois pontos e use só o número.
Passo 2: Configurar o GRUB
No Ubuntu, os parâmetros do kernel para hibernação vão no GRUB.
sudo nano /etc/default/grub
Enter fullscreen mode Exit fullscreen mode
Localize a linha:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
Enter fullscreen mode Exit fullscreen mode
Adicione no final (mantenha o que já existe):
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=58bf371d-01d1-4316-98c3-ef845c1825f2 resume_offset=14241792"
Enter fullscreen mode Exit fullscreen mode
⚠️ Não apague o
quiet splashou outros parâmetros existentes!
Salve (Ctrl+O, Enter, Ctrl+X) e atualize:
sudo update-grub
Enter fullscreen mode Exit fullscreen mode
Passo 3: Configurar o initramfs (Atenção ao bug!)
❌ O que NÃO fazer (erro comum)
Não crie um arquivo /etc/initramfs-tools/conf.d/resume com resume_offset. Isso causa o warning:
W: initramfs-tools configuration sets RESUME=UUID=...
W: but no matching swap device is available.
Enter fullscreen mode Exit fullscreen mode
O initramfs procura uma partição de swap com aquele UUID, mas você tem um arquivo de swap. O warning é inofensivo, mas confuso.
✅ O que fazer
Simplesmente não crie o arquivo resume. Deixe o initramfs gerar sem ele — o kernel vai ler os parâmetros do GRUB diretamente.
Se você já criou o arquivo, remova:
sudo rm -f /etc/initramfs-tools/conf.d/resume
Enter fullscreen mode Exit fullscreen mode
Regenere o initramfs:
sudo update-initramfs -u -k all
Enter fullscreen mode Exit fullscreen mode
Saída esperada (sem warnings):
update-initramfs: Generating /boot/initrd.img-6.17.0-35-generic
⚠️ Passo 3.5: NÃO crie scripts de resume no initramfs!
🚨 O erro sh: write error: invalid argument
Alguns tutoriais antigos sugerem criar um script em /etc/initramfs-tools/scripts/init-premount/resume_swapfile para setar o resume e resume_offset manualmente durante o boot.
Isso é desnecessário e causa erro!
Quando o kernel já recebe resume e resume_offset via GRUB (Passo 2), ele configura automaticamente. Se um script tentar escrever de novo em /sys/power/resume ou /sys/power/resume_offset, o kernel retorna:
sh: write error: invalid argument
Enter fullscreen mode Exit fullscreen mode
✅ Verifique e remova scripts desnecessários
# Listar scripts no initramfs
ls -la /etc/initramfs-tools/scripts/init-premount/
Enter fullscreen mode Exit fullscreen mode
Se encontrar um arquivo como resume_swapfile, remova:
sudo rm /etc/initramfs-tools/scripts/init-premount/resume_swapfile
sudo update-initramfs -u -k all
Enter fullscreen mode Exit fullscreen mode
Regra de ouro: O kernel lê
resumeeresume_offsetdo GRUB automaticamente. Não crie scripts para isso.
Passo 4: Configurar o Polkit (O truque do Ubuntu 24.04!)
🚨 A pegadinha
O Ubuntu 24.04 usa polkit 122+, que migrou do formato .pkla (legacy) para regras JavaScript (.rules).
Tutoriais antigos usam:
/etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla
Enter fullscreen mode Exit fullscreen mode
Isso NÃO funciona mais no Ubuntu 24.04. O arquivo é simplesmente ignorado.
✅ Solução: Usar .rules (JavaScript)
sudo mkdir -p /etc/polkit-1/rules.d
sudo nano /etc/polkit-1/rules.d/85-enable-hibernate.rules
Enter fullscreen mode Exit fullscreen mode
Cole:
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.login1.hibernate" ||
action.id == "org.freedesktop.login1.hibernate-multiple-sessions" ||
action.id == "org.freedesktop.login1.handle-hibernate-key") {
return polkit.Result.YES;
}
});
Enter fullscreen mode Exit fullscreen mode
Salve (Ctrl+O, Enter, Ctrl+X).
Reiniciar o systemd-logind
sudo systemctl restart systemd-logind
Enter fullscreen mode Exit fullscreen mode
⚠️ Isso pode deslogar sua sessão gráfica. Salve tudo antes.
Passo 5: Reboot e teste
sudo reboot
Enter fullscreen mode Exit fullscreen mode
Após reiniciar, verifique:
5.1 Verificar parâmetros do kernel
cat /proc/cmdline | grep resume
Enter fullscreen mode Exit fullscreen mode
Deve mostrar:
resume=UUID=... resume_offset=...
5.2 Verificar se o hibernate está habilitado
busctl call org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager CanHibernate
Enter fullscreen mode Exit fullscreen mode
Esperado:
s "yes"Se retornar
s "no", vá para a seção Debug.
5.3 Testar o hibernate
sudo systemctl hibernate
Enter fullscreen mode Exit fullscreen mode
O sistema deve:
- Salvar o estado da RAM no swap.img
- Desligar completamente
- Ao ligar, restaurar a sessão exatamente como estava
Não deve aparecer
sh: write error: invalid argument.
🔧 Debug: Quando o CanHibernate retorna “no”
Se busctl call ... CanHibernate retornar s "no", execute este checklist:
Check 1: Verificar parâmetros do kernel
cat /proc/cmdline
cat /sys/power/resume
cat /sys/power/resume_offset
cat /sys/power/state
Enter fullscreen mode Exit fullscreen mode
Esperado:
-
/proc/cmdlinemostraresume=UUID=... resume_offset=... -
/sys/power/resumemostra259:5(ou similar, major:minor do device) -
/sys/power/resume_offsetmostra seu offset -
/sys/power/statemostrafreeze mem disk
Check 2: Verificar swap
swapon --show
free -h
Enter fullscreen mode Exit fullscreen mode
Esperado: Swap ativo e tamanho >= RAM.
Check 3: Verificar Secure Boot
mokutil --sb-state
Enter fullscreen mode Exit fullscreen mode
Se estiver
enabled, o hibernate pode ser bloqueado. Desative no BIOS se necessário.
Check 4: Verificar autorização do polkit
pkcheck --action-id org.freedesktop.login1.hibernate --process $$ --allow-user-interaction 2>&1
Enter fullscreen mode Exit fullscreen mode
Se retornar Not authorized:
- O arquivo
.pklaestá sendo usado (formato antigo) - Ou a regra
.rulesestá no lugar errado - Ou o
systemd-logindnão foi reiniciado
Solução:
- Remova qualquer
.pkla:
sudo rm -f /etc/polkit-1/localauthority/50-local.d/*.pkla
Enter fullscreen mode Exit fullscreen mode
- Crie o
.rules(Passo 4) - Reinicie o
systemd-logind(Passo 4)
Check 5: Verificar logs do systemd-logind
journalctl -u systemd-logind -n 50
Enter fullscreen mode Exit fullscreen mode
Procure por mensagens de erro relacionadas a hibernate.
Check 6: Verificar se o initramfs tem warning
sudo update-initramfs -u -k all
Enter fullscreen mode Exit fullscreen mode
Se aparecer:
W: initramfs-tools configuration sets RESUME=UUID=...
W: but no matching swap device is available.
Enter fullscreen mode Exit fullscreen mode
Solução: Remova /etc/initramfs-tools/conf.d/resume e regenere.
Check 7: Verificar scripts desnecessários no initramfs
ls -la /etc/initramfs-tools/scripts/init-premount/
lsinitramfs /boot/initrd.img-$(uname -r) | grep -i resume
Enter fullscreen mode Exit fullscreen mode
Se encontrar resume_swapfile ou similar, remova (veja Passo 3.5).
📋 Comandos rápidos (cheat sheet)
# Coletar info
sudo findmnt -no UUID -T /swap.img
sudo filefrag -v /swap.img | awk 'NR==4{gsub(/\./,"");print $4}'
# Criar ou recriar swap file
sudo swapoff -a
sudo rm -f /swap.img
sudo sed -i '/swap/d' /etc/fstab
sudo fallocate -l 36G /swap.img
sudo chmod 600 /swap.img
sudo mkswap /swap.img
sudo swapon /swap.img
echo '/swap.img none swap sw 0 0' | sudo tee -a /etc/fstab
# Configurar GRUB
sudo nano /etc/default/grub
sudo update-grub
# Limpar initramfs (se necessário)
sudo rm -f /etc/initramfs-tools/conf.d/resume
sudo rm -f /etc/initramfs-tools/scripts/init-premount/resume_swapfile
sudo update-initramfs -u -k all
# Configurar polkit (Ubuntu 24.04)
sudo mkdir -p /etc/polkit-1/rules.d
sudo nano /etc/polkit-1/rules.d/85-enable-hibernate.rules
sudo systemctl restart systemd-logind
# Testar
busctl call org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager CanHibernate
sudo systemctl hibernate
# Debug
cat /proc/cmdline
cat /sys/power/resume
cat /sys/power/resume_offset
pkcheck --action-id org.freedesktop.login1.hibernate --process $$ --allow-user-interaction 2>&1
journalctl -u systemd-logind -n 50
ls -la /etc/initramfs-tools/scripts/init-premount/
lsinitramfs /boot/initrd.img-$(uname -r) | grep -i resume
Enter fullscreen mode Exit fullscreen mode
🎯 Diferenças: Ubuntu vs Pop!_OS
Passo Ubuntu Pop!_OS Bootloader GRUB systemd-boot Kernel params Edita/etc/default/grub + update-grub
kernelstub -a
Polkit (24.04+)
.rules (JavaScript)
.rules (JavaScript)
Initramfs
update-initramfs
kernelstub + update-initramfs
❓ FAQ
Preciso de swap maior que a RAM?
Recomendado: Sim, pelo menos igual à RAM. Se você tem 32GB RAM, use 32GB+ de swap. O kernel precisa de espaço para salvar toda a RAM + algum overhead.
Posso usar swapfile em BTRFS?
Sim, mas o offset é calculado de forma diferente. Use btrfs inspect-internal map-swapfile em vez de filefrag.
O hibernate funciona com criptografia LUKS?
Sim, mas o processo é diferente. O swap precisa estar dentro do container LUKS ou usar um swap criptografado separado. Não coberto neste guia.
O que acontece se o swap estiver cheio?
O hibernate falha e o sistema continua ligado. Por isso é recomendado ter swap >= RAM.
Posso hibernar sem sudo?
Com a regra do polkit configurada, usuários normais podem hibernar via interface gráfica (botão de hibernate no menu de energia).
Por que aparece sh: write error: invalid argument?
Isso acontece quando um script no initramfs (ex: resume_swapfile) tenta escrever em /sys/power/resume ou /sys/power/resume_offset, mas o kernel já configurou esses valores via parâmetros do GRUB. A solução é remover o script (veja Passo 3.5).
Preciso recalcular o offset depois de recriar o swap file?
Sim. Sempre que você deletar e criar um novo /swap.img, o offset físico do arquivo no disco muda. Você precisa:
- Refazer o Passo 1 (
filefrag) para obter o novo offset - Atualizar o Passo 2 (GRUB) com o novo offset
- Rodar
sudo update-grubesudo update-initramfs -u -k all
📚 Referências
- Arch Wiki – Hibernation
- Ubuntu Wiki – Hibernate
- Polkit Documentation
- Kernel Documentation – Power Management
📝 Changelog
- 2026-07-06 – Versão inicial com foco no Ubuntu 24.04, polkit .rules e swap file
-
2026-07-06 – Adicionado: Erro
sh: write error: invalid argumente scriptresume_swapfile -
2026-07-11 – Adicionado: Seção “Criar ou recriar o swap file” com comandos para deletar e recriar
/swap.img
Autor: Hallan + Kimi (sessão de debug colaborativa)
Licença: MIT – Use e modifique à vontade!
답글 남기기