Configurando disquete e pendrive para boot sem suporte na BIOS

Neste artigo descreverei como você poderá instalar, carregar e utilizar um sistema operacional residente em um pendrive, em máquinas sem suporte a boot por este dispositivo na BIOS, utilizando para tanto um simples, "velho e bom" disquete.

[ Hits: 46.014 ]

Por: Stefano Fontes em 02/02/2009


Construindo o initrd



Vamos agora construir a imagem do initrd, ou seja, do disco em memória que utilizaremos para:

Carregar o suporte (módulos) necessários no kernel para suportar o pendrive e seu sistema de arquivos.

Montar a partição do pendrive como root durante o boot.

Vá para o diretório /boot (cd /boot); ele é o diretório padrão no qual o comando mkinitrd irá criar duas coisas:
  • O diretório initrd-tree, contendo a árvore de diretórios, utilitários, dispositivos e scripts necessários ao processo, e que posteriormente serão comprimidos na forma da imagem do futuro disco em memória;
  • O arquivo initrd.gz, que é a imagem do ramdisk propriamente dita.

ATENÇÃO: Se já houver um diretório initrd-tree, assim como um arquivo initrd.gz no /boot, renomeie-os temporariamente, pois pode ser que eles sejam necessários à inicialização de seu sistema; assim por exemplo:

# mv initrd-tree initrd-tree.bkp
# mv initrd.gz initrd.gz.bkp


Isso evitará que sejam indevidamente sobrescritos.

LEMBRE-SE: Após concluir a criação do disquete de boot (próxima seção), mova o arquivo initrd.gz (novo) e o diretório initrd-tree (novo), com o comando mv, do diretório /boot para outro diretório (como por exemplo, o diretório /opt/boot-pen criado anteriormente durante a configuração do Kernel), e renomeie novamente os arquivos acima para seus nomes originais (initrd.gz e initrd-tree), pois caso contrário sua máquina pode ficar impedida de reinicializar corretamente.

Agora entre com um dos seguintes comandos:

Máquinas com chipset VIA ou INTEL:

# mkinitrd -k X.Y.Z -m jbd:ext3:usbcore:usb-uhci:usb-storage -f ext3 -r /dev/sda1

Máquinas com chipset Compaq, OPTi, SiS, ALi:

# mkinitrd -k X.Y.Z -m jbd:ext3:usbcore:usb-ohci:usb-storage -f ext3 -r /dev/sda1

(Obs.: X.Y.Z é a versão de seu Kernel, p. ex. 2.4.31)

O que esta linha de comando faz:
  • -k X.Y.Z : Irá buscar no diretório /lib/modules os módulos referentes ao kernel utilizado (p.ex. 2.4.31);
  • -m jbd:ext3:usbcore:usb-uhci(ou ohci):usb-storage : especifica quais módulos serão utilizados no initrd;
  • -f ext3 : especifica que o sistema de arquivos da partição root no pendrive é (no caso) ext3;
  • -r /dev/sda1 : especifica que a partição a ser montada como root é (no caso) /dev/sda1

Observe que os parâmetros destas opções podem variar, uma vez que:
  • -k : o kernel utilizado pode ser outro (p.ex. 2.4.22 etc.);
  • -m : os módulos referentes ao sistema de arquivos (no caso jbd e ext3) poderão ser outros, conforme foi realizada a formatação do pendrive; neste caso deverá ser verificado quais os módulos necessários para suportar o sistema de arquivos utilizado; conforme especificado acima, os módulos usb-uhci ou usb-ohci também poderão variar, dependendo do chipset da placa-mãe. Se o chipset for diferente dos especificados acima, deverá ser consultada a documentação do kernel para determinar qual o módulo correto a ser utilizado. Os únicos módulos que sempre serão utilizados serão usbcore e usb-storage, pelo menos no caso do kernel série 2.4.
  • -r : se o particionamento e formatação do pendrive for realizada corretamente, será sempre utilizada a partição /dev/sda1, entretanto se o pendrive não for particionado e/ou formatado, poderá ocorrer do sistema atribuir outra partição, como por exemplo /dev/sda4 etc. Neste caso, a mesma deverá ser utilizada como parâmetro para esta opção. Para evitar maiores complicações, recomendamos fortemente o particionamento e formatação do pendrive da forma descrita anteriormente.

Isso feito, deverão ser gerados no diretório /boot o diretório initrd-tree e o arquivo initrd.gz (novos).

Fazendo as modificações necessárias

Vá para o diretório initrd-tree:

# cd initrd-tree

Atenção: a partir deste momento, estando no diretório initrd-tree, os arquivos e diretórios a serem modificados deverão ser especificados, conforme abaixo, SEM a barra precedente ( / ), pois eles não se encontram imediatamente abaixo do diretório root, e sim do diretório initrd-tree.

São eles:
  • load_kernel_modules : script com comandos que carregarão os módulos no Kernel;
  • dev : diretório onde estarão os arquivos especiais de dispositivos para montagem no boot;
  • rootdev : especifica qual será o dispositivo onde se encontra a partição root (no caso, /dev/sda1);
  • rootfs : especifica qual é o sistema de arquivos da partição root (no caso, ext3);
  • lib/modules/X.Y.Z : diretório onde estão os módulos a serem carregados no Kernel durante o boot.

Liste o conteúdo do initrd-tree, que deverá ser o seguinte, ou similar:

# ls bin/  dev/  etc/  lib/  linuxrc*  load_kernel_modules*  mnt/  proc/  rootdev  rootfs

Modifique o arquivo load_kernel_modules, da seguinte forma:

# echo "sleep 5" >> load_kernel_modules

