Sistema de boot, níveis de execução e shutdown

Este artigo trata do sistema de boot, níveis de execução e shutdown. Nele você encontrará as seguintes informações: gerenciadores de boot, enviando parâmetros para os módulos do kernel, mensagens de boot, níveis de execução, processo init, reinicialização e desligamento seguro, corrigindo problemas no processo de boot. Espero que ajude a comunidade. Obrigado!

[ Hits: 67.049 ]

Por: Cristian Alexandre Castaldi em 27/06/2006


Visualizando mensagens de boot e entendendo os níveis de execução e o processo init



Durante o processo de boot, mensagens são mostradas no vídeo e salvas no arquivo de log /var/log/dmesg. Para visualizar este arquivo você pode usar o comando dmesg. Observe:

# dmesg

Entendendo os níveis de execução e o processo init


Muitas distribuições Linux usam diferentes tipos de arquivos shell-script para iniciar serviços e processos do sistema. Existem dois tipos de estilos de inicialização para sistemas operacionais Linux/Unix: Sys V init e o BSD init.

O BSD é popular em distribuições como Slackware, FreeBSD e OpenBSD. Com esse tipo de estilo de inicialização o processo init usa o arquivo /etc/rc para inicializar vários arquivos shell-scripts para configurar o sistema. O Linux Slackware utiliza um estilo de inicialização modificado, no qual existe um arquivo /etc/inittab no lugar de /etc/rc e aceita níveis de execução.

O Sys V init é utilizado na maioria das distribuições Linux, pois ele dispõe de um maior número de recursos e de uma maior flexibilidade do que o BSD init. Para não entrar em muitos detalhes adianto que os tópicos a seguir são todos oriundos do estilo de inicialização Sys V init e por isso eles esclarecerão a maior parte das duvidas que venham a aparecer.

O processo de boot no Linux é bem customizável, porém pode ser diferente entre as distribuições nos detalhes. Para entender o processo de boot e como localizar e reparar falhas no hardware é necessário se familiarizar com o conceito de níveis de execução ou runlevels.

Níveis de execução ou runlevels são processos executados em uma ordem programada durante o processo de boot. Os níveis de execução determinam quais serviços serão executados durante a carga do sistema operacional.

No Linux existem sete níveis de execução predefinidos, numerados de 0 a 6, porém o que cada um executará dependerá da distribuição usada e da configuração que o administrador do sistema efetuou. Para sabermos qual nível de execução a nossa distribuição do Linux está usando digite:

# runlevel
N 3

A tabela abaixo descreve os níveis de execução, observe:

0 Desliga o sistema.
1,s, single É utilizado para manutenção do sistema, é chamado de monousuário e somente o essencial é executado.
2 Modo multiusuário sem suporte de rede.
3 Nível de execução padrão, multiusuário com todos os serviços habilitados e login do sistema em modo texto.
4 Indefinido ou não utilizado.
5 Nível de execução padrão, multiusuário com todos os serviços habilitados e login do sistema em modo gráfico.
6 Executa o reboot do sistema.


Alterando os níveis de execução


Para mudar os níveis de execução do sistema podemos usar dois comandos: init ou telinit.

# init 1
Ou
# telinit 1

O comando telinit é atualmente um link para o comando /sbin/init para prover compatibilidade com outros sistemas Unix.

Definindo quais processos serão executados por cada nível de execução


Até agora vimos que o comando init é responsável pela alteração dos processos em execução dentro de um nível de execução, porém quais processos serão executados por cada nível de execução é feita pela hierarquia de diretórios /etc/rc.d e scripts de shell.

Configurando o processo init


Depois que o gerenciador de boot é startado, o kernel do Linux executa o primeiro processo que é o init. O init sempre será o processo de ID 1. Todos os outros processos serão processos filhos do init. Observe:

# ps x
  PID TTY      STAT   TIME 	COMMAND
    1 	?        S      	0:07 	init [3] 
    2 	?        SW     	0:00 	[keventd]
    3 	?        SWN    	0:00 	[ksoftirqd_CPU0]
Use também os comandos:

# pgrep init

Para visualizar a árvore de processos:

# pstree

Quando o init é executado ele lê as configurações contidas no arquivo /etc/inittab. Uma delas define qual é o nível de execução que o sistema assumirá durante o processo de boot. No arquivo /etc/inittab procure a seguinte linha:

id:3:initdefault:

A sintaxe da linha é a seguinte:

id:nível de execução:ação:processo
  • id - É uma seqüência de 1 a 4 caracteres que identificam a entrada no inittab.
  • nível de execução - Defini o nível de execução padrão.
  • ação - Específica à ação que o init irá aplicar. Para ter uma idéia das ações possíveis no prompt digite man inittab. processo - Específica o processo que será executado.

Entendendo os scripts de inicialização


Os scripts de inicialização estão armazenados no diretório /etc/init.d e seus links são criados em /etc/rc?.d, onde o ? representa o nível de execução de 0 a 6 comentado anteriormente. Os links que se encontram nos diretórios /etc/rc?.d estão no seguinte formato:

SNNnome ou KNNnome

Onde S define que o script será carregado, K define que o scripts será terminado, NN representa o número que define a ordem começando do menor para o maior e o nome define o nome do script. Observe o exemplo:

# ls -l rc3.d/
lrwxrwxrwx    1 root     root           13 May 10  2005 S20ssh -> ../init.d/ssh

Observe que quando o sistema é iniciado no nível de execução 3 o link S20ssh starta o script do serviço SSH que está no /init.d/ssh onde:
  • S - Inicia o script;
  • 20 - Número que defini a ordem de execução;
  • ssh - O nome do script.

Para incluir um determinado serviço em algum nível de execução é necessário que o script de execução seja copiado para o diretório /etc/init.d e depois criar um link simbólico para o script.

# cp /debian/scripts/quotas /etc/init.d/
# ln -s /etc/init.d/quotas /etc/rc3.d/S90quotas


Para carregar ou terminar um processo em qualquer nível de execução, renomeie o link referente ao serviço nos diretórios /etc/rc?.d.

# mv S20exim K20exim

Todos os scripts localizados no diretório /etc/init.d suportam argumentos que podem ser usados para iniciar, parar e reiniciar os serviços. Veja o exemplo:

# ./lpd stop
Stopping printer spooler: lpd.

Para saber quais argumentos o script pode aceitar digite --help.

# ./lpd --help
Usage: /etc/init.d/lpd {start|stop|restart|force-reload}

Gerenciando scripts de inicialização com update-rc.d


O update-rc.d é uma ferramenta de gerenciamento de scripts, com ele podemos remover ou adicionar todos os links de um script a partir do diretório /etc/init.d. Para remover todos os links de um script faça:

# update-rc.d -f exim remove
update-rc.d: /etc/init.d/exim exists during rc.d purge (continuing)
Removing any system startup links for /etc/init.d/exim ...
   /etc/rc0.d/K20exim
   /etc/rc1.d/K20exim
   /etc/rc2.d/S20exim
   /etc/rc3.d/K20exim
   /etc/rc4.d/S20exim
   /etc/rc5.d/S20exim
   /etc/rc6.d/K20exim

Para reconfigurar um script ou se incluir um novo script no /etc/init.d e quer iniciá-lo faça:

# update-rc.d nome start NN runlevel .
  • nome - nome do script em /etc/init.d
  • start - executa o script.
  • NN - número que determina quando o script deve ser executado ou finalizado.
  • runlevel - define em qual nível de execução o script deve ser carregado ou terminado.
  • . - separa as configurações.

Observe:

# update-rc.d exim start 20 4 . start 20 5 . stop 20 0 . stop 20 6 .
Adding system startup for /etc/init.d/exim ...
   /etc/rc0.d/K20exim -> ../init.d/exim
   /etc/rc6.d/K20exim -> ../init.d/exim
   /etc/rc4.d/S20exim -> ../init.d/exim
   /etc/rc5.d/S20exim -> ../init.d/exim

Para facilitar mais ainda o gerenciamento, podemos usar o update-rc.d com as configurações padrão. Ou seja, iniciar nos níveis de execução 2, 3, 4 e 5 e finalizar nos 0, 1 e 6:

# update-rc.d exim defaults
Adding system startup for /etc/init.d/exim ...
   /etc/rc0.d/K20exim -> ../init.d/exim
   /etc/rc1.d/K20exim -> ../init.d/exim
   /etc/rc6.d/K20exim -> ../init.d/exim
   /etc/rc2.d/S20exim -> ../init.d/exim
   /etc/rc3.d/S20exim -> ../init.d/exim
   /etc/rc4.d/S20exim -> ../init.d/exim
   /etc/rc5.d/S20exim -> ../init.d/exim

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Gerenciadores de Boot
   3. Enviando parâmetros para os módulos do kernel
   4. Visualizando mensagens de boot e entendendo os níveis de execução e o processo init
   5. Reinicialização e desligamento seguro do sistema
   6. Corrigindo problemas no processo de boot
   7. Bibliografia
Outros artigos deste autor

Instalando e configurando o servidor Samba

Usando partições e sistemas de arquivos

Lynis: Sistema de auditoria e segurança para Linux

Criando, monitorando e terminando processos

Trabalhando com shell e variáveis de ambiente

Leitura recomendada

Configurando vídeo no Linux usando frame buffer

Sabayon Linux: Migrando KDE4 para KDE5

GRUB com imagens aleatórias e KDM com vídeo de fundo

Configurando Wireless-USB Bright-0091

Acertando automaticamente a hora e a data

  
Comentários
[1] Comentário enviado por diegotosco em 27/06/2006 - 22:36h

Muito bom artigo, já é um de meus favoritos. Particulamente, gostei da sessão 4. Também concordo com a inclusão da bibliografia utilizada, é de grande ajuda.

Valew

[2] Comentário enviado por PCMasterPB em 28/06/2006 - 09:08h

Faltou só falar mais sobre o GRUB, mas tirando isto tá muito o artigo, parabéns.

[3] Comentário enviado por thelinux em 28/06/2006 - 13:18h

Parabéns! Bom mesmo. Sucesso a você.

[4] Comentário enviado por math em 28/08/2006 - 08:01h

Parabéns pelo artigo

[5] Comentário enviado por demoreaux em 12/01/2007 - 08:29h

Muito bom o artigo

[6] Comentário enviado por willian.amaral em 08/09/2008 - 08:56h

Olá pessoal,
Sou novo no slack e estou apanhando um pouco..rsrs
Bem ... preciso passar o parametro irqpoll para o módulo do kernel (porque existe conflito de interrupção entre duas placas de rede, 3com e realtek).
Toda vez que ligo o pc preciso passar esse parametro na tela do lilo. Como faço pra isso ficar automaticamente? como escrevo a linha no arquivo modules do etc?
Obriogado.....

[7] Comentário enviado por arjolafe em 11/09/2008 - 17:26h

O artigo despertou o meu interesse. Tenho uma maquina que não da boot pelo pendrive. Gostaria que o autor ou quem possua um, disponibilizasse pelo site uma imagem de um disquete que passe o boot para o pendrive.
Tenho certeza que estaria realizando o sonha de milhares de usuarios como eu.
saudações


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts