Inicialização do Sistema e systemd - GRUB, runlevels, systemctl

Inicialização do Sistema e systemd - GRUB, runlevels, systemctl

O Que Você Vai Alcançar

  • Explicar os quatro estágios de boot em ordem (BIOS/UEFI até bootloader até kernel até init/systemd)
  • Alterar as configurações do GRUB2 com segurança através de /etc/default/grub
  • Controlar início, parada e início automático de serviços com systemctl
  • Responder o mapeamento entre boot targets e runlevels do SysVinit
  • Executar um reboot ou shutdown agendado com shutdown
  • Investigar logs de boot com dmesg / journalctl

Este é o núcleo dos objetivos 101.2 "Inicializar o sistema" e 101.3 "Alterar runlevels / boot targets e desligar ou reiniciar o sistema" do LPIC-1. É a base das operações de servidor.

Como o Processo de Boot Procede?

Desde o ligar até um sistema utilizável, o Linux passa por quatro estágios em ordem. Compreender essa estrutura de "revezamento de bastão", onde cada estágio carrega o próximo, permite isolar onde uma falha ocorreu.

Estágio Responsável Função principal
1. Firmware BIOS / UEFI Inicialização de hardware, seleção de disco
2. Bootloader GRUB2 Carregar kernel e initramfs na memória
3. Kernel Linux kernel Detectar hardware, montar o sistema raiz
4. init systemd Iniciar serviços, alcançar um target

O BIOS carrega o bootloader a partir do MBR (os primeiros 512 bytes do disco), enquanto o UEFI carrega o bootloader (*.efi) a partir da EFI System Partition. Em ambos os ambientes, as principais distribuições modernas usam GRUB2 como bootloader e systemd como sistema init.

O initramfs (initial RAM filesystem) que o kernel carrega é um ambiente temporário contendo os drivers necessários para montar o sistema de arquivos raiz. Isso permite montar mesmo quando o root está em um volume criptografado, LVM ou armazenamento especial.

Onde Editar as Configurações do GRUB2?

O comportamento do GRUB2 deve ser alterado editando /etc/default/grub e /etc/grub.d/ e depois regenerando, não editando o grub.cfg gerado. Nunca edite grub.cfg diretamente.

Os principais arquivos do GRUB2 são os seguintes.

Arquivo Função
/boot/grub/grub.cfg (família Debian) Configuração final gerada. Não editar diretamente
/boot/grub2/grub.cfg (família RHEL) O mesmo. O caminho difere por distribuição
/etc/default/grub Fonte de timeout, entrada padrão e parâmetros do kernel
/etc/grub.d/ Scripts que geram entradas de menu

Itens representativos em /etc/default/grub.

GRUB_TIMEOUT=5
GRUB_DEFAULT=0
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

GRUB_TIMEOUT é os segundos de exibição do menu, GRUB_DEFAULT é a entrada selecionada por padrão, e GRUB_CMDLINE_LINUX_DEFAULT são os parâmetros de boot passados ao kernel.

Regenerar grub.cfg

Após editar, regenere grub.cfg para aplicar as alterações. O nome do comando difere por distribuição.

sudo grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-6.1.0-18-amd64
Found initrd image: /boot/initrd.img-6.1.0-18-amd64
done

A família Debian / Ubuntu tem update-grub, que é um wrapper do comando acima. A família RHEL / Fedora usa grub2-mkconfig -o /boot/grub2/grub.cfg.

Distribuição Comando de regeneração Saída
Debian / Ubuntu update-grub ou grub-mkconfig -o ... /boot/grub/grub.cfg
RHEL / Fedora / CentOS grub2-mkconfig -o ... /boot/grub2/grub.cfg

Mesmo que você edite grub.cfg diretamente, ele será sobrescrito e perdido na próxima vez que grub-mkconfig for executado. Para alterações permanentes, sempre edite /etc/default/grub ou /etc/grub.d/ e depois regenere.

Como Operar Serviços com systemctl?

No systemd, systemctl é o centro do controle de serviços. Início, parada, verificação de status e configuração de início automático são todos feitos com este comando.

O que o systemd gerencia é chamado de "unit", e a extensão difere por tipo.

Tipo de unit Extensão Conteúdo
Service .service Daemon / processo
Target .target Um grupo de units (equivalente ao antigo runlevel)
Socket .socket Listener de ativação por socket
Mount .mount Um ponto de montagem de sistema de arquivos

Principais subcomandos do systemctl

systemctl status sshd
systemctl start sshd
systemctl stop sshd
systemctl restart sshd
systemctl enable sshd
systemctl disable sshd
● sshd.service - OpenSSH server daemon
     Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: enabled)
     Active: active (running) since Fri 2026-05-30 09:00:00 JST; 2h ago

A linha Active: do status é o estado de execução atual, e enabled/disabled no final da linha Loaded: é a configuração de início automático. start inicia imediatamente, enquanto enable configura o início automático a partir do próximo boot.

start e enable são diferentes. start inicia imediatamente mas reverte após reboot, enquanto enable configura o início automático mas não inicia agora. Para fazer ambos de uma vez, use systemctl enable --now sshd.

Como os Boot Targets se Mapeiam aos Runlevels?

Um boot target do systemd é o conceito que substituiu os runlevels do SysVinit (0 a 6). A tabela de mapeamento aparece frequentemente no exame.

Runlevel SysVinit Target do systemd Estado
0 poweroff.target Desligar (power off)
1 rescue.target Usuário único (resgate)
2, 3, 4 multi-user.target Multiusuário (CLI)
5 graphical.target Multiusuário com GUI
6 reboot.target Reiniciar

Note que os runlevels 2, 3 e 4 todos mapeiam para multi-user.target. É mais fácil lembrar que boot com GUI é graphical.target (antigo runlevel 5) e boot com CLI é multi-user.target (antigo runlevel 3).

Verificar e alterar o target padrão

systemctl get-default
sudo systemctl set-default multi-user.target
graphical.target
Removed "/etc/systemd/system/default.target".
Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/multi-user.target.

get-default mostra o target no próximo boot, e set-default o altera. default.target é na verdade um link simbólico, e para onde ele aponta se torna o target padrão.

Alternar o target em execução

sudo systemctl isolate multi-user.target
runlevel
N 5

isolate alterna o target atual sem reiniciar (units que não pertencem ao target especificado são paradas). O comando runlevel, compatível com SysVinit, mostra o "runlevel anterior" e o "runlevel atual" (acima, anterior N sem anterior, atual 5).

Como Desligar ou Reiniciar com Segurança?

Desligamento e reinicialização são baseados no comando shutdown. Agendamento e mensagens de aviso mantêm o impacto nos outros usuários baixo.

Agendamento com shutdown

sudo shutdown -h now
sudo shutdown -r +10
sudo shutdown -h 23:30
sudo shutdown -c
Shutdown scheduled for Fri 2026-05-30 23:30:00 JST, use 'shutdown -c' to cancel.

-h desliga (halt/poweroff) e -r reinicia. O horário é dado como now (imediato), +m (m minutos a partir de agora), ou hh:mm (um horário). shutdown -c cancela um desligamento agendado.

Comandos relacionados

Comando Ação
shutdown -h +m Desligar em m minutos (recomendado; avisa todos os usuários)
shutdown -r +m Reiniciar em m minutos
reboot Reiniciar imediatamente (equivalente a systemctl reboot)
poweroff Desligar imediatamente (equivalente a systemctl poweroff)
halt Parar o sistema (pode não desligar a energia)
wall Enviar uma mensagem a todos os usuários logados
echo "Maintenance reboot in 10 minutes" | wall

shutdown envia automaticamente um aviso estilo wall ao agendar. Para enviar um aviso arbitrário manualmente, use wall sozinho.

Onde Procurar Problemas de Boot?

Isole problemas relacionados ao boot a partir de mensagens do kernel e logs de boot. dmesg e journalctl são os dois pilares.

dmesg | less
journalctl -k
journalctl -b
journalctl -b -1
[    0.000000] Linux version 6.1.0-18-amd64 ...
[    1.234567] EXT4-fs (sda1): mounted filesystem ...

dmesg mostra o ring buffer do kernel (detecção de hardware e mensagens de drivers). journalctl -k mostra apenas mensagens do kernel, journalctl -b mostra o boot atual, e journalctl -b -1 mostra os logs do boot anterior. Poder rastrear a causa da falha do boot anterior com -b -1 é uma vantagem do systemd.

systemd-analyze permite analisar o tempo de boot. systemd-analyze blame lista quanto tempo cada serviço levou para iniciar em ordem decrescente, ajudando a identificar causas de lentidão.

Erros Comuns e Correções

Aqui estão pontos que causam problemas tanto na prática quanto no exame.

Erro 1: Inverter o mapeamento runlevel-target

Runlevel 5 é graphical.target (GUI) e runlevel 3 é multi-user.target (CLI). Lembre pela direção: "o número maior 5 é GUI". O ponto de que runlevels 2, 3 e 4 todos se consolidam em multi-user.target também é frequente.

Erro 2: Editar grub.cfg diretamente

Edições diretas em grub.cfg são perdidas na regeneração. O procedimento correto é editar /etc/default/grub e depois aplicar com grub-mkconfig (ou update-grub).

Erro 3: Confundir enable e start

enable configura o início automático e não inicia agora, enquanto start inicia imediatamente e reverte após reboot. Para ambos, use enable --now.

Erro 4: Errar o agendamento do shutdown

shutdown -h +10 significa "em 10 minutos", não "às 10 horas". Para especificar um horário, use a forma shutdown -h 22:00. shutdown sem horário depende do ambiente e pode se comportar como +1 em vez de desligamento imediato, então adicione now explicitamente para imediato.

Erro 5: Confundir set-default e isolate

set-default altera o target padrão para o próximo boot (persistente). isolate alterna agora mas não é persistente. Distinga alterações persistentes das temporárias.

Solução de Problemas

Sintoma: enabled mas o serviço não está rodando após reboot

Causa: Somente enable foi executado e não é wanted-by de um target dependente, ou a configuração está correta e você simplesmente não fez start

Verificação:

systemctl is-enabled sshd
systemctl status sshd

Correção: Se is-enabled mostra enabled, a configuração está correta. Se você também precisa que ele inicie agora, use systemctl enable --now sshd. Se disabled, execute enable novamente.

Sintoma: Inicia na GUI (você quer CLI)

Causa: O target padrão está definido como graphical.target

Verificação:

systemctl get-default

Correção: Defina CLI como padrão com sudo systemctl set-default multi-user.target. Para alternar agora, use também sudo systemctl isolate multi-user.target.

Sintoma: Alterações de parâmetros do kernel não são aplicadas

Causa: Você editou /etc/default/grub apenas e não regenerou grub.cfg

Verificação:

cat /proc/cmdline

Correção: Execute sudo grub-mkconfig -o /boot/grub/grub.cfg (família Debian: update-grub, família RHEL: grub2-mkconfig) e reinicie. Você pode verificar os parâmetros de boot atuais com /proc/cmdline.

Lista de Verificação de Conclusão

  • [ ] Consegue explicar os quatro estágios de boot em ordem
  • [ ] Regenerou com grub-mkconfig após editar /etc/default/grub
  • [ ] Distinguiu início automático e início imediato com systemctl enable --now
  • [ ] Consegue responder a tabela de mapeamento runlevel-target
  • [ ] Executou um reboot agendado com shutdown -r +10
  • [ ] Verificou logs de boot com journalctl -b

Resumo

Cenário Comando Finalidade
Controle de serviço systemctl start/enable --now Iniciar e início automático
Verificação de status systemctl status / is-enabled Verificar execução e autostart
Target padrão systemctl get-default/set-default Estado no próximo boot
Alternância temporária systemctl isolate <target> Alternar sem reiniciar
Configuração GRUB /etc/default/grub depois grub-mkconfig Alterar opções de boot
Desligar / reiniciar shutdown -h/-r Com segurança e agendamento
Investigação de log dmesg / journalctl -b Isolar problemas de boot

Inicialização do sistema e systemd são o ponto de partida de todas as operações de servidor. Combinados com gerenciamento de logs e controle de processos, elevam sua capacidade de isolamento de falhas a outro nível.

Próximas Leituras

Continue Sua Jornada LPIC-1

Hub LPIC-1

  • Hub de Aprendizado LPIC-1 -- Mapa completo de artigos LPIC-1, acompanhamento de progresso e cobertura dos objetivos do exame

Artigos LPIC-1 Relacionados

Prática