(Atenção para usar DOIS sinais de maior ( >> ), caso contrário o arquivo será apagado e você terá que rodar novamente o comando mkinitrd, no diretório /boot, para gerar novamente o initrd-tree e o arquivo load_kernel_modules)

Este comando ("sleep 5") é necessário para dar tempo ao Kernel de carregar todos os módulos, localizar o pendrive e a partição root, sem o que não conseguirá montá-la.

Verifique o conteúdo do arquivo que deverá ser similar ao seguinte:

# cat load_kernel_modules

# This is a script used to load the kernel modules.
# To use it, chmod it 755, and then add the insmod
# lines needed to load your modules, like this:
insmod /lib/modules/$(uname -r)/jbd.o
insmod /lib/modules/$(uname -r)/ext3.o
insmod /lib/modules/$(uname -r)/usbcore.o
insmod /lib/modules/$(uname -r)/usb-uhci.o
insmod /lib/modules/$(uname -r)/usb-storage.o
sleep 5 #==============================> (você acrescentou esta linha)

Vá agora para o diretório dev/ (atenção mais uma vez: NÃO É o /dev, e sim o dev do initrd-tree), criando os arquivos especiais de dispositivo sda e sda1:

# cd dev/
# mknod -m 666 sda b 8 0
# mknod -m 666 sda1 b 8 1


Verifique agora o novo conteúdo do diretório, que deverá ser similar ao seguinte:

# ls
console  hda  hda1  hda2  hda3  null  ram  sda  sda1  systty  tty1  tty2  tty3  tty4

A seguir verifique os conteúdos dos seguintes arquivos, e do diretório lib/modules/X.Y.Z, que deverão ser também similares aos seguintes:

# cat rootdev
/dev/sda1

# cat rootfs
ext3

# ls lib/modules/X.Y.Z (p. ex. 2.4.31)
ext3.o  jbd.o  usb-storage.o  usb-uhci.o  usbcore.o

Agora será necessário gerar um novo arquivo initrd.gz contemplando estas modificações.

Vá para o diretório /boot e entre com o seguinte comando, sem nenhum parâmetro ou opção:

# mkinitrd

O novo arquivo initrd.gz está agora pronto para ser copiado para o disquete.

Página anterior     Próxima página

Páginas do artigo
   1. Configurações utilizadas e pré-requisitos
   2. Entendendo o processo
   3. Preparando o terreno
   4. Construindo o initrd
   5. Criando o disquete
   6. Finalmente... o boot!
Outros artigos deste autor

Provendo dados em um servidor PostgreSQL através do Apache e PHP

Criando um repositório criptografado de dados com Cryptsetup (dm-crypt) sem (re)particionamento do HD

Leitura recomendada

O que é o Chipset e para que serve?

Configurando a placa de rede wireless RTL8187 no Ubuntu 9.04

Instalando o driver da NVIDIA atualizado para o kernel atual no Metamorphose 2.0

Configurando Wireless LG LW2110P com chipset rtl8180 (Realtek)

InputClass no X server aplicada as configs do synaptics (touchpad)

  
Comentários
[1] Comentário enviado por Mauro Delazeri em 03/02/2009 - 01:34h

Caro amigo schaf seu artigo esta meio longo mas muito bom, parabens!

[2] Comentário enviado por schaf em 03/02/2009 - 10:50h

Em primeiro lugar, quero agradecer ao site pela publicação e ao amigo Mauro acima pelo elogio.
Gostaria de acrescentar ao artigo o seguinte:
Se após algum tempo você verificar que o pen-drive apresenta problemas de falta de espaço em disco (não consegue abrir arquivos para edição, mensagens "No space left on device" ou coisa parecida), verifique:
- Se há espaço livre disponível no pen-drive, com o comando:

# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 954M 954M 0 100% /

No caso acima, podemos observar que o espaço no pen-drive está completamente utilizado.
Se isto ocorrer, verifique o tamanho do seguinte arquivo:

# du -sh /var/log/debug
287M /var/log/debug

Esvazie então o arquivo para liberar espaço em disco:

# echo > /var/log/debug

Para tornar esta solução "definitiva", acrescente a seguinte linha ao crontab:

# crontab -e
*/15 * * * * echo > /var/log/debug

Isto irá esvaziar o arquivo de 15 em 15 minutos. Maiores informações na documentação do crontab.
Para liberar espaço, você poderá também desinstalar programas desnecessários e/ou esvaziar os diretórios /usr/share/doc ou /usr/doc, através dos comandos (atenção pois a exclusão é DEFINITIVA):

# rm -rf /usr/doc/*
# rm -rf /usr/share/doc/*

Dependendo do caso, a documentação ali existente raramente será utilizada (NÃO se trata das páginas man, as quais você pooderá utilizar normalmente, mesmo após a remoção acima).
Até a próxima!

[3] Comentário enviado por stremer em 04/02/2009 - 11:41h

cara...
eu tinha um notebook "véio"... não tenho mais (bati rolo) mas pesquisei sobre esse assunto e até sabia fazer isso com ele, pois o mesmo não dava boot pelo pen drive, mas tinha um hd de somente 4gb que estava "meia boca" então eu pensei em fazer todo esse processo. Foi complicado achar toda a documentação (me levou alguns dias) e esse artigo seu esta FANTASTICO... se ele existisse na epoca era questão de minutos... vai ajudar muito as pessoas que precisarem de algo parecido...
e acrescentando que o boot não necessariamente precisa ser do disquete, mas pode ser do próprio hd ou ainda de um drive de cd (desde que prepare tudo e depois queime o cd bonitinho) vai depender mesmo da placa mãe...
Parabéns novamente!!!

[4] Comentário enviado por galberojunior em 19/05/2009 - 08:29h

Existe alguma indicação de como proceder para distros baseadas em Debian?
E parabéns pelo tópico!


Contribuir com comentário