Usando o GRUB4DOS para carregar o Windows XP e o Parted Magic do HD

AVISO: mexer com o MBR, bem como o uso do dd aqui comentado, é um procedimento arriscado, que pode ocasionar perda de dados. Tome cuidado e faça backup antes de prosseguir.


(fonte)

O instalador do Windows XP usa exatamente o mesmo layout, colocando o início da primeira partição no setor 63.

Então, pressupondo uma instalação com uma partição apenas, o particionamento consistirá em:

- MBR: primeiro setor (512 bytes) contendo 440 bytes de código booteável, 4 bytes de assinatura de disco, 2 bytes vazios, 64 bytes da tabela de partiçoes, 2 bytes de assinatura de boot (AA55h).
- 62 setores vazios.
- Começo da primeira partição no setor 63.

O mecanismo de boot do Windows é simples, pois não envolve código variável. O código booteável do MBR procura pela partição ativa do disco. Ao achá-la, faz um chain load do VBR (Volume Boot Record) nela presente, ou seja, carrega o código booteável existente no início (primeiro setor) desta partição. Este, por sua vez, assume o comando, carrega o NTLDR e acabou, o Windows XP estará sendo iniciado.

Para usarmos o GRUB4DOS, existem algumas possibilidades. Podemos disfarçá-lo de NTLDR, ou colocá-lo no lugar do VBR da partição (equivale a "instalar na partição"), mas eu prefiro deixar a partição intacta e só trocar o código de boot do MBR.

Para isso, precisamos de um live CD Linux.

Com algum live CD carregado, para fins de demonstração, podemos apagar os primeiros 440 bytes do disco. Isso não apagará a tabela de partição, apenas excluirá o código booteável que o Windows colocou lá. A estrutura do particionamento continuará intacta. Considerarei daqui para frente o HD como /dev/sda -- adapte caso necessário.

# dd if=/dev/zero of=/dev/sda bs=440 count=1

Como medida de saneamento, podemos limpar os 62 setores não usados para nos certificarmos que estarão zerados:

# dd if=/dev/zero of=/dev/sda bs=512 seek=1 count=62

Depois destes dois comandos, a máquina não dará mais boot. O BIOS ou ficará parado após o POST, ou (em caso de BIOS mais novos) emitirá um aviso que o HD não é booteável.

Para instalar o GRUB4DOS, baixe a versão mais recente e descompacte-a.

Dê permissão de execução ao binário grub4dos-0.4.5c/bootlace.com caso necessário -- apesar de ter a extensão ".com", é um binário híbrido, que roda sobre DOS e Linux (não funciona sobre Windows). Então, rode:

# ./bootlace.com --no-backup-mbr --mbr-no-bpb --mbr-disable-floppy --time-out=0 /dev/sda

As opções do bootlace.com são estas:

BOOTLACE writes GRLDR BOOT RECORD to MBR or to the boot area of a file system.
Usage:  bootlace.com  [OPTIONS]  DEVICE_OR_FILE
Options: --read-only, --floppy[=N], --boot-prevmbr-first, --boot-prevmbr-last,
--no-backup-mbr, --force-backup-mbr, --mbr-enable-floppy, --mbr-disable-floppy,
--mbr-enable-osbr, --mbr-disable-osbr, --duce, --time-out=T, --hot-key=K,
--preferred-drive=D, --preferred-partition=P, --sectors-per-track=S, --heads=H,
--start-sector=B, --total-sectors=C, --install-partition=I, --lba, --chs,
--fat12, --fat16, --fat32, --vfat, --ntfs, --ext2, --serial-number=SN,
--restore-mbr, --mbr-no-bpb, --chs-no-tune
DEVICE_OR_FILE: Filename of the device or image. For DOS, a BIOS drive number
(in hex 0xHH or decimal DDD format)can be used to access the drive.

Agora, monte a partição e copie o arquivo grub4dos-0.4.5c/grldr para a sua raiz. Ainda na raiz, crie um arquivo de texto chamado menu.lst com o conteúdo:

color white/blue green/blue
default 0
timeout 20

title Windows XP
find --set-root /ntldr
chainloader /ntldr

Este é um arquivo de configuração básico. Leia o arquivo grub4dos-0.4.5c/README_GRUB4DOS.txt para obter mais informações.

Desmonte a partição e pronto. Ao reiniciar, o código de boot presente no MBR agora é do GRUB4DOS. Ele ocupa, além dos primeiros 440 bytes do MBR, parte dos 62 setores antes não usados. Esse código entende a estrutura do sistema de arquivos[1] e carrega o grldr, que é a parte principal. Então ele interpreta o arquivo de configuração, procurando em todas as partições do disco (find --set-root) um arquivo chamado "ntldr", o boot loader do Windows XP. Achando-o, "executa-o" (chain load) e ele assume o controle. Caso o arquivo exista em mais de uma partição, ele para de procurar no momento que acha o primeiro deles.

A partir de agora, você pode adicionar sistemas Linux, como o Parted Magic, que pode ser carregado a partir de partições NTFS. Baixe o ISO e extraia a pasta pmagic para a raiz da partição do Windows XP. Depois, edite o menu.lst de acordo. No arquivo boot/syslinux/syslinux.cfg estão as opções usadas por cada entrada do menu do CD do Parted Magic. Abaixo, adicionei ao nosso menu.lst uma entrada baseada na opção "Default settings (Runs from RAM)" da versão 6.7.

color white/blue green/blue
default 0
timeout 20

title Windows XP
find --set-root /ntldr
chainloader /ntldr

title Parted Magic
find --set-root /pmagic/bzImage
kernel /pmagic/bzImage edd=off load_ramdisk=1 prompt_ramdisk=0 rw vga=normal loglevel=9 max_loop=256 vmalloc=256MiB keymap=br-abnt2 pt_BR
initrd /pmagic/initramfs

GRUB4DOS para carregar o Windows XP e o Parted Magic

Assim, a menos que o sistema de arquivos NTFS esteja completamente demolido, em caso de problemas com o Windows, você tem o Parted Magic para emergências. Seria possível ter também uma partição separada (e até mesmo oculta) só para o Parted Magic, pois daí mesmo com a partição do Windows inacessível, você conseguirá carregá-lo.

MIÚDOS

- O particionamento feito a partir do Windows Vista é um pouco diferente. A parte relevante aqui é que ficam 2047 setores não usados antes da primeira partição. Como o GRUB4DOS suporta carregar via chain load o bootmgr (que substitui o ntldr) usado a partir do Vista, em teoria, o post se aplica da mesma forma; não testei, contudo.


[1] os sistemas de arquivos suportados pelo GRUB4DOS são: EXT2/3/4, FAT12/16/32, NTFS, ISO9660 (Rock Ridge), exFAT

Comentários