Entendendo a configuração do grub, no Ubuntu
Publicado em 19/01/2009 – 19:48por Carlos Morimoto
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.



32 respostas para “Entendendo a configuração do grub, no Ubuntu”
Muito esclarecedor seu artigo. Meus parabéns. Mas me surgiu uma duvida: como faço para desinstalar o GRUB? No meu caso, que tenho Windows XP e Ubuntu 8.10 em dual boot, se eu quisesse desinstalar o Linux e deixar só o Ubuntu? Como eu faria?
Agradeço a atenção.
Corrigindo: Desinstalar o Ubuntu e deixar só o Windows sem ter que formatar tudo.
=D
Tenho aproveitado todas as matérias, inclusive estou montando uma pasta com todas elas. Assim, quando quiser relembrar algum ítem, terei tudo às mãos. Agora, esta do *GRUB veio à calhar. Muito boa mesmo. Valeu muito obrigado.
Pedro, vc pode bootar com o cd de instalação do Windows, entrar no promp de comandos e digitar fixmbr (ou algo parecido, tente usar o comando help para ver a listagem de todos os comandos disponíveis).
Se for win98 apenas digite "fdisk /mbr"
[]'s
Bom, eu estou tentando fazer funcionar a hibernação do ubuntu funcionar, e pelo que vi tem que fazer alterações no grub. Seria interessante comentar sobre isso aqui.
Muito bom seu artigo, bem explicado, terminei curso de hardware e software e termino o de rede em março, sou iniciante no linux e me viro usando Maq. Virtual pois se dá um pau a gente deleta e monta outra, recomendo para os como eu, principalmente. Abraço e obrigado.
Valeu Fábio.
=D
Oh Pedro, você pode usar o um CD do Win98, usa o FDISK /MBR e pronto ! Depois vc usa o Partition Magic para reoganizar o espaço deixado pela partição do Linux.
Espero ter ajudado !
Gostei muito do seu tutorial sobre o grub, meus parabéns. Mas existe a opção de configurar as cores no arquivo, em baixo dessa linha que esta comentada #Pretty colours.
Tenho uma duvida, tem como colocar alguma imagem no grub como plano de fundo.
Como sempre, o padrão aqui do site é muito alto, as matérias são muito boas.
Mas eu tenho uma dúvida:
Seguindo uma matéria aqui do site, eu instalei o kurumin 7 em um pendrive e funcionou normal, mas agora eu formatei o pendrive e instalei outro Linux (Fedora 10) mas esta dando um erro no grub, como se o grub antigo estivesse ainda instalado no pendrive carregando, mas não encontrando as partições antigas, que eram do kurumin.
A mensagem de erro é essa:
GRUB loading stage 1.5
GRUB loading, please wait…
ERROR 22
Como eu faço para retirar ele da memoria do pendrive?
Obrigado pela atenção.
Legal esses artigos sobre Ubuntu. Seria legal um artigo bem abrangente sobre otimização 'brava' do tipo customização para obter o máximo desempenho em sua maquina. Algo que explicasse (por ex.) que drives e serviços são necessários para exatamente o seu computador. Que programas são essencias e o que é 'perfumaria', etc.
Abraço a todos !
Uso dual boot
Tentei usar o grub surgiu isto "erro 17"e nada arrancava.
Troquei o modo de acesso do hd por Lba, o Kurumin funcionou mais o Windows Xp para com a menagem Windows loading,alguem sabe como resolver isso?
Muito bom o artigo, através de suas dicas consegui editar e deixar mais próximo do que preciso. Gostei muito, o mundo Linux tem seus segredos, e seu brilhante trabalho é revelar e compartilhar esses segredos. Obrigado
Muito bom o artigo, mas fiquei pensando se seria interessante falar de como colocar senha no grub para aumentar a segurança, falo isso pq já tentei colocar a senha uma vez , mas quando fiz isto minha inicialização ficou diferente não aparecia mais aquela imagem inicial , no caso do kurumin, mas acredito que nas outras distros seja o mesmo processo, o grub vai direto apra aquela tela padrão, azul e branco, independente da posição em que coloco a informação da senha dele, dentro do arquivo menu.lst
Boa noite!
Me desculpem mas sou totalmente inexperiente no ubuntu 8.10 ou melhor em qualquer distribuição linux.
Já li e reli mas não consegui resolver o problema do grub. instalei o ubuntu 8.10 em um hd externo (não sata).
O problema é que sem o hd ligado ao pc não inicializa o windos vista da a mensagem de erro 21?
Tem como eu resolver isso de uma forma simples?
Grato pela atenção
Possuo um notebook que já veio com o Windows Vista instalado, sem os discos de instalação. Instalei neste o Ubuntu em partições extras, e o Grub na MBR.
Agora pretendo remover o Ubuntu do notebook, e instalá-lo em um novo desktop adquirido.
Minha dúvida é: há como remover o Ubuntu do notebook, restaurando a MBR do Windows, sem ter os discos de instalação do mesmo?
Muito show esse artigo. Vc está de parabéns!
Olá, Morimoto. Onde está escrito "map (hd0) (hd1)" não seria: map (hd0) (hd0)?
Olá,
Instalei o Ubuntu 8.04 dentro do windows.
Como faço para recuperar a grub nesta configuração?
Já varri o google atrás de uma resposta.
Aparece a tela para escolher o SO, mas quando escolho o ubuntu, aparece o erro 15; file not found.
Caso não seja possível, existe alguma forma de recuperar alguns arquivos importantes dentro do ubuntu?
Agradeço muito.
Abraços a todos.
Parabéns pelo comentário e dessa forma que gosto mas do Linux, por pessoa com Carlos que atraves de estudo e pesquisa nos esclarece o maravilhoso mundo Linux.
Muito obrigado, foi de grande valia. Pesquisei muito na rede para chegar à esta solução simples e eficaz.
Fraterno abraço e saúde a todos.
Vc Salvou Minha Vida Com Esse Tutorial Vlw Mesmo
Instalei o Ubuntu 9.10 em dual boot com o Windows XP, so que o Menu.lst esta em branco. Como faco para editar a ordem de boot se nao tem nada no menu.lst?
Com o Karmic Koala e o Grub 2, acho que esse turorial vai precisar de um Up.
:(
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.
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
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…
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.
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
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!!
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 640×480 em png e 74 dpi, fui no linux e usei o comando "convert -resize 640×480 -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!
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?