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