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: 70.963 ]

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

Servidor CVS: Instalando, configurando e gerenciando no Linux

Trabalhando com coringas, filtros e expressões regulares no shell

Trabalhando com shell e variáveis de ambiente

Criando, monitorando e terminando processos

Instalando e configurando o servidor Samba

Leitura recomendada

Como selecionar que processos serão iniciados ao boot - sysv-rc-conf

Eclipse integrado com Tomcat 5 no Ubuntu

Configurando o xorgconfig e o inittab para iniciar o Slackware em modo gráfico

Raid 1 em 5 minutos e descanso por 3 meses

Instalação da placa Gigabit 8111/8168B

  
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

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts