15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar
26.12.2023

Atualizando o Kernel do Linux: Um Guia Completo Distribuição por Distribuição

O kernel Linux é a camada fundamental entre o seu hardware e todos os processos em execução no seu sistema. Ele gere o agendamento de CPU, alocação de memória, drivers de dispositivos, chamadas de sistema e aplicação de segurança. Mantê-lo atualizado não é opcional para sistemas em produção — kernels desatualizados expõem os servidores a exploits de escalada de privilégios, vulnerabilidades de corrupção de memória e regressões de desempenho que versões mais recentes resolvem.

Este guia fornece instruções exaustivas e tecnicamente precisas para atualizar o kernel Linux no Ubuntu, Debian, CentOS, RHEL e Arch Linux — incluindo configuração do bootloader, regeneração do initramfs, fixação de versões e procedimentos de reversão que a maioria dos guias omite completamente.

Por Que as Atualizações do Kernel São uma Tarefa de Manutenção Crítica

Cada versão do kernel aborda uma combinação de patches de segurança (CVEs), melhorias de compatibilidade de hardware, otimizações do agendador e novas capacidades de sistema de ficheiros ou rede. As consequências de executar um kernel desatualizado incluem:

  • CVEs não corrigidos: Vulnerabilidades como Dirty COW (CVE-2016-5195), mitigações Spectre/Meltdown e bugs de escalada de privilégios mais recentes são problemas ao nível do kernel que nenhuma ferramenta de segurança na camada de aplicação pode compensar totalmente.
  • Degradação de desempenho: Kernels mais antigos carecem de melhorias no agendador CFS, compactação de memória e gestão de profundidade de fila NVMe que afetam diretamente o desempenho do servidor.
  • Incompatibilidade de drivers: Novo hardware, incluindo controladores NVMe modernos e adaptadores de rede, pode requerer versões do kernel que expõem interfaces de driver atualizadas.
  • Suporte a chamadas de sistema em falta: Runtimes de contentorização (Docker, Podman, containerd) e frameworks de segurança (eBPF, seccomp) dependem de funcionalidades do kernel introduzidas em versões específicas.

Num ambiente de VPS Hosting, o kernel também governa a eficiência com que o SO convidado interage com o hipervisor — o que significa que um kernel atual com drivers virtio atualizados e suporte a paravirtualização se traduz diretamente em menor latência e melhor desempenho de I/O.

Antes de Começar: Lista de Verificação Pré-Atualização

Independentemente da distribuição, execute estes passos antes de tocar no kernel:

  1. Faça um snapshot ou backup do seu sistema. Se o seu fornecedor suportar snapshots, faça um agora. Em bare metal, certifique-se de que o seu backup está atualizado.
  2. Verifique a versão atual do kernel: uname -r
  3. Verifique o espaço em disco disponível em /boot: df -h /boot — uma partição /boot cheia falhará silenciosamente nas instalações do kernel em sistemas baseados em Debian.
  4. Confirme o seu bootloader: ls /boot | grep -E 'grub|efi' — saber se utiliza GRUB2, systemd-boot ou GRUB legacy altera os passos pós-instalação.
  5. Verifique pacotes retidos ou fixados: No Debian/Ubuntu, execute apt-mark showhold. No RHEL/CentOS, verifique /etc/yum.conf para exclude=kernel*.
  6. Tenha acesso à consola pronto. Se o novo kernel falhar ao arrancar, o SSH ficará indisponível. Certifique-se de que tem acesso fora de banda (VNC, IPMI ou a consola de emergência do seu fornecedor) antes de reiniciar.

Atualizar o Kernel no Ubuntu e Debian

O Ubuntu e o Debian utilizam o gestor de pacotes APT e distribuem imagens do kernel como pacotes padrão sob a convenção de nomenclatura linux-image-*. O kernel, os seus módulos e o initramfs são todos geridos através deste sistema, tornando as atualizações relativamente simples — mas existem nuances importantes.

Passo 1: Sincronizar Repositórios de Pacotes

sudo apt update

Isto atualiza o índice de pacotes local em relação a todos os repositórios configurados. Não ignore este passo — executar apt upgrade sem um apt update prévio pode instalar versões desatualizadas dos pacotes.

Passo 2: Aplicar Atualização Completa do Sistema

sudo apt upgrade

