Neste ponto, tem-se um kernel e um sistema de arquivos raiz. Caso se esteja construindo um único disco de inicialização e raiz, deve-se verificar o seu tamanho e estar seguro de que eles caberão em um único disco. Caso se esteja construindo dois discos, deve-se verificar se o sistema de arquivos cabe em um único disquete.
Deve-se decidir pelo uso ou não do LILO no disquete de inicialização do kernel. A alternativa será copiar o kernel diretamente no disquete e iniciar o sistema sem o LILO. A vantagem de utilizar o LILO reside na possibilidade de passagens de parâmetros para o kernel, o que pode ser necessário para inicializar algum equipamento (deve-se verificar o conteúdo do arquivo /etc/lilo.conf. Caso exista alguma linha do tipo ``append=...'', provavelmente esta facilidade será necessária). A desvantagem de usar o LILO é que a construção do disco de inicialização torna-se mais complexa e mais espaço é necessário. Deve-se construir um pequeno sistema de arquivos em separado, o qual nós denominamos sistema de arquivos do kernel, para onde se pode transferir o kernel e algumas outras coisas necessárias para o LILO.
Caso se vá utilizar o LILO, siga adiante, caso contrário pode-se ir diretamente para a seção Transferindo o kernel sem o LILO.
O primeiro item que deve ser criado é um pequeno arquivo de configuração do LILO. Ele deve ser similar ao seguinte:
boot =/dev/fd0
install =/boot/boot.b
map =/boot/map
read-write
backup =/dev/null
compact
image = KERNEL
label = Disquete_Inic
root =/dev/fd0
Para obter detalhes destes parâmetros, por favor verifique a documentação de usuário do LILO. Pode ser desejável ainda adicionar a linha append=... copiada do arquivo /etc/lilo.conf existente em disco.
Deve-se salvar o arquivo como bdlilo.conf e a seguir criar um pequeno sistema de arquivos, o qual será denominado
, para distingüí-lo do sistema de arquivos raiz.
Inicialmente, deve-se verificar o tamanho que o sistema de arquivos terá. Verifique o tamanho do kernel em blocos (o tamanho é mostrado através do comando ``ls -l KERNEL'' dividido por 1024 e arredondado para cima) e acrescido de 50, referentes ao espaço necessário aos inodes e outros arquivos. Pode-se calcular o número exato ou simplesmente utilizar 50. Caso se esteja criando um conjunto com dois disquetes, pode-se superestimar o espaço usado pelo kernel. Denominaremos este número de NÚCLEO_BLOCOS.
Deve-se colocar um disquete no dispositivo (para simplificar assumiremos que será em /dev/fd0) e após criar um sistema de arquivos tipo ext2 para o kernel:
mke2fs -i 8192 -m 0 /dev/fd0 NÚCLEO_BLOCOS
O parâmetro ``-i 8192'' especifica que desejamos um inode para cada 8192 bytes. Após, deve-se montar o sistema de arquivos, remover o diretório lost+found e criar os diretórios dev e boot para o LILO:
mount /dev/fd0 /mnt
rm -rf /mnt/lost+found
mkdir /mnt/{boot,dev}
Após, deve-se criar os dispositivos /dev/null e /dev/fd0. Ao invés de procurar pelos números dos dispositivos, pode-se simplesmente copiá-lo do disco rígido utilizando-se -R:
cp -R /dev/{null,fd0} /mnt/dev
O LILO necessita de uma cópia de seu carregador de inicialização, boot.b, o qual pode ser encontrado no disco rígido, normalmente no diretório /boot .
cp /boot/boot.b /mnt/boot
Finalmente, deve-se copiar os arquivos de configuração do LILO criado conforme a seção anterior, assim como o kernel. Ambos devem estar presentes no diretório raiz:
cp bdlilo.conf KERNEL /mnt
Todo o necessário para que o LILO possa ser executado está presente no sistema de arquivos do kernel. Deve-se então executar o LILO com o parâmetro -r para instalar o carregador de inicialização :
lilo -v -C bdlilo.conf -r /mnt
O LILO deverá ser executado sem erros, após o qual o sistema de arquivos do kernel deve ter a seguinte aparência:
total 361 1 -rw-r--r-- 1 root root 176 Jan 10 07:22 bdlilo.conf 1 drwxr-xr-x 2 root root 1024 Jan 10 07:23 boot/ 1 drwxr-xr-x 2 root root 1024 Jan 10 07:22 dev/ 358 -rw-r--r-- 1 root root 362707 Jan 10 07:23 vmlinuz boot: total 8 4 -rw-r--r-- 1 root root 3708 Jan 10 07:22 boot.b 4 -rw------- 1 root root 3584 Jan 10 07:23 map dev: total 0 0 brw-r----- 1 root root 2, 0 Jan 10 07:22 fd0 0 crw-r--r-- 1 root root 1, 3 Jan 10 07:22 null
Não há motivos para preocupação caso os tamanhos de arquivos sejam um pouco diferentes.
Pode-se ir agora para a seção Configurando o disco em memória.
Caso não se esteja utilizando o LILO, o kernel pode ser transferido para o disco de inicialização com o comando dd :
% dd if=KERNEL of=/dev/fd0 bs=1k
353+1 records in
353+1 records out
Neste exemplo, dd gravou 353 registros completos e 1 parcialmente, concluindo-se que o kernel ocupou 354 blocos do disquete. Denominaremos este número como NÚCLEO_BLOCOS , o qual será utilizado na próxima seção.
Finalmente, deve-se configurar o disquete como o dispositivo raiz e dar-lhe permissões de leitura e gravação:
rdev /dev/fd0 /dev/fd0
rdev -R /dev/fd0 0
Deve-se ter o máximo cuidado ao usar o -R maiúsculo no comando rdev .
Dentro da imagem do kernel está a palavra (dois ou mais bytes) de configuração do disco em memória que especifica onde o sistema de arquivos raiz deve ser encontrado, em conjunto com as suas opções. A palavra é definida em /usr/src/linux/arch/i386/kernel/setup.c e é interpretada da seguinte forma:
bits 0-10: deslocamento para início da memória, em blocos de 1024 bytes bits 11-13: sem utilização bit 14: Indicador se o disco em memória deve ser carregado bit 15: Indicador de prompt antes da carga do sistema de arquivos raiz
Caso o bit 15 esteja configurado, no processo de inicialização será solicitada a inserção de um novo disquete na unidade. Isso é necessário no caso de conjuntos de dois disquetes de inicialização.
Há dois casos, dependendo da construção de um único disquete ou de um conjunto de dois disquetes (inicialização e raiz).
NÚCLEO_BLOCOS). O bit 14 será configurado com 1 e o bit 15 com zero.
rdev -r.
Esteja seguro de utilizar valores decimais. Caso se esteja utilizando o LILO, o argumento rdev deve ser igual ao caminho do kernel, por exemplo /mnt/vmlinuz; caso o kernel tenha sido copiado com dd, deve-se usar o nome do dispositivo de disquetes (por exemplo,/dev/fd0).
rdev -r NÚCLEO_OU_UNIDADE_DE_DISQUETE
Caso se esteja utilizando o LILO, a unidade de disquetes deve ser desmontada agora.
O último passo é a transferência do sistema de arquivos raiz.
dd com a opção seek, a qual especifica quantos blocos devem ser ignorados até que a gravação tenha início:
dd if=rootfs.gz of=/dev/fd0 bs=1k seek=BLOCOS_NÚCLEO
dd if=rootfs.gz of=/dev/fd0 bs=1k
Parabéns, serviço concluído!
DEVE-SE SEMPRE TESTAR UM DISCO DE INICIALIZAÇÃO ANTES DE GUARDÁ-LO, PARA USO EM UMA EMERGÊNCIA