Como um Debian é inicializado

Autor: Airton Arantes <airton.arantes at gmail.com>

Visão geral do processo de inicialização

Acionamos o POWER do computador, então este passa por vários processos
de inicialização até nos oferecer um sistema operacional. Esses
processos são feitos por estágio:

  1. BIOS
  2. Boot Loader
  3. Sistema Debian

Vamos abordar cada um desses estágios de inicialização.

1. BIOS

Esse é ponto de partida, localizado na ROM, onde é
executado no momento em pressionamos o botão power. Seu papel é fazer
uma inicialização básica do hardware através do POST, que é responsável
pela aquela tela que nós conhecemos ao ligar o computador, que
dependendo da marca pode variar de um computador para o outro, exemplo:
DELL, VAIO, APPLE. Lá nós podemos ver no cantinho da tela alguns
atalhos como F1 – faz função X, F2 – faz função Y, Del – faz função Z e
assim por diante. Tudo isso varia de fabricante para fabricante.
Escolhemos nosso boot padrão no BIOS, que vai ler os primeiros setores
do disco (MBR). Após isso é chamado um Boot Loader, localizado na MBR.

Boot Loader

Esse é o nosso segundo estágio, que é inicializado
pelo BIOS, como o próprio nome Boot Loader já diz, esse é o responsável
por carregar o kernel do sistema e a imagem initrd (initial ram disk)
para a nossa memória. O initrd é um sistema de arquivos temporário
(obs.: em versões do Linux
2.6 em diante é tecnicamente chamado de initramfs (initial RAM
filesystem), tipicamente usado antes do sistema raiz real ser montado
pelo sistema.

O padrão do Debian é um boot loader muito conhecido por todos:
GRUB. Nada impede de você escolher outros Boot Loaders, como por
exemplo o Lilo, LoadLin, Isolinux.

No Debian você pode editar o GRUB através do arquivo /boot/grub/menu.lst como root. Não vou abordar aqui as configurações do GRUB, pois vai fugir um pouco do nosso assunto.

Sistema Debian

Estamos no terceiro estágio do nosso processo de
boot, esse estágio é inicializado pelo Boot Loader. Aqui é onde o
famoso script chamado init é executado, ele sempre tem PID 1, pois é o primeiro processo executado pelo sistema. Verifique isso com o comando:

$ pidof init

Esse script é quem vai fazer o trabalho de inicialização daqui pra
frente. O init é quem vai inicializar o kernel em nível de usuário e
tomar o controle dos próximos estágios, conhecidos como runlevels.
Basicamente o init faz o seguinte:

1. Entra no runlevel N para inicializar o sistema conforme descrito no arquivo /etc/inittab.

2. Entra no runlevel S inicializando o sistema no modo monousuário afim de completar a inicialização completa do hardware.

3. Entra em um dos runlevels multiusuários (2 ao 5) afim de inicializar serviços do sistema.

Você pode dizer ao sistema em qual runlevel o init deve parar.
Faça isso usando a diretiva init=runlevel no parâmetro do kernel que é
listado no boot loader ou você pode editar o arquivo /etc/inittab
diretamente, modificando a linha "initdeafult" para o runlevel de sua
preferência. O padrão do Debian é o runlevel 2.

Runlevels

Cada runlevel tem seu diretório, veja essa listagem:

Nível – N
Diretório – Nenhum
Descrição – Inicialização do sistema

Nível – 0
Diretório -/etc/rc0.d/
Descrição – Finalização do sistema

Nível – S
Diretório – /etc/rcS.d/
Descrição – Monousuário na inicialização do sistema

Nível – 1
Diretório – /etc/rc1.d/
Modo monousuário trocado a partir de um modo multiusuário

Nível – 2 até o 5
Diretório – /etc/rc[2 ao 5].d/
Descrição – Modo multiusuário

Nível – 6
Diretório – /etc/rc6.d/
Descrição – Reinicialização

Nível – 7 ao 9
Diretório – /etc/rc[7 ao 9].d/
Descrição – Nível multiusuário, mas normalmente não é usado

Os mais importantes são os runlevels do 0 ao 6.

Você pode verificar em qual runlevel seu sistema está executando o comando:

$ runlevel

E pode entrar em algum runlevel com o comando:

telinit <NÚMERO DO RUNLEVEL>

Experimente fazer o comando:

# telinit 6

Você verá seu sistema ser reinicializado. Justo, pois mandamos o init para o runlevel de reinicialização.

Certo, mas o que tem dentro desses diretórios "/etc/rc<do 0
ao 6>.d"? Eles contém links simbólicos para arquivos que estão
localizados em /etc/init.d

Vamos ver um exemplo do conteúdo do diretório /etc/rc5.d.

# ls /etc/rc5.d/
README
S16ssh
S20courier-authdaemon
S20courier-pop-ssl
S20postfix
S30squid
S91apache2
S10rsyslog
S17mysql-ndb-mgm
S20courier-imap
S20exim4
S20samba
S40dhcp3-server
S99rc.local
S12acpid
S18mysql-ndb
S20courier-imap-ssl
S20nfs-common
S20snmpd
S89atd
S99rmnologin
S15bind9
S19mysql
S20courier-pop
S20openbsd-inetd
S21fam
S89cron
S99stop-bootlogd

Todos esse arquivos são um link simbólico para /etc/init.d, mas
vamos prestar um pouco mais de atenção nesses arquivos, veja que eles
começam com uma letra S (de Start), o que significa que serão
executados pelo init quando este estiver no 5° nível de execução.

Vamos dar um olhada em um runlevel um pouco mais baixo, como o /etc/rc1.d/:

# ls /etc/rc1.d/
K09apache2
K20courier-authdaemon
K20courier-pop-ssl
K20postfix
K22mysql-ndb
K81portmap
K90rsyslog
K11atd
K20courier-imap
K20exim4
K20snmpd
K23mysql-ndb-mgm
K84ssh
README
K11cron
K20courier-imap-ssl
K20nfs-common
K21fam
K30squid
K85bind9
S30killprocs
K19samba
K20courier-pop
K20openbsd-inetd
K21mysql
K40dhcp3-server
K88acpid
S90single

Opa, aqui já mudou um pouco, a maioria dos links simbólicos
estão começando com a letra K (de kill), ou seja, estes processos serão
eliminados quando o init alcançar o runlevel 1.

Primeiro os links com a letra K são executados e depois os S.
A ordem que os links são executados dependem do valor numérico que
acompanha o link, por exemplo, os seguintes arquivos são executados em
sequência:

S10sysklogd
S12kerneld
S20inetd
S20linuxlogo
S20logoutd
S20lprng
S89cron
S99xdm

E é assim, o init percorre todos os runlevels até o valor
default do init indicado pela linha "initdeafult" no /etc/inittab
executando todos scripts necessários para que você tenha um sistema
completamente carregado.


http://www.vivaolinux.com.br/artigo/Como-um-Debian-e-inicializado

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s