Isto atualiza os pacotes instalados, mas não instalará um novo kernel se isso requerer a remoção de pacotes existentes. Para transições de kernel (por exemplo, de 5.15 para 6.1), utilize:

sudo apt full-upgrade

O comando mais antigo dist-upgrade é funcionalmente equivalente a full-upgrade e continua disponível, mas full-upgrade é a forma canónica atual.

Passo 3: Instalar o Metapacote do Kernel

sudo apt install linux-image-generic linux-headers-generic

O metapacote (linux-image-generic) acompanha sempre o kernel mais recente recomendado para a sua arquitetura. Instalá-lo explicitamente garante que o gestor de pacotes sabe que pretende atualizações do kernel no futuro. O pacote linux-headers-generic é necessário se compilar módulos externos do kernel (por exemplo, drivers geridos por DKMS como ZFS ou drivers GPU proprietários).

Para sistemas Ubuntu, também pode instalar kernels HWE (Hardware Enablement), que retroportam kernels mais recentes para versões LTS:

sudo apt install linux-generic-hwe-22.04

Passo 4: Verificar se o Novo Kernel Está Preparado

dpkg --list | grep linux-image

Deverá ver a nova versão do kernel listada com o estado ii (instalado). O kernel antigo permanece instalado como alternativa — isto é intencional.

Passo 5: Reiniciar e Confirmar

sudo reboot

Após reconectar:

uname -r

Confirme que a saída reflete a nova versão do kernel.

Limpar Kernels Antigos no Debian/Ubuntu

Kernels antigos acumulam-se em /boot e consomem espaço em disco. Remova-os com segurança com:

sudo apt autoremove --purge

O APT identifica automaticamente os pacotes de kernel substituídos e remove-os, mas apenas se não forem o kernel em execução atual ou o fallback mais recente.

Armadilha crítica: Nunca remova manualmente o pacote do kernel em execução atual. Reinicie sempre para o novo kernel primeiro e depois execute autoremove.

Atualizar o Kernel no CentOS e RHEL

O CentOS e o RHEL utilizam gestão de pacotes baseada em RPM — seja yum (CentOS 7, RHEL 7) ou dnf (CentOS 8+, RHEL 8+, AlmaLinux, Rocky Linux). O processo de atualização do kernel difere dos sistemas baseados em Debian num aspeto importante: os sistemas RPM mantêm múltiplas versões do kernel instaladas simultaneamente por padrão, controlado pela diretiva installonly_limit em /etc/yum.conf ou /etc/dnf/dnf.conf.

Passo 1: Atualizar Todos os Pacotes Incluindo o Kernel

# CentOS 7 / RHEL 7
sudo yum update

# CentOS 8+ / RHEL 8+ / AlmaLinux / Rocky Linux
sudo dnf update

Este único comando trata da atualização do kernel na maioria dos casos. Ao contrário do Debian, não existe um equivalente separado de dist-upgradeyum update / dnf update trata automaticamente da resolução de dependências para transições de kernel.

Passo 2: Instalar uma Versão Específica do Kernel (Opcional)

Se precisar de uma versão específica do kernel em vez da mais recente disponível:

sudo yum install kernel-<version>
# Example:
sudo yum install kernel-5.14.0-284.30.1.el9_2

Passo 3: Regenerar a Configuração do GRUB2

Em sistemas RHEL/CentOS, a configuração do bootloader deve ser explicitamente regenerada para incluir a nova entrada do kernel. O comando correto depende de se o seu sistema utiliza BIOS ou UEFI:

Sistemas baseados em BIOS:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

Sistemas baseados em UEFI:

sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
# or for CentOS/AlmaLinux/Rocky:
sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

Importante: No RHEL 8+ e derivados, o passo grub2-mkconfig é frequentemente tratado automaticamente pelos scriptlets do pacote kernel-core via grubby. Pode verificar a entrada de arranque padrão com:

sudo grubby --default-kernel

Para definir manualmente o kernel padrão:

sudo grubby --set-default /boot/vmlinuz-<new-version>

Passo 4: Reiniciar e Verificar

sudo reboot
uname -r

Gerir a Retenção de Kernels no RHEL/CentOS

Por padrão, installonly_limit=3 em /etc/dnf/dnf.conf mantém os três kernels mais recentes. Ajuste este valor se o espaço em disco em /boot for limitado:

sudo sed -i 's/installonly_limit=3/installonly_limit=2/' /etc/dnf/dnf.conf

Para listar todos os kernels instalados:

