Configurando o grub

O lilo foi um dos primeiros gerenciadores de boot usados no Linux. Ele foi o mais usado durante muito tempo, mas tem sido gradualmente substituído pelo grub, que oferece mais recursos. O Kurumin foi uma das últimas distribuições a adotar o grub, mantendo o lilo como gerenciador padrão até o 6.1. Atualmente (entre as grandes distribuições), apenas o Slackware ainda utiliza o lilo.

O principal motivo da insistência é que o lilo utiliza uma configuração mais simples e muito mais fácil de entender. Apesar disso, o grub também faz bem seu trabalho e permite que o sistema utilize agora um sistema muito mais robusto de detecção de outros sistemas instalados. Embora seja mais “enjoado”, o grub não é tão complicado como pode parecer à primeira vista. Vamos aproveitar a deixa para aprender um pouco mais sobre ele.

O grub usa o arquivo de configuração “/boot/grub/menu.lst”. Este arquivo é lido a cada boot, por isso não é necessário reinstalar o grub ao fazer alterações, como no caso do lilo. Este é um exemplo de arquivo de configuração, gerado pelo instalador do Kurumin:

default 0
timeout 9
color cyan/blue white/blue
gfxmenu (hd0,2)/boot/message

title Kurumin Linux
root (hd0,2)
kernel /boot/vmlinuz-2.6.18.1-slh-up-2 ro nomce quiet apm=power-off vga=791
initrd /boot/initrd.img-2.6.18.1-slh-up-2

title Microsoft Windows XP Professional (hda1)
root (hd0,0)
makeactive
chainloader +1

title Debian GNU/Linux (testing/unstable) (hda5)
root (hd0,4)
kernel /boot/vmlinuz-2.6.18 ro quiet vga=791
initrd /boot/initrd.img-2.6.18

title memtest86
root (hd0,2)
kernel /boot/memtest86.bin

Note que neste exemplo de configuração, temos (além do Kurumin), uma instalação do Windows e uma instalação do Debian, ambas detectadas pelo instalador e adicionadas no arquivo. Foi adicionada também uma entrada para o memtest, que permite checar a memória RAM do micro. Com a configuração desta forma, você escolhe entre Kurumin, Windows, Debian e memtest no boot.

O Kurumin é o default, por causa da opção “default 0” no início do arquivo. Do ponto de vista do grub, o Kurumin é o sistema “0”, o Windows é o sistema “1”, o Debian é o “2” e o memtest é o “3” (note que ele conta os sistemas incluídos na lista a partir do zero). Se você quisesse que o Windows passasse a ser o sistema default, bastaria trocar “default 0” por “default 1”. O mesmo vale para os outros sistemas operacionais instalados.

A linha “timeout 9” é um pouco mais cosmética. Ela diz que se você não pressionar nenhuma tecla na tela de boot, o sistema default será iniciado depois de 9 segundos. Você pode aumentar ou diminuir o tempo a seu gosto. Em seguida temos a linha “color cyan/blue white/blue“, que também é cosmética, indicando as cores do texto e do fundo na tela de boot.

Completando, temos a linha “gfxmenu (hd0,2)/boot/message“, que indica a imagem de fundo que será exibida. No caso do Kurumin é usado um arquivo de tema (o /boot/message), que é composto por diversos arquivos dentro da imagem de fundo. Se você quiser personalizar a imagem de fundo, precisa descompactar este arquivo, trocar a imagem e depois fechá-lo novamente.

Isso é relativamente simples de fazer. Crie uma pasta vazia e copie o arquivo para dentro dela. Use o comando “cpio -i < message” para extrair o arquivo, substitua o arquivo “back.jpg” por outra imagem em jpg (800×600, com até 44 KB), delete o arquivo “message” original e gere o novo usando o comando “ls . | cpio -o > message”. A partir daí, é só substituir o arquivo “/boot/grub/message” pela versão editada, gerada dentro da pasta. O Kurumin usa o egrub, por isso você pode usar imagens em jpg sem limitação de cores. Outras distribuições podem utilizar a versão “regular” do grub, onde você fica limitado a imagens de 640×480 com 14 cores.

O “(hd0,2)” dentro da opção diz a partição onde o Kurumin está instalado, aonde ele vai procurar o arquivo. Como pode ver, o grub usa uma nomenclatura própria para designar as partições do HD, o que acaba sendo o aspecto da configuração mais difícil de entender.

Há pouco vimos que no Linux os HDs e partições são acessados através de dispositivos especiais, localizados dentro do diretório “/dev”. Um HD IDE instalado como master na primeira porta IDE, é visto pelo sistema como “/dev/hda” e a primeira partição dentro dele é vista como “/dev/hda1”. Se você usasse um HD serial ATA, então ele seria visto como “/dev/sda” e a primeira partição, como “/dev/sda1”.

Se você está me acompanhando até aqui, sente e respire fundo, pois nada disso vale para o grub. Para “simplificar”, os desenvolvedores decidiram adotar uma nomenclatura própria, onde os HDs e partições são nomeados a partir do zero.

Ou seja, o “/dev/hda1” é referenciado na configuração do grub como “(hd0,0)” (primeiro HD, primeira partição). O “(hd0,2)” do exemplo seria referente à terceira partição do primeiro HD, ou seja, faria referência ao “/dev/hda3”. Em resumo, na nomenclatura adotada pelo grub temos:

Primeiro HD = 0
Segundo HD = 1
Terceiro HD = 2

As partições dentro de cada HD são também nomeadas a partir do zero:

/dev/hda1 = 0,0
/dev/hda2 = 0,1
/dev/hda3 = 0,2
/dev/hda4 = 0,3
/dev/hda5 = 0,4
/dev/hda6 = 0,5
etc…

E com relação aos HDs SATA? Como vimos, eles são nomeados de forma diferente, do “/dev/sda” ao “/dev/sdz”. Mas para o grub esta distinção não existe. O “/dev/sda1” continua sendo “(hd0,0)” dentro do grub.

O que acontece então se você tiver um HD IDE e outro SATA na mesma máquina? Bem, aí depende de como eles estiverem configurados dentro do setup. O HD “primário”, ou seja, o que o BIOS acessa primeiro na hora de carregar o sistema, será visto como “(hd0)”, independentemente de ser SATA ou IDE, enquanto o outro será visto como “(hd1)”. Se por acaso você tiver dois HDs, sendo que um é o “/dev/hda” e o outro é o “/dev/hdc”, um será visto pelo grub como “(hd0)” e o outro como “(hd1)”, já que o “/dev/hdb” não existe.

Uma forma de confirmar isso é checar o conteúdo do arquivo “/boot/grub/device.map” (com o sistema já instalado). Ele contém uma lista dos HDs detectados pelo grub e o endereço atribuído a cada um.

Agora que entendemos como o grub nomeia os HDs e partições, podemos ir ao que interessa, ou seja, entender como funcionam as múltiplas seções do grub, que permitem carregar cada sistema operacional. No meu exemplo, o HD está configurado da seguinte forma:

/dev/hda1: Windows
/dev/hda2: arquivos
/dev/hda3: Kurumin
/dev/hda5: Debian
/dev/hda6: arquivos
/dev/hda7: swap

Esta configuração vem bem a calhar, pois permite explicar os três casos mais comuns, ou seja, a seção referente ao Kurumin, referente ao Windows e referente a outras distribuições Linux.

Vamos começar com a seção do Kurumin:

title Kurumin Linux
root (hd0,2)
kernel /boot/vmlinuz-2.6.18.1-slh-up-2 ro nomce quiet apm=power-off vga=791
initrd /boot/initrd.img-2.6.18.1-slh-up-2

A linha “title” contém apenas o nome do sistema, da forma como ele irá aparecer na tela de boot. Não é preciso que o nome indique corretamente o sistema, você pode usar apelidos, o importante é apenas que um sistema receba um apelido diferente do outro.

A linha “root“, logo a seguir, indica a partição (no formato do grub) onde o sistema está instalado. Como o Kurumin neste caso está instalado na terceira partição do HD, usamos “(hd0,2)”.

A terceira linha, “kernel“, indica o arquivo com o kernel, que será carregado no início do boot. O Kernel vai sempre dentro da pasta “/boot” e o arquivo sempre se chama “vmlinuz”, seguido da versão, como “vmlinuz-2.6.18.1-slh-up-2”. Além de indicar a localização do arquivo, você pode incluir opções que serão passadas para ele no início do boot.

Lembra-se das opções de boot que usamos para solucionar problemas no Kurumin? Muitas delas são justamente opções que são repassadas para o kernel e podem ser usadas aqui, como o “acpi=off”, “irqpoll”, “noapic”, “all-generic-ide” e assim por diante.

