Índice das dicas

Entendendo a configuração do grub, no Ubuntu

Por Carlos E. Morimoto em 19 de janeiro de 2009 às 19h48

33

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.

A configuração do grub é feita através do arquivo "/boot/grub/menu.lst", encontrado em todas as distribuições que o utilizam como gerenciador.

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 /boot, ou para o /etc (o que seria um problema, uma vez que partições separadas são montadas bem depois que o grub já fez 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 utras 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 aber apenas um prompt de comando, sem carregar nenhum outro serviços. 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, que usa um modo chainload, onde o grub carrega o gerenciador de boot do Windows e deixa que ele inicialize o sistema. 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 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 informações sobre o boot, 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 fica 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 é 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/hda3) 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 fazendo com que o sistema deixe de inicializar.

Para evitar isso os desenvolvedores do Ubuntu (e 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 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

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 é 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.

Em 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ções "/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ção 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.

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 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.

Nestes 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 o 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.

33 comentáriosPor Carlos E. Morimoto. Revisado 23 de março de 2011 às 11h22

Comentários

Dual Boot em HDs Diferentes
por PierreR1 em 17 de julho de 2011 às 20h29
Tenho 4 hds e em um deles tenho o win 7 x 64 e em outro hd estou tentando instalar o ubuntu versão 10.04 x 64 tb e depois que i9nstalo tudo direitinho, reinicio e não faz o dual boot, não aparece a opção de escolha do sistema a ser utilizado, acessa o win 7 direto, como se eu não tivesse acabado de instalar o ubuntu ...
Já tentei muitas dicas, mas tudo em vão, e além disso perdi tudo nos 4 hds , inclusive as fotos do hospital qdo minha filha nasceu. ...
Agradeço desde já qq ajuda, pois eu adoro o linux e não ter ele aqui no meu computador como opção segura e estável, me deixa maluco ...

- AMD - x4 3.0
- VS Companhy
- 4 gb de ram
- hd 1 - 1T --> win 7
- hd 2 - 250gb --> ubuntu 10.04
- hd 3 - 160gb --> dados,arquivos e fotos
- hd 4 - 40gb --> dados,arquivos e fotos
- ge force 9800gt
- tremenda tristeza por não poder fazer o dual p/ mexer no meu querido linux e aprender cada vez mais ...
- Não sei se pode, mas peço desculpas desde já ...: pierrer1@gmail.com

Grato .
PierreR1
 
por esdrasas2 (anônimo) em 23 de agosto de 2010 às 23h56
Usei por muito tempo o Kurumin7, instalei o /home num segundo HD. Estou me habituando com o Ubuntu10.4, mas não sei como usar o /home formatado em reiserfs no Ubuntu. Tentei fazer a alteração no fstab semelhante ao Kurumin, mas não funcionou. Se pudessemos fazer a escolha na instalação seria muito bom, mas como fazer depois de instalado? E usando grub, com UUID?
 
por cbs (anônimo) em 9 de junho de 2010 às 15h54
Bem, utilizo a troca de imagem frequentemente, já tenho uma que criei com o logo da empresa que presto serviço, porém com o passar do tempo houve a necessidade de trocar a imagem, foi aí que começou a minha dor d cabeça, criei a imagem no corel, exportei com 640x480 em png e 74 dpi, fui no linux e usei o comando "convert -resize 640x480 -colors 14 nomedoarquivodeimagem.png grub-splash.xpm && gzip grub-splash.xpm", que me gerou o "grub-splash.xpm.gz", até aí tudo ok, retirei o grub-splash.xpm.gz original que estava operante e funcionando diga-se de passagem, coloquei o novo que tinha acabado de gerar, para minha surpresa ficou muito distorcido, peguei o grub-splash.xpm.gz e descompactei p/ ver se a imagem dentro deste arquivo era exibida distorcida, porém estava normal com 14 cores, fiz modificações no menu-lst como tentativa inseri o parâmetro "color = 14", mas continuava distorcido, Obs. A imagem que criei não tinha efeitos gradientes etc, cores simples, cores primárias.
Alguém já passou por isso?
Obrig!
 
por Kleyton (anônimo) em 27 de maio de 2010 às 00h54
Fiz um vídeo sobre o Assunto: colocar imagem no boot Grub do Ubuntu 9.10.
Confiram: http://www.youtube.com/watch?v=Zi7kdsC_aDE
Boa Sorte!!
 
por rtc (anônimo) em 14 de abril de 2010 às 01h34
Alterando a linha GRUB_TIMEOUT para 30 e depois dando sudo update-grub, o menu aparece como o amigo em cima disse!

Obrigado a todos pela ajuda
 
por Cyber MSX (anônimo) em 6 de fevereiro de 2010 às 00h38
Vá em /etc/default/grub e procure pela linha GRUB_DEFAULT. Altere o valor (no caso, 0) pela linha correspondente ao Windows. É só contar quantas linhas tem o menu do GRUB, começando pela primeira linha que é 0. E tente tirar do modo "Somente leitura". Só consegui quando fiz o login como usuário root.

E altere o valor da linha GRUB_TIMEOUT para ganhar tempo na hora de escolher qual sistema utilizar.

Se eu errei algo, desculpem. Sou apenas um usuário iniciante de Linux que, graças a este post, pude alterar o GRUB da versão 2.6.31-19 para que minhas partições do Win XP e 7 pudessem reaparecer depois do update 2.6.31-17 -> 2.6.31-19.
 
por lqst (anônimo) em 2 de fevereiro de 2010 às 15h53
Olá pessoal, acabei de instalar o Ubuntu 9.10 Karmic Coala, com Dual boot sobre Windows 7 64 Bits e está tudo funcionando a 100% (Som, Rede, internet, Impressora e Scanner Epson CX4700), mas gostaria de passar o Windows para Default e não achei o tal menu.lst mesmo estando em /root/grub como root ou digitando sudo su

Algo mudou no Ubuntu 9.10 e o caminho não é mais esse ou está invisível por alguma razão?, aguardo ajuda...
 
por jose (anônimo) em 28 de dezembro de 2009 às 13h58
tentei instalar o ubuntu 9.10 em dual boot com o win 7 mas falhou os dois nem funcionava um nem outro! nem pc tem 2hds um para backup como eu posso fazer para funcionar o dual boot
 
por Nil (anônimo) em 20 de dezembro de 2009 às 22h37
Carlos , não sei se vale pedir tópico por aqui mas vou arriscar, que tal um post do grub 2?
rs rs :) tá um parto achar material decente sobre ele , em português ou não.
fazer uma simples instalação multiboot( com win 7, fedora e ubuntu) não é nada trivial, por enquanto.
 
por Nil (anônimo) em 13 de dezembro de 2009 às 13h19
Com o Karmic Koala e o Grub 2, acho que esse turorial vai precisar de um Up.
:(