rpm -q kernel

Atualizar o Kernel no Arch Linux

O Arch Linux segue um modelo de lançamento contínuo, o que significa que o kernel é atualizado continuamente à medida que novas versões upstream são lançadas. Não existem versões discretas — o sistema está sempre a avançar para o kernel estável mais recente. Isto torna o Arch ideal para programadores que precisam de funcionalidades de kernel de ponta, mas requer uma manutenção mais atenta.

Passo 1: Sincronização Completa do Sistema e Atualização

sudo pacman -Syu

O sinalizador -S sincroniza os pacotes, -y atualiza a base de dados e -u atualiza todos os pacotes instalados. No Arch, deve sempre realizar uma atualização completa do sistema em vez de atualizar pacotes individuais isoladamente — atualizações parciais são explicitamente não suportadas e podem causar quebras de dependências de bibliotecas.

Passo 2: Instalar ou Reinstalar o Pacote do Kernel

Se o kernel não foi atualizado por pacman -Syu (por exemplo, está a mudar de variantes de kernel), instale-o explicitamente:

sudo pacman -S linux linux-headers

O Arch Linux oferece múltiplas variantes oficiais de kernel:

Pacote do KernelDescrição
linuxKernel estável, versão upstream mais recente
linux-ltsKernel de suporte a longo prazo, atualizações conservadoras
linux-hardenedKernel com reforço de segurança com patches adicionais
linux-zenOtimizado para cargas de trabalho de desktop/interativas

Para ambientes de servidor, linux-lts é geralmente preferível — fornece um ABI estável para módulos DKMS e reduz a frequência de reinicializações necessárias pelas atualizações do kernel.

Passo 3: Regenerar o initramfs

sudo mkinitcpio -p linux

Isto regenera o sistema de ficheiros RAM inicial usando o preset definido em /etc/mkinitcpio.d/linux.preset. O initramfs contém o ambiente mínimo necessário para montar o sistema de ficheiros raiz antes de o SO completo assumir o controlo. Ignorar este passo após uma atualização do kernel pode resultar num sistema que falha ao arrancar se o sistema de ficheiros raiz requerer um módulo (por exemplo, ext4, btrfs, ou um volume encriptado via dm-crypt).

Se instalou linux-lts, utilize o preset correspondente:

sudo mkinitcpio -p linux-lts

Passo 4: Atualizar a Configuração do Bootloader GRUB

sudo grub-mkconfig -o /boot/grub/grub.cfg

Note que no Arch, o comando é grub-mkconfig (sem o sufixo 2), ao contrário do RHEL/CentOS. Se utilizar systemd-boot em vez de GRUB (comum em instalações Arch com UEFI), atualize a entrada de arranque manualmente ou execute:

sudo bootctl update

Passo 5: Reiniciar

sudo reboot
uname -r

Comparação de Distribuições: Mecanismos de Atualização do Kernel

FuncionalidadeUbuntu/DebianCentOS/RHELArch Linux
Gestor de pacotesAPT (apt)YUM / DNFPacman
Modelo de lançamentoLançamentos fixos (LTS/padrão)Lançamentos fixos (versões principais)Lançamento contínuo
Metapacote do kernellinux-image-generickernellinux, linux-lts
Atualização do bootloader necessáriaAutomática (via scripts postinst)Manual (grub2-mkconfig ou grubby)Manual (grub-mkconfig)
Regeneração do initramfsAutomática (update-initramfs)Automática (via dracut)Manual (mkinitcpio)
Múltiplos kernels retidosSim (autoremove limpa os antigos)Sim (controlado por installonly_limit)Sim (todas as variantes instaladas são mantidas)
Opção de kernel LTSSim (stack HWE)Sim (canais EUS no RHEL)Sim (pacote linux-lts)
Mecanismo de reversãoMenu GRUB no arranqueMenu GRUB no arranqueMenu GRUB no arranque

Reversão do Kernel: O Que Fazer Quando um Novo Kernel Quebra o Seu Sistema

Uma atualização do kernel que causa falhas de arranque ou incompatibilidade de hardware é um risco operacional real. Aqui está o procedimento de recuperação:

Passo 1: Aceda ao menu GRUB no arranque. Se o GRUB estiver oculto (comum em ambientes VPS), mantenha premido ou pressione repetidamente Shift (BIOS) ou Esc (UEFI) durante o arranque, ou configure GRUB_TIMEOUT em /etc/default/grub para um valor diferente de zero antes de atualizar.

Passo 2: Selecione “Opções avançadas” e escolha a versão anterior do kernel da lista.

Passo 3: Após arrancar no kernel funcional, ou:

  • Fixe o kernel funcional para evitar a sua remoção (Debian/Ubuntu: sudo apt-mark hold linux-image-<version>)
  • Defina-o como a entrada de arranque padrão (RHEL: sudo grubby --set-default /boot/vmlinuz-<version>)
  • Remova o kernel problemático (Arch: sudo pacman -R linux seguido de reinstalar a variante LTS)

Passo 4: Submeta um relatório de bug à equipa do kernel da sua distribuição ou verifique os rastreadores de bugs do kernel upstream antes de tentar novamente a atualização.

Atualizações do Kernel em Ambientes Contentorizados e Virtualizados

Num ambiente de VPS Hosting, o processo de atualização do kernel tem uma consideração adicional: está a atualizar o kernel convidado, não o kernel do hipervisor anfitrião. Isto é padrão e esperado — o SO convidado executa o seu próprio kernel num contexto paravirtualizado ou totalmente virtualizado.

No entanto, em plataformas VPS baseadas em contentores (OpenVZ, LXC sem espaço de nomes do kernel), o convidado pode partilhar o kernel do anfitrião. Nestes casos, uname -r reflete a versão do kernel do anfitrião, e tentar instalar um novo pacote de kernel dentro do contentor não alterará o kernel em execução — embora a instalação do pacote em si seja inofensiva.

Em infraestrutura VPS baseada em KVM (que é o padrão para fornecedores modernos), tem controlo total do kernel. Certifique-se de que o seu kernel atualizado inclui os drivers virtio compilados ou disponíveis como módulos — especificamente virtio_net, virtio_blk e virtio_scsi — para manter a conectividade de rede e armazenamento após o reinício.

Para cargas de trabalho que requerem máximo desempenho de I/O bruto — como servidores de base de dados ou pipelines de inferência ML — considere combinar atualizações do kernel com um ambiente de Servidores Dedicados onde tem controlo total do hardware e sem sobrecarga do hipervisor.

Avançado: Instalar Kernels Mainline ou Personalizados

Para utilizadores que precisam de funcionalidades do kernel ainda não retroportadas para o kernel estável da sua distribuição, os kernels mainline podem ser instalados a partir do código-fonte ou através de ferramentas específicas da distribuição.

Instalador de Kernel Mainline do Ubuntu:

# Using the mainline tool (third-party PPA)
sudo add-apt-repository ppa:cappelikan/ppa
sudo apt update
sudo apt install mainline
mainline install-latest

Compilar a partir do código-fonte (todas as distribuições):

# Download from kernel.org
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.x.y.tar.xz
tar -xf linux-6.x.y.tar.xz
cd linux-6.x.y
cp /boot/config-$(uname -r) .config
make olddefconfig
make -j$(nproc)
sudo make modules_install
sudo make install

Compilar a partir do código-fonte dá-lhe controlo preciso sobre a configuração do kernel — ativando ou desativando subsistemas específicos, aplicando patches personalizados ou ativando funcionalidades experimentais. Isto é particularmente relevante para cargas de trabalho de GPU Hosting onde parâmetros personalizados do kernel para compatibilidade de drivers NVIDIA ou configuração IOMMU podem ser necessários.

Automatizar Atualizações do Kernel com Segurança

As atualizações automáticas do kernel são uma capacidade de dois gumes. Reduzem a janela de exposição a CVEs conhecidos, mas introduzem o risco de um reinício automático para um estado de kernel quebrado.

Ubuntu/Debian — unattended-upgrades:

sudo apt install unattended-upgrades
sudo dpkg-reconfigure unattended-upgrades

Edite /etc/apt/apt.conf.d/50unattended-upgrades para incluir ou excluir pacotes do kernel:

Unattended-Upgrade::Package-Blacklist {
    // "linux-image";  // Uncomment to exclude kernel updates
};

RHEL/CentOS — dnf-automatic:

sudo dnf install dnf-automatic
sudo systemctl enable --now dnf-automatic.timer

Configure /etc/dnf/automatic.conf para definir apply_updates = yes apenas após validar a sua estratégia de reversão.

