Se você é das antigas, deve se lembrar da época em que o lilo era o gerenciador de boot mais usado no Linux. Ele oferece uma configuração relativamente simples e um arquivo de configuração bem organizado, mas tem suas limitações, o que levou ao crescimento do grub, que é usado por padrão no Ubuntu, Mandriva, OpenSUSE, Fedora e quase todas as outras principais distribuições, com exceção do Slackware.
Nos capítulos sobre o Mandriva e o OpenSUSE mostrei rapidamente as ferramentas de configuração do gerenciador de boot, vamos agora nos aprofundar na configuração manual, que é feita através do arquivo “/boot/grub/menu.lst“.
No Linux, o diretório “/etc” armazena quase todos os arquivos de configuração. O menu.lst é uma das exceções e isso tem um bom motivo. O grub lê este arquivo de configuração no início de cada boot, antes de mostrar o splash e o menu de opções, de forma que é preciso ter certeza de que ele estará sempre disponível.
Como muitos administradores reservam uma partição separada para o diretório “/etc” (o que seria um problema, uma vez que partições separadas são montadas bem depois que o grub já fez seu trabalho) os desenvolvedores do grub optaram por colocar o arquivo de configuração diretamente na pasta “/boot”, junto com o kernel e outros arquivos usados no início do boot, afastando qualquer possibilidade de ele não estar disponível por ter sido armazenado em uma partição separada.
Uma vantagem dessa abordagem é que você não precisa reinstalar o gerenciador de boot depois de fazer alterações na configuração, como era necessário no caso do lilo.
Assim como em outras distribuições, o instalador do Ubuntu se encarrega de gerar o arquivo automaticamente, incluindo entradas para outros sistemas operacionais instalados. O arquivo é muito grande devido aos comentários (#), mas, ao removê-los, sobra uma configuração relativamente inteligível, como nesse exemplo:
default 0 timeout 10 title Ubuntu 8.10, kernel 2.6.27-7-generic uuid 77e43f2b-063f-4e4f-8708-be403c49a982 kernel /boot/vmlinuz-2.6.27-7-generic root=UUID=77e43f2b-063f-4e4f-8708-be403c49a982 ro locale=pt_BR quiet splash initrd /boot/initrd.img-2.6.27-7-generic quiet title Ubuntu 8.10, kernel 2.6.27-7-generic (recovery mode) uuid 77e43f2b-063f-4e4f-8708-be403c49a982 kernel /boot/vmlinuz-2.6.27-7-generic root=UUID=77e43f2b-063f-4e4f-8708-be403c49a982 ro locale=pt_BR single initrd /boot/initrd.img-2.6.27-7-generic title Ubuntu 8.10, memtest86+ uuid 77e43f2b-063f-4e4f-8708-be403c49a982 kernel /boot/memtest86+.bin quiet title Other operating systems: root title Windows Vista/Longhorn (loader) root (hd0,0) savedefault makeactive chainloader +1
Nesse exemplo, temos 4 entradas: “Ubuntu”, “Ubuntu recovery”, “memtest86+” e “Windows”. Como pode imaginar, a primeira se refere ao boot normal do Ubuntu, enquanto a segunda diz respeito ao modo de recuperação, onde o sistema abre apenas um prompt de comando, sem carregar nenhum outro serviço. A grande diferença entre as duas entradas reside no parâmetro “single”, que altera o comportamento do sistema, disparando as mudanças que ativam o modo de recuperação.
Temos em seguida a entrada do memtest86+ (o teste de memória) e a entrada do Windows. Ela é adicionada automaticamente, sempre que o instalador detecta uma instalação do Windows no HD.
Dentro da nomenclatura do grub, as entradas são numeradas a partir do zero, de forma que o Ubuntu é o “0” e o Windows é o “3”.
A linha “default 0“, no início do arquivo, indica qual sistema ficará pré-selecionado na tela de boot, ou seja, o Ubuntu. Caso quisesse que o Windows passasse a ser o default, mudaria a opção para “default 3”. Se você tiver outros sistemas instalados, basta ver em qual ordem o sistema aparece na lista e indicar o número correspondente.
A linha “timeout 9” indica o tempo de espera antes de carregar o sistema default, em segundos. Uma boa maneira de acelerar o boot, se você usa sempre o mesmo sistema, é alterar o valor para “1”, o que faz com que o carregamento comece quase instantaneamente e você não perca a chance de escolher outra entrada quando necessário (basta ser rápido :).
Por default, o Ubuntu exibe apenas uma barra de progresso durante o boot, escondendo todas as mensagens do sistema, uma abordagem que tem suas desvantagens, já que torna o processo de boot uma caixa preta à qual você não tem acesso. Se o boot parar em algum ponto, devido à qualquer erro inesperado, você fica sem saber o que aconteceu.
Você pode ter de volta as mensagens de boot de maneira muito simples, removendo o parâmetro “quiet” da linha “kernel”, na entrada referente ao sistema, como em:
title Ubuntu 8.10, kernel 2.6.27-7-generic uuid 77e43f2b-063f-4e4f-8708-be403c49a982 kernel /boot/vmlinuz-2.6.27-7-generic root=UUID=77e43f2b-063f-4e4f-8708-be403c49a982 ro locale=pt_BR splash initrd /boot/initrd.img-2.6.27-7-generic
Ela é justamente a opção que faz o sistema ficar mudo durante o boot. Ao retirá-la, passam a ser exibidas mensagens de boot resumidas (no estilo Red Hat), mostrando os passos que estão sendo executados:
Se você quiser ir adiante, pode remover também o parâmetro “splash”, que é o responsável pelo fundo gráfico. Sem ele, o sistema passa a botar em modo texto, exibindo todas as mensagens, assim como no Slackware.
Em outras distribuições, você encontra também linhas como:
color cyan/blue white/blue gfxmenu (hd0,0)/boot/message
A primeira, permite personalizar as cores da tela de boot, enquanto a segunda, exibe um fundo gráfico (o arquivo “/boot/message”, que é comprimido em um formato específico). Entretanto, o Ubuntu (pelo menos até o 8.10) não usa estas opções cosméticas, exibindo um menu em texto, branco sobre preto.
Uma das dúvidas mais frequentes sobre a configuração do grub é a nomenclatura usada para designar os HDs e partições. No Linux, os HDs e partições são acessados através de dispositivos especiais, localizados dentro do diretório “/dev”. Um HD SATA (por exemplo) é visto pelo sistema como “/dev/sda”, e a primeira partição dentro dele é vista como “/dev/sda1”.
Entretanto, isso não vale para o grub, onde os desenvolvedores decidiram adotar uma nomenclatura própria, na qual os HDs e partições são nomeados a partir do zero. Com isso, o “/dev/sda1” é referenciado na configuração do grub como “(hd0,0)” (primeiro HD, primeira partição). O “(hd0,2)” diz respeito à terceira partição do primeiro HD (ou seja o /dev/sda3) e assim por diante
O grande problema é que os mesmos devices são usados por diversos tipos de dispositivos de armazenamento, como por exemplo pendrives e cartões de memória. Se você plugar dois pendrives, em sequência, o primeiro será visto pelo sistema como “/dev/sdb” e o segundo como “/dev/sdc”. Invertendo a ordem em que os dois são plugados, você inverte também a ordem dos devices que são atribuídos a eles.
O problema é que, de acordo com a configuração do setup e outras variáveis, essa mesma variação pode ocorrer em máquinas com vários HDs, fazendo com que o segundo HD assuma o lugar do primeiro e que o sistema deixe de inicializar.
Para evitar isso, os desenvolvedores do Ubuntu (e de diversas outras distribuições atuais) adotaram o uso de UUIDs para identificação das partições, tanto na configuração do fstab, quanto na configuração do grub. O UUID é um identificador único, que permite ao sistema identificar a partição, mesmo que o device seja alterado.
É por isso que as entradas referentes ao Ubuntu dentro do arquivo não especificam a partição onde o sistema está instalado, mas sim o UUID (que é inserido automaticamente pelo instalador), como em:
title Ubuntu 8.10, kernel 2.6.27-7-generic uuid 77e43f2b-063f-4e4f-8708-be403c49a982 kernel /boot/vmlinuz-2.6.27-7-generic root=UUID=77e43f2b-063f-4e4f-8708-be403c49a982 ro locale=pt_BR quiet splash initrd /boot/initrd.img-2.6.27-7-generic quiet
Os UUIDs são usados também para referenciar as partições dentro do arquivo “/etc/fstab”, novamente com o objetivo de permitir que o sistema continue sendo capaz de concluir o boot, mesmo que os devices das partições sejam alterados.
Ao adicionar uma nova partição no fstab, você pode identificá-la usando o comando “blkid”, como em:
# blkid /dev/sdc1 /dev/sdc1: UUID="5c5a3aff-d8a3-479e-9e54-c4956bd2b8fd" SEC_TYPE="ext2" TYPE="ext3"
Você pode então especificar o UUID na linha do fstab no lugar do device, como em:
UUID=5c5a3aff-d8a3-479e-9e54-c4956bd2b8fd /mnt/sdc1 ext3 defaults 0 0
O blkid é usado também nos casos em que você precisa adicionar manualmente uma nova entrada no menu.lst, especificando algum sistema instalado em outra partição.
Continuando, 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.
Em seguida temos a linha, “kernel“, que indica o arquivo com o kernel, que será carregado no início do boot. O kernel vai sempre dentro da pasta “/boot” (muitas vezes é colocado um atalho para ele no diretório raiz, mas isso não é regra) e o arquivo sempre se chama “vmlinuz”, seguido da versão, como “vmlinuz-2.6.27-7-generic”.
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, como é o caso da “locate=pt_BR” (que especifica a linguagem) e do “quiet slash” que comentei há pouco. Em caso de necessidade, seria nela que você incluiria opções para solução de problemas, como o “acpi=off”, “irqpoll”, “noapic”, “all-generic-ide” e assim por diante.
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.
Em seguida temos a seção referente ao Windows, que é na verdade a mais simples:
title Windows Vista/Longhorn (loader) root (hd0,0) savedefault makeactive chainloader +1
O Windows é um caso especial, pois ele não é carregado diretamente pelo grub. Em vez disso ele é inicializado 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 inicializar 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, onde ainda é utilizado o MS-DOS na fase inicial do boot. Ela não é mais necessária no XP ou no Vista, mas, como também não atrapalha, é comum que ela continue sendo usada.
Nos casos em que 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) savedefault makeactive chainloader +1 map (hd1) (hd0) map (hd0) (hd1)
Caso você tivesse outras distribuições Linux instaladas no HD, veria também seções adicionais dedicadas a elas, como em:
title Linux (on /dev/sda3) root (hd0,2) kernel /boot/vmlinuz root=/dev/sda3 ro vga=791 savedefault boot
Nesse exemplo, a segunda distribuição está instalada na partição “/dev/sda3” que, na nomenclatura do grub, equivale ao “(hd0,2)”. O importante é indicar corretamente o arquivo com o kernel, dentro da partição e o initrd (caso exista). O “root=/dev/sda3 ro vga=791” são opções destinadas ao kernel, que especificam a partição onde o sistema está instalado e a resolução de tela para o framebuffer, que será usada durante o boot.
Você poderia duplicar estas quatro linhas para incluir outras distribuições. Bastaria alterar a partição dentro da linha “root” e indicar corretamente o arquivo do kernel e o initrd que serão usados.
Uma outra maneira de inicializar distribuições Linux instaladas em outras partições do HD é usar a opção “chainloader +1” (assim como no caso do Windows):
title Mandriva root (hd0,2) chainloader +1
A principal observação nesse caso, é que a configuração só funciona se você estiver usado a opção de instalar o gerenciador de boot no primeiro setor da partição (e não no MBR) ao instalar a outra distribuição.
Imagine, por exemplo, um caso onde você tenha uma instalação do Ubuntu no HD (seu sistema de trabalho, que você não quer arriscar danificar de maneira alguma) e você quer fazer uma instalação de testes do Mandriva na partição “/dev/sda3”, que está livre. Você poderia dar boot com o DVD, fazer a instalação e, no final do processo, alterar a configuração do grub, para que ele fosse instalado no primeiro setor da partição.
Com isso, o grub do Ubuntu continuaria instalado no MBR e você poderia adicionar as três linhas anteriores no “/boot/grub/menu.lst” do Ubuntu para ganhar acesso ao Mandriva.
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 é sobrescrito acidentalmente, ao reinstalar o Windows ou ao 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 Alternate CD do Ubuntu:
O problema é o Windows, que sempre grava o gerenciador de boot na MBR, subscrevendo o grub e eliminando assim o acesso às distribuições Linux instaladas no HD.
Nesses casos, você pode regravar o grub dando boot com o próprio live-CD do Ubuntu. 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 a distribuição Linux principal (a antiga “dona” do MBR) está instalada e também o endereço da partição onde o grub será instalado (usando a nomenclatura do grub).
Comece rodando o comando “root“, que especifica a partição onde o sistema está instalado. No exemplo, o sistema 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 do prompt do grub usando o “quit” e reiniciar o micro. No próximo boot, você terá de volta o prompt do grub e poderá (se for o caso) recuperar o acesso ao Windows editando o “/boot/grub/menu.lst” e adicionando uma seção referente a ele, seguindo o exemplo que mostrei anteriormente.