As opções usadas aqui são adicionadas automaticamente pelo instalador (de acordo com as opções de boot usadas), de forma que você não precisa se preocupar muito com elas. O “vga=791” indica a resolução de vídeo que será usada no terminal. O número “791” indica 1024×768, “788” indica 800×600 e, se você substituir o número pela palavra “normal”, o terminal passa a usar a resolução de texto padrão, como nos monitores CGA ;). Usando “vga=normal” o bootsplash exibido durante o carregamento do sistema também deixa de funcionar.

Finalmente, temos a linha “initrd“, que é opcional, permitindo indicar a localização de um arquivo initrd, que será carregado junto com o Kernel. O initrd nem sempre é usado. Quando necessário, ele é gerado durante a instalação, incluindo módulos de que o sistema precisará no início do boot. Se ele não estiver dentro da pasta “/boot” junto com o Kernel, não precisa se preocupar, pois ele não está sendo usado.

Em seguida temos a seção referente ao Windows:

title Microsoft Windows XP Professional (hda1)
root (hd0,0)
makeactive
chainloader +1

O Windows é um caso especial, pois ele não é carregado diretamente pelo grub. Ao invés disso ele é carregado em um modo chamado de “chainload”, onde o grub simplesmente carrega o gerenciador de boot do Windows (que é instalado dentro da partição) e deixa que ele se encarregue de carregar o sistema. Isso é indicado pela linha “chainloader +1“.

Isto simplifica as coisas, pois você precisa apenas indicar um nome ou apelido na linha “title” e indicar a partição onde ele está instalado na linha “root”. No nosso exemplo, o Windows está instalado na primeira partição do HD, por isso o “(hd0,0)”. A opção “makeactive” marca a partição do Windows como ativa, uma configuração que é necessária ao inicializar o Windows 95/98/ME, que ainda utilizam o DOS na fase inicial do boot.

Concluindo, temos a seção referente ao Debian, que pode ser usada (com as devidas modificações) também para outras distribuições Linux instaladas no HD:

title Debian GNU/Linux (testing/unstable)
root (hd0,4)
kernel /boot/vmlinuz-2.6.18 ro quiet vga=791
initrd /boot/initrd.img-2.6.18

Esta seção é muito similar à seção do Kurumin, que vimos há pouco. O Debian está instalado na partição /dev/hda5, que no grub é vista como “(hd0,4)”. O importante é indicar corretamente o arquivo com o Kernel, dentro da partição e o initrd (caso exista).

Você poderia duplicar estas quatro linhas para incluir outras distribuições. Basta alterar a partição dentro da linha “root” e indicar corretamente o arquivo do Kernel e o initrd que serão usados. Embora seja um tema um pouco chato de estudar, é importante conhecer pelo menos o básico sobre a configuração do grub, pois ele é usado atualmente em praticamente todas as distribuições, de forma que é um conhecimento que você vai acabar usando bastante.

Continuando, a configuração feita no arquivo “/boot/grub/menu.lst” é lida pelo grub a cada boot, por isso você não precisa se preocupar em regravar o grub a cada alteração no arquivo, como no caso do lilo. Em geral, você só precisa regravar o grub em caso de acidentes, como quando ele é subscrito acidentalmente, ao reinstalar o Windows ou instalar outra distribuição no mesmo HD.

No caso das distribuições Linux, quase sempre você tem a opção de instalar gravando o gerenciador de boot na partição, o que permite reinstalar sem subscrever o grub “titular”. Aqui, por exemplo, temos um screenshot do instalador do Ubuntu:

O problema é o Windows, já que ele chaga “chutando o balde”, gravando seu gerenciador de boot na MBR sem nem te consultar. Isto acaba se revelando um grande problema, já que você perde o acesso ao Kurumin e a qualquer outra distribuição Linux instalada no HD sempre que precisar reinstalar o Windows.

Nestes casos, você pode regravar o grub dando boot com o CD do Kurumin 7. Dê boot pelo CD e abra um terminal. Defina a senha de root usando o comando “sudo passwd” e logue-se como root usando o “su”. A partir daí, use o comando “grub” para entrar no prompt do grub, onde usaremos os comandos para regravar o gerenciador de boot:

# grub

Dentro do prompt, precisamos rodar dois comandos, especificando a partição onde o Kurumin (ou a distribuição “dona” do grub) está instalado e o dispositivo onde o grub será instalado. Comece rodando o comando “root“, que especifica a partição onde o sistema está instalado. No exemplo, o Kurumin está instalado no “(hd0,2)”, de forma que o comando fica:

root (hd0,2)

Falta agora o comando “setup“, que especifica onde o grub será gravado. Neste caso, estou gravando o grub na MBR do primeiro HD:

setup (hd0)

Terminando, você pode sair o prompt do grub usando o “quit” e reiniciar o micro. Este é um exemplo de operação que é mais simples no grub. No lilo, era necessário montar a partição e abrir um chroot para conseguir regravar o gerenciador :).

Mais um problema comum acontece quando você precisa configurar o grub em uma máquina com vários HDs. Nestes casos, além de verificar como o grub detectou cada um, você precisa se preocupar em gravar o grub no MBR do HD correto.

O problema é muito simples. Quando você possui mais de um HD na máquina, você configura uma ordem de boot no setup do micro. O HD que estiver em primeiro na ordem de boot do setup será usado para inicializar a máquina e, consequentemente, será reconhecido pelo grub como “(hd0)”. Se você instalar o Kurumin no segundo HD e o grub for instalado na MBR do segundo HD, o Kurumin não vai inicializar depois de instalado, pois o BIOS do micro continuará lendo o MBR do primeiro HD.

A solução no caso é bem simples. Mesmo que você instale o Kurumin, ou qualquer outra distribuição no segundo HD, tome sempre o cuidado de gravar o grub no MBR do primeiro HD. Se você está instalando o Ubuntu (por exemplo) na partição /dev/hdb1 (a primeira partição do segundo HD), o “root”, ou seja, o dispositivo onde o sistema está sendo instalado, será “(hd1,0)”, mas na hora de gravar o grub, você indicaria o “(hd0)”, que é o primeiro HD.

Ao fazer isso manualmente pelo prompt do grub, você usaria os comandos:

# grub

root (hd1,0)
setup (hd0)
quit

Note que isto é necessário apenas ao regravar o grub manualmente ou ao instalar outras distribuições. No caso do Kurumin, o instalador se antecipa ao problema, perguntando se você deseja gravar o grub no MBR do primeiro HD:

Outra pegadinha é que quando você tem uma instalação do Windows no segundo HD (“hd1,0” no grub), como em situações onde você compra outro HD para instalar Linux e instala o HD com o Windows como secundário, é necessário adicionar duas linhas na seção do grub referente ao Windows. Elas fazem com que a posição lógica dos dois HD seja trocada, fazendo com que o Windows pense que está inicializando a partir do primeiro. Sem isso, você tem um erro de “partição inválida” durante o boot e o Windows não é carregado.

Ao adicionar as duas linhas, a seção referente ao Windows ficaria:

title Windows
root (hd1,0)
makeactive
chainloader +1
map (hd1) (hd0)
map (hd0) (hd1)

Mais uma observação importante é com relação às limitações de endereçamento por parte do BIOS. A maioria das placas mãe anteriores a 1999 possuem BIOS capazes de endereçar HDs de apenas 8 GB. Esta limitação ocorre por que o BIOS reserva apenas 10 bits para o endereçamento de cilindros (1,024 combinações), 8 bits para as cabeças de leitura (256) e 6 bits para o setor (63 combinações já que o endereço 0 é reservado), o que permite endereçar 1.61 milhões de setores e consequentemente discos de até 7.88 GB (ou 8.4 GB pela notação decimal).

Esta limitação dificulta um pouco as coisas ao usar um HD de maior capacidade em um micro antigo, pois limita as suas possibilidades ao particionar e instalar o sistema.

Se ao instalar, você receber o famoso erro 18 do grub durante o boot, significa que você está usando uma placa atingida pelo problema. Nestes casos, você tem duas opções:

a) Reparticionar o HD, de forma que o sistema seja instalado em uma partição de no máximo 7.88 GB, colocada logo no início do HD (as demais partições podem ser acessadas normalmente depois que o sistema é carregado, o problema é apenas o boot).

b) Instalar usando o lilo, que inclui um patch para burlar o problema.

Os BIOS de placas recentes incluem as chamadas INT 13h Extensions, um remendo que soluciona o problema, permitindo acessar HDs de maior capacidade. Esta dica é válida apenas ao instalar em micros antigos. Em muitas placas fabricadas entre 1998 e 1999 é possível solucionar o problema através de um upgrade de BIOS. O maior problema no caso é encontrar os arquivos de atualização, já que os fabricantes não costumam dar suporte a placas tão antigas.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X