Melhor prática para produção: Aplique atualizações de segurança do kernel automaticamente, mas controle os reinícios através de uma janela de manutenção usando ferramentas como needrestart ou kured (Kubernetes Reboot Daemon para cargas de trabalho contentorizadas).

Matriz de Decisão e Principais Conclusões

Utilize esta lista de verificação antes e depois de cada atualização do kernel:

  • Snapshot ou backup concluído antes de começar
  • Versão atual do kernel documentada (uname -r)
  • A partição /boot tem espaço livre suficiente (df -h /boot)
  • Acesso à consola/fora de banda confirmado e testado
  • Tempo limite do GRUB definido para um valor diferente de zero para permitir arranque de recuperação
  • Novo kernel instalado e verificado no gestor de pacotes
  • initramfs regenerado (crítico no Arch; verificar em todas as distribuições)
  • Configuração do GRUB regenerada onde necessário (RHEL, Arch)
  • Sistema reiniciado e nova versão do kernel confirmada (uname -r)
  • Pacotes de kernel antigos limpos após confirmar estabilidade
  • Versão do kernel documentada no registo de alterações ou sistema de monitorização
  • Para módulos DKMS (ZFS, drivers proprietários): módulos reconstruídos e verificados

Quando usar kernels LTS vs. estável mais recente:

  • Servidores de base de dados de produção, servidores web, infraestrutura de email: Use kernels LTS. A estabilidade e um ABI previsível para módulos do kernel superam o acesso às funcionalidades mais recentes. Se executar stacks de Email Hosting ou Shared Web Hosting, LTS é a escolha correta.
  • Ambientes de desenvolvimento, nós de computação GPU, redes de borda: Use o kernel estável mais recente para aceder a novas capacidades eBPF, algoritmos de agendador atualizados e suporte de hardware atual.
  • Ambientes críticos de segurança: Considere linux-hardened (Arch) ou RHEL com patching ao vivo do kernel (kpatch) para aplicar correções de CVE sem reiniciar.

Para ambientes onde a terminação SSL/TLS e a gestão de certificados fazem parte da stack, tenha em mente que o suporte a TLS ao nível do kernel (ktls) — disponível em kernels 4.13+ — pode descarregar a encriptação de registos TLS para o kernel, reduzindo a sobrecarga de CPU. Combine isto com Certificados SSL devidamente geridos para uma postura de segurança completa.

FAQ

P: A atualização do kernel irá quebrar as minhas aplicações em execução?

R: A atualização do kernel em si não afeta os processos em execução — eles continuam a usar o kernel antigo até ao reinício. Após reiniciar para o novo kernel, as aplicações que dependem de módulos do kernel compilados contra a versão antiga (por exemplo, módulos DKMS como ZFS ou VirtualBox) podem falhar ao carregar. Verifique sempre o estado dos módulos DKMS com dkms status antes de reiniciar.

P: Como verifico qual versão do kernel está disponível antes de a instalar?

R: No Debian/Ubuntu: apt-cache show linux-image-generic | grep Version. No RHEL/CentOS: dnf info kernel. No Arch: pacman -Si linux | grep Version. Isto permite-lhe avaliar a atualização antes de confirmar.

P: Posso atualizar o kernel num VPS sem acesso à consola?

R: Tecnicamente sim, mas é fortemente desaconselhável. Se o novo kernel falhar ao arrancar, perderá o acesso SSH sem qualquer caminho de recuperação. Confirme sempre que o seu fornecedor de VPS oferece uma consola de emergência (VNC ou série) antes de realizar atualizações do kernel remotamente.

P: Qual é a diferença entre apt upgrade e apt full-upgrade para atualizações do kernel?

R: apt upgrade não instalará um novo kernel se isso requerer a remoção de qualquer pacote atualmente instalado. apt full-upgrade (anteriormente dist-upgrade) resolve estes conflitos permitindo a remoção de pacotes conforme necessário — isto é tipicamente necessário ao transitar entre versões principais do kernel no Debian/Ubuntu.

P: Como evito que uma versão específica do kernel seja atualizada automaticamente?

R: No Debian/Ubuntu, use sudo apt-mark hold linux-image-<version>. No RHEL/CentOS, adicione exclude=kernel-<version> a /etc/dnf/dnf.conf ou use dnf versionlock add kernel-<version> após instalar o pacote python3-dnf-plugin-versionlock. No Arch, adicione o pacote a IgnorePkg em /etc/pacman.conf.

15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar