Arranque e encerramento do linux

Quando um computador (PC) arranca, a BIOS procura no hardware existente, dispositivos de onde pode carregar o sistema operativo. Após identificar a dispositivo de arranque, carrega o loader, que é o programa encarregue de carregar o sistema operativo própriamente dito. Os loaders (ou bootstrap programs) mais comuns no LINUX são o LILO, o GRUB, podendo no entanto ser utilizado o loader do DOS e na linha de comando iniciar o LINUX com a aplicação LOADLIN seguido do ficheiro de kernel que deve estar guardado na partição do DOS.

Init

Após o arranque do kernel, este inicia os dispositivos de hardware, e seguidamente inicia o processo swapper (0) e o init (1). O swapper é na verdade uma parte do kernel e não um processo "normal", o init é o pai de todos os processos que vão executar numa máquina LINUX.

É possível a partir da linha de comando ter acesso a todas as mensagens que o arranque da máquina gerou, através do comando dmesg.

Após o arranque do kernel o init é que é responsável pelo resto do arranque da máquina, lendo do ficheiro /etc/inittab a configuração da máquina.

É também o init que é responsável por por a máquina num de vários níveis de execução, inclusive o nível de encerramento (shutdown). A tabela que se segue apresenta os vários níveis, estando uma máquina LINUX num determinado momento num destes níveis:

Nível (Run Level) Significado
0

Parar a máquina

1 Modo de "single user". Todos os filesystems são montados, e só um pequeno número de processos do kernel estão em execução. Só o root pode faser login
2 Modo de "milti-user" sem partilha de ficheiros remotos
3 Modo de "milti-user" com partilha de ficheiros remotos, processos e deamons
4 Estado definível pelo utilizador
5 Estado usado para arrancar o X11
6 Encerramento, e Reinicialização (Shutdown e reboot)
a b c Níveis (on-demand)
S ou S O mesmo que o modo de "single user" mas somente é utilizado pelos scripts

Quando uma máquina LINUX arranca, analisa o ficheiro /etc/inittab à procura de uma entrada initdefault, que contém o nível inicial do sistema. É possivel utilizar o comando init, seguido de um nível, para alterar o estado da máquina ex. init estado os estados podem ser:

/etc/inittab

O inittab é o ficheiro de configuração do init e é um ficheiro de texto com 4 campos por linha, separados por :, podendo ter comentários começados por #

O significados dos quatro campos é o seguinte

Acção Significado
respawn

Reiniciar o processo quando ele acaba

wait o init executa o processo uma vez e espera que ele acabe para continuar para a próxima entrada
once o init executa o processo uma vez quando entra nesse nível
boot executa o processo no arranque (ignora o campo nível)
bootwait combinação de boot com wait
off não faz nada
initdefault indica o nível de arranque
sysinit executa o processo durante o arranque antes de qualquer entrada boot ou bootwait
powerwait é executado quando o init recebe um sinal SIGPWR que indica um problema com a energia eléctrica, e espera que o comando seja executado
ondemand executa sempre que um nível "on demand" (a b c) é chamado. Estes níveis NÃO alteram o nível corrente
powerfail o mesmo que powerwait, mas não espera que o comando acabe
ctrlaltdel executado quando o init recebe um sinal SIGINT (normalmente quando alguém carrega em CTRL-ALT-DEL)

A seguir é apresentado um exemplo de um ficheiro /etc/inittab

Ficheiro original (inittab)

Scripts de Arranque

Os sistemas com ficheiros de arranque do tipo System V utilizam o script rc, que está encarregue de executar todos os scripts necessários ao fim de um nível e início de outro. A tabela seguinte apresenta uma breve descrição de quais são estes scripts existentes no directório /etc/rc.d:

Nome Significado
rc0.d a rc6.d

Directórios que contém links para os scripts que são executados num determinado nível. Os scripts devem ter o nome [S|K]xxNome sendo que:

  • S indica que o script é executado com o argumento start

  • K que o script é executado com o argumento stop.

  • xx é o número de ordem de execução do script

  • Nome é o nome do serviço

rc Script ao qual é passado o nível e que executa os scripts existentes nó directório desse nível
init.d Directório onde estão os scripts propriamente ditos. Estes scripts aceitam o parâmetro START ou STOP
rc.sysinit Script executado no arranque do sistema
rc.local Último script a ser executado, serve para tarefas que não constam de nenhum dos scripts normais de arranque (ex. apagar ficheiros do directório /tmp)
rc.serial Nem sempre existe, e destina-se a configurar as portas séries da máquina

 A seguir é apresentado um exemplo de directório rc4.d:

Ficheiro original (rc4.d)

 A seguir é apresentado um exemplo de script para arrancar um serviço

Ficheiro original (servico.sh)

Ultima alteração: às