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-mkconfigapó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
- Log do Sistema - journalctl e rsyslog
- Prioridades de Processo: Como nice e renice Funcionam
- Fundamentos da Linha de Comando