Grub
Autor: Anderson R. de A. Molinero | Publicado: 2008-12-27T15:38:00-08:00

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, mas ele não é parâmetro de comparação, pois ainda utiliza o Kernel 2.4 e o hotplug. O principal motivo é que o lilo utiliza uma configuração mais simples e muito mais simples 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 0timeout 9color cyan/blue white/bluegfxmenu (hd0,2)/boot/messagetitle Kurumin Linuxroot (hd0,2)kernel /boot/vmlinuz-2.6.18.1-slh-up-2 ro nomce quiet apm=power-off vga=791initrd /boot/initrd.img-2.6.18.1-slh-up-2title Microsoft Windows XP Professional (hda1)root (hd0,0)makeactivechainloader +1title Debian GNU/Linux (testing/unstable) (hda5)root (hd0,4)kernel /boot/vmlinuz-2.6.18 ro quiet vga=791initrd /boot/initrd.img-2.6.18title memtest86root (hd0,2)skernel /boot/memtest86.binNote 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ê pode escolher 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. A linha "color cyan/blue white/blue" também é cosmética. Ela apenas indica as cores do texto e do fundo na tela de boot. Veja que as cores são definidas duas vezes. Da primeira você diz as cores que são usadas quando é exibida a mensagem de boot e na segunda as cores que serão usadas em micros onde não seja possível exibir a imagem de fundo. 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 <>" para extrair o arquivo, substitua o arquivo "back.jpg" por outra imagem em jpg (800x600, com até 44 KB), delete o arquivo "message" original e gere o novo usando o comando "ls . | cpio -o > message" para gerar o novo. 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 640x480 com 14 cores. O "(hd0,2)" dentro da opção diz a partição onde o Kurumin está instalado, onde 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.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:/dev/hda = 0/dev/hdb = 1/dev/hdc = 2/dev/hdd = 3As 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,5etc...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)". 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: swapEsta 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 Linuxroot (hd0,2)kernel /boot/vmlinuz-2.6.18.1-slh-up-2 ro nomce quiet apm=power-off vga=791initrd /boot/initrd.img-2.6.18.1-slh-up-2A 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 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 1024x768, "788" indica 800x600 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)makeactivechainloader +1O Windows é um caso especial, pois ele não é carregado diretamente pelo grub. Ao invés disso ele é carregado num modo chamado de "chainload". 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.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)".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=791initrd /boot/initrd.img-2.6.18Esta seção é muito similar à seção do Kurumin, que vimos a pouco. O Debian neste caso 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" é lido 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:# grubDentro 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 de instalação do sistema. No exemplo, o Kurumin está instalado no "(hd0,2)", de forma que o comando fica:  root (hd0,2)                  <!--   @page { margin: 2cm }   P { margin-bottom: 0.21cm }  -->     Falta agora o comando "setup", que especifica aonde 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 numa 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 aonde 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: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:# grubDentro 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 de instalação do sistema. No exemplo, o Kurumin está instalado no "(hd0,2)", de forma que o comando fica:  root (hd0,2)                  <!--   @page { margin: 2cm }   P { margin-bottom: 0.21cm }  -->     Falta agora o comando "setup", que especifica aonde 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 numa 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 aonde 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 é carregadoAo adicionar as duas linhas, a seção referente ao Windows ficaria:title Windowsroot (hd1,0)makeactivechainloader +1map (hd1) (hd0)map (hd0) (hd1)