Um disco de inicialização é basicamente uma miniatura de um sistema completo, ou seja é um sistema Linux contido em um disquete. Ele deve executar muitas das funções que o sistema completo permite. Antes de tentar construir um, deve-se conhecer os conceitos básicos do processo de inicialização do sistema, apresentados a seguir, os quais são suficientes para o entendimento do restante deste documento. Alguns detalhes e opções foram omitidos por não serem significativos para o conteúdo deste documento.
Todos os sistemas em microcomputadores começam o processo de inicialização executando o código existente na ROM (especificamente no BIOS
), para carregar o setor 0 do cilindro 0 do dispositivo de inicialização. O dispositivo de inicialização
é normalmente a primeira unidade de disquete (denominada A:
no DOS e /dev/fd0 no Linux).
O BIOS tenta então executar este setor. Em muitos discos inicializáveis, o setor 0, cilindro 0, pode conter ainda:
Caso o kernel do Linux tenha sido copiado fisicamente para um disquete, o primeiro setor do disco será o primeiro setor do kernel do Linux. O primeiro setor continuará o processo de inicialização, carregando o restante do kernel contido no dispositivo.
Uma vez que o kernel tenha sido completamente carregado, ele executa alguma inicialização básica de dispositivos. Ele tenta carregar e montar o sistema de arquivos raiz a partir de algum dispositivo. Um sistema de arquivos raiz é simplesmente um sistema de arquivos montado como ``/''. Deve-se indicar para o kernel a localização do sistema de arquivos raiz; caso não seja encontrada uma imagem inicializável naquele local, o sistema é paralisado.
Em algumas situações de início do sistema, freqüentemente na inicialização a partir de disquetes, o sistema de arquivos é montado em um disco em memória , o qual é acessado na memória RAM, como se fosse um disco físico. Há duas razões para o sistema ser carregado em discos em memória. Inicialmente, a memória RAM é muitas vezes mais rápida que um disquete, tornando a operação do sistema mais rápida, e segundo, o kernel do sistema pode ser armazenado como um sistema de arquivos compactados em um disquete, e descompactado no disco em memória, permitindo que muitos mais arquivos sejam armazenados no disquete.
Uma vez que o sistema de arquivos raiz é montado, pode-se visualizar uma mensagem similar a:
VFS: Raiz montado (sistema de arquivos ext2) somente para leitura.
Neste momento o sistema encontra o programa init
no sistema de arquivos raiz (em /bin
ou /sbin
) e executa-o. O init
lê o arquivo de configuração /etc/inittab, procurando por uma linha denominada sysinit
, e executa o programa especificado. O programa sysinit
é normalmente denominado /etc/rc ou /etc/init.d/boot. Este programa é constituído de uma série de comandos do interpretador de comandos que configuram os serviços básicos do sistemas, como por exemplo:
fsck
em todos os discosfstab
.
Este programa normalmente aciona diversos outros, tornando o processo de inicialização modular. Por exemplo, na estrutura comum do SysVinit, o diretório /etc/rc.d/ contém uma estrutura complexa de subdiretórios, cujos arquivos definem como iniciar e desligar a maior parte dos serviços do sistema. De qualquer forma, um programa sysinit em um disco de inicialização é normalmente muito simples.
Quando o programa sysinit termina, o controle retorna ao init
, o qual entrará no nível de execução padrão, especificado em inittab
, através da palavra chave initdefault
. A linha de nível de execução normalmente especifica um programa como getty
, o qual é responsável pelo gerenciamento das comunicações através do console e dos ttys. É o programa getty
que apresenta a expressão familiar ``login:
''. O programa getty
por sua vez, chama o programa login
para administrar o processo de validação e iniciar as sessões dos usuários.
Após a revisão do processo básico de inicialização, podemos agora definir diversos tipos de discos envolvidos. Podemos classificar os discos em quatro tipos. A discussão aqui contida e através de todo o documento do uso do termo disco refere-se a disquetes, a menos que seja especificado o contrário, observando-se que na verdade, o conceito pode ser aplicado sem distinção a discos rígidos.
Um disco contendo um kernel do sistema que pode ser inicializado. O disco pode ser usado para iniciar o kernel do sistema, o qual pode carregar o sistema de arquivos raiz a partir de outro disco. O kernel em um disco de inicialização pode receber informações sobre a localização do sistema de arquivos raiz.
Freqüentemente um disco de inicialização carrega o sistema de arquivos raiz a partir de outro disquete, porém é possível configurar a carga a partir de um sistema de arquivos raiz residente em um disco rígido, por exemplo. Isso é comumente feito quando se está testando um novo kernel (na verdade ``make zdisk
'' criará um disco de inicialização automaticamente a partir dos fontes do kernel).
Um disco com um sistema de arquivos raiz contém os arquivos necessários para a execução de um sistema Linux. Tal disco pode não conter necessariamente nem o kernel e tão pouco o carregador de sistemas disco raiz .
Um disco raiz pode ser usado para executar o sistema independentemente de outros discos, uma vez que o kernel do sistema tenha sido inicializado. Normalmente o disco raiz é automaticamente copiado para um disco em memória, o que torna o acesso às suas informações muito mais rápido e libera a unidade de disquetes para outras atividades.
Um disco pode conter tanto o kernel quanto um sistema de arquivos raiz. Em outras palavras, ele contém todo o necessário para inicializar e executar um sistema Linux, sem a necessidade de um disco rígido. A vantagem desse tipo de disco é que a solução torna-se compacta. Todo o necessário está em um único disco. Por outro lado, o gradual aumento de tamanho dos itens necessários ao processo significa o aumento da dificuldade de colocar-se tudo em um único disquete, mesmo com compactação.
É um disco que contém um sistema de arquivos, mas que não será montado como um sistema raiz. É um disco de dados adicionais, e pode ser utilizado para a disponibilização de utilitários, caso o disco raiz não tenha mais espaço disponível.
Em geral, quando falamos de "construir um disco de inicialização" significa a criação das funções de carga do kernel e do sistema de arquivos raiz. Elas podem estar juntas (em um único disco de inicialização e raiz) ou separados (disco de inicialização e disco raiz). A abordagem mais flexível para discos de emergência é provavelmente usar disquetes separados, e um ou mais disquetes de utilitários para gerenciar o que não foi possível colocar nos primeiros.