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: 49.592 ]

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

Utilizar cabo de dados USB LG MG105 (Vibecam) no Linux

Configurando placa de som Sound Blaster Live!

Configurando modem PCTel PCI no Linux

CDs piratas X originais :: mitos e verdades sobre suas diferenças

Configuração da função de webcam para a famosa Breeze Cam

  
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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts