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.
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:
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) |
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:
|
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