Guia do Linux/Iniciante+Intermediário/Gerenciadores de partida (boot loaders)/GRUB

Origem: Wikilivros, livros abertos por um mundo aberto.

GRUB[editar | editar código-fonte]

(Os detalhes contidos na seção sobre o GRUB, foram integralmente desenvolvidos por Alexandre Costa alebyte@bol.com.br como contribuição ao guia FOCA GNU/Linux.)

O GRUB (Grand Unified Boot Loader) é mais uma alternativa como gerenciador de boot e apresenta alguns recursos extras com relação as outras opções disponí­veis. Ele é flexí­vel, funcional e poderoso, podendo inicializar sistemas operacionais como o Windows (9x, ME, NT, 2000 e XP), Dos, Linux, GNU Hurd, *BSD, OS/2 e etc. Podemos destacar também o suporte aos sistemas de arquivos ext2 (Linux), ext3 e reiserfs (novos sistemas de arquivos journaling do Linux), FAT16 e FAT32 (Win 9x/ME), FFS (Fast File System usado no *BSD), minix (MINIX OS) e etc.

Por utilizar o padrão Multiboot ele é capaz de carregar diversas imagens de boot e módulos. Por esse motivo ele é o único gerenciador de inicialização capaz de carregar o conjunto de servidores do GNU Hurd. O GRUB também permite buscar imagens do kernel pela rede, por cabo seriais, suporta discos rí­gidos IDE e SCSI, detecta toda a memória RAM disponí­vel no sistema, tem interface voltada para linha de comandos ou menus de escolha, além de suportar sistemas sem discos e terminais remotos.

Como possui inúmeros recursos, será apresentada sua utilização básica, ficando como sugestão ao leitor procurar se aprofundar mais em suas possibilidades de uso e configuração.

Como o GRUB trabalha com discos e partições[editar | editar código-fonte]

O GRUB trabalha com uma notação diferente para apontar discos e partições sendo necessário algumas explicações antes de prosseguir. Veja a tabela comparativa:


     No Linux                No GRUB

     /dev/hda                (hd0)
     /dev/hda1               (hd0,0)
     /dev/hda2               (hd0,1)

     /dev/hdb                (hd1)
     /dev/hdb1               (hd1,0)
     /dev/hdb2               (hd1,1)

     /dev/sda                (hd0)   # Disco SCSI ID 0
     /dev/sda1               (hd0,0) # Disco SCSI ID 0, partição 1
     /dev/sda2               (hd0,1) # Disco SCSI ID 0, partição 2

     /dev/sdb                (hd1)   # Disco SCSI ID 1
     /dev/sdb1               (hd1,0) # Disco SCSI ID 1, partição 1
     /dev/sdb2               (hd1,1) # Disco SCSI ID 1, partição 2

     /dev/fd0                (fd0)

OBS: Os discos IDE e SCSI são referenciados ambos como (hd?) pelo GRUB. Não há distinção entre os discos e de modo geral a identificação de unidades IDE é menor do que qualquer tipo de drive SCSI, salvo se você alterar a sequência de inicialização (boot) na BIOS.

Para saber como o Linux trabalha com partições veja [ch-disc.html#s-disc-id Identificação de discos e partições em sistemas Linux, Seção 5.12].

Instalando o GRUB (legacy, como ficou conhecido, após o advento do GRUB 2)[editar | editar código-fonte]

A instalação do GRUB ao contrário da instalação do LILO ([#s-boot-lilo LILO, Seção 6.1]), só precisa ser executada uma única vez. Caso seja necessária alguma mudança como por exemplo adicionar uma nova imagem, esta pode ser feita apenas editando o arquivo de configuração menu.lst.

No MBR[editar | editar código-fonte]

Um método simples de adicionar o GRUB para gerenciar seu MBR (Master Boot Record) é rodando o seguinte comando (como superusuário):


     # /sbin/grub-install /dev/hda

Este comando grava o GRUB no MBR do primeiro disco e cria o diretório /boot/grub onde estarão os arquivos necessários para o seu funcionamento. Neste ponto o GRUB já está instalado e quando você reiniciar seu computador irá se deparar com uma linha de comandos, onde terá que carregar a imagem do kernel manualmente. Mais adiante será explorada a utilização desta linha de comando que é muito eficiente.

Provavelmente você achará mais interessante copiar o arquivo de configuração de exemplos do GRUB e otimizá-lo í s suas necessidades. Note que isto não exclui a possibilidade de utilizar a linha de comando, apenas cria uma interface de menus onde você pode configurar várias opções de boot de uma forma organizada, automatizada e funcional. Copie este arquivo para o diretório /boot/grub com o seguinte comando:


     # cp /usr/share/doc/grub/examples/menu.lst /boot/grub

Por ser um arquivo de exemplos será necessário otimizá-lo de acordo com suas necessidades, o que será abordado mais a frente.

No disco flexí­vel (somente linha de comando)[editar | editar código-fonte]

Quando criamos um disquete de partida, este funcionará em um sistema qualquer, podendo utilizar este disquete em várias máquinas diferentes ou em uma máquina em que tenha tido algum problema com o GRUB no MBR. Coloque um disquete virgem e digite os seguintes comandos:


     # dd if=/usr/lib/grub/i386-pc/stage1 of=/dev/fd0 count=1
     # dd if=/usr/lib/grub/i386-pc/stage2 of=/dev/fd0 seek=1

Estes comandos permitem que seja apresentada a linha de comando do grub quando este disco for utilizado para boot.

No disco flexí­vel (com interface de menu)[editar | editar código-fonte]

Quando foi criado o disquete de partida anteriormente, este só nos permitia utilizar a linha de comando sendo necessário carregar o menu.lst pelo disco rí­gido (o qual deve estar presente). Em alguns casos este disco satisfaz as necessidades básicas mas pode haver um momento em que você deseje ter um disquete que funcione com vários sistema e não dependa de um disco fixo.

Digite os seguintes comandos:


     # mke2fs /dev/fd0
     # mount /dev/fd0 /floppy -t ext2
     # mkdir /floppy/grub
     # cp /usr/lib/grub/i386-pc/stage[12] /floppy/grub
     # cp /usr/share/doc/grub/examples/menu.lst /floppy/grub
     # umount /floppy
     # /sbin/grub

Este último comando disponibiliza a linha de comando do GRUB. Digite os seguintes comandos:


     grub> install (fd0)/grub/stage1 d (fd0) (fd0)/grub/stage2 p (fd0)/grub/menu.lst
     grub> quit

Neste momento o disquete está pronto. Note que o menu.lst que foi copiado para ele é um arquivo de exemplo, sendo necessário que você o configure de acordo com suas necessidades.

Opções do arquivo de configuração[editar | editar código-fonte]

Esta seção descreve o arquivo menu.lst com explicações sobre as opções mais usadas. Este arquivo é dividido em parâmetros Globais, que afetam o arquivo todo e parâmetros que só tem efeito para as imagens do sistema que será carregado. Algumas opções podem ser passadas para o kernel do Linux no momento do boot, algumas delas também serão detalhadas.

Parâmetros Globais
:* timeout = Define um tempo (em segundos) de espera. Se nenhuma tecla for pressionada, carrega a imagem padrão.
  • default = Define qual será a opção padrão que deve ser automaticamente selecionada quando nenhuma outra for especificada em um tempo definido por timeout.
  • fallback = Caso ocorra algum erro inesperado e a opção padrão não possa ser carregada, este parâmetro define qual a outra opção deve ser utilizada.
  • color = Permite que você escolha as cores usadas no menu de boot.
  • password = Permite que você especifique uma senha. Está será solicitada sempre que houver necessidade de realizar uma função que não seja carregar as imagens disponí­veis, como por exemplo acessar a linha de comandos do GRUB. Você pode utilizar também o parâmetro password para esconder um arquivo que contenha outras configurações, como um menu.lst secreto. O arquivo pode ter um nome qualquer.
     Ex.: password = senha (hd0,0)/boot/grub/secret.conf

Você pode ter várias entradas do parâmetro "password" em um mesmo arquivo sendo que uma delas é usada para bloquear o acesso as imagens/linha de comandos e as outras usadas para carregar arquivos de opções do GRUB. Quando você digitar p para entrar com a senha, você pode digitar a senha que protege as imagens/linha de comandos ou a que é utilizada para carregar os arquivos de opções.

  • hiddenmenu = Está opção faz com que o menu de opções não seja mostrado e de boot na imagem especificada por "default" depois de expirado o tempo definido em timeout. O usuário pode requisitar o menu com as opções pressionando a tecla <ESC> antes que o tempo definido em timeout expire.
Parâmetros que afetam apenas as imagens
:* title = Define um texto que será apresentado no menu de boot para identificar o sistema a ser inicializado.
  • root = Determina qual a partição raiz do sistema a ser inicializada.
  • rootnoverify = Idêntica a opção root, mas não tenta montar a partição-alvo, o que é necessário para alguns sistemas como Dos e Windows.
  • kernel = Nesta opção você informa qual o kernel vai ser inicializado. Você pode passar parâmetros diretamente para o kernel também.
     Ex.: kernel (hd0,0)/boot/vmlinuz-2.4.16 vga=6
  • module = Faz com que algum módulo necessário para o boot seja carregado. Lembre-se que estes não são módulos do kernel (módulos de som, rede, etc.) e sim módulos necessários ao boot de alguns sistemas, como por exemplo o GNU Hurd.
  • lock = Quando você quiser controlar se uma pessoa pode iniciar um sistema que esteja listado nas opções do menu de boot, você pode utilizar esta opção que faz com que a senha especificada com o comando "password" seja solicitada no momento em que se tentar carregar a imagem em questão.
  • pause = Emite uma mensagem na tela e espera uma tecla ser pressionada.
  • makeactive = Torna a partição ativa. Este comando está limitado a partições primárias dos discos.
  • chainloader = Alguns sistemas como o Windows ou Dos armazenam seu próprio gerenciador de boot no iní­cio da partição em que ele está instalado. Para efetuar o boot destes sistemas através do GRUB, você precisa pedir para que o gerenciador de boot de tal sistema seja carregado e faça seu trabalho, dando o boot.
  • hide e unhide = Esconde e mostra partição respectivamente. Estas duas opções são necessárias quando houver mais de uma versão do Dos ou Windows na máquina em partições diferentes, já que estes sistemas detectam automaticamente a partição e quase sempre o fazem de modo errado. Suponha o Windows na primeira partição primária (hd0,0) e o Dos na segunda partição primária (hd0,1). Quando quisermos carregar estes sistemas devemos proceder da seguinte maneira:
     title Windows
     hide (hd0,1)
     unhide (hd0,0)
     rootnoverify (hd0,0)
     chainloader   1
     makeactive

     title Dos
     hide (hd0,0)
     unhide (hd0,1)
     rootnoverify (hd0,1)
     chainloader   1
     makeactive
  • map = Alguns sistemas não permitem ser inicializados quando não estão no primeiro disco (Dos, Win 9x, etc.). Para resolver esta e outras situações o GRUB tem um comando que permite enganar tal sistema mapeando as unidades de disco do modo como lhe for mais conveniente.

Imagine que você tenha o primeiro disco (hd0) com o GNU/Linux instalado e em um outro disco (hd1) com o Windows/Dos instalado. O Windows/Dos não permitem serem inicializados desta forma e como solução você poderia usar a seguinte entrada no arquivo de configurações do GRUB:

     title Windows
     unhide (hd1,0)
     rootnoverify (hd1,0)
     chainloader  1
     map (hd1) (hd0)
     makeactive

Isso faz com que o disco (hd1), onde esta o Windows/Dos, seja apresentado a este sistema como (hd0) "enganado" o mesmo e possibilitando o boot.

Parâmetros enviados diretamente ao kernel
Pode ser necessário passar alguns parâmetros para o kernel no momento do boot. Para maiores informações ver a seção [#s-boot-kernelparam Parâmetros de inicialização passados ao kernel, Seção 6.3]. Você pode passar os parâmetros da seguinte maneira:
     # Exemplo de entrada no 'menu.lst'.
     title Linux 2.4.16
     root (hd0,0)
     kernel (hd0,0)/boot/vmlinuz-2.4.16 vga=6 mem=512M ramdisk=0

Neste exemplo, a linha com o comando "kernel" é usada para indicar qual imagem deve ser carregada. As opções que seguem (vga, mem e ramdisk) são parâmetros que devem ser passados diretamente ao kernel do sistema a ser carregado.

Um exemplo de arquivo de configuração[editar | editar código-fonte]

     # Exemplo de arquivo de configuração do GRUB.
     # Note que você pode usar o  caracter '#' para fazer comentários.

     # Se após 30 segundos nenhuma tecla for pressionada, carrega a imagem padrão.
     timeout 30

     # Define a primeira imagem como padrão.
     default 0

     # Caso a imagem padrão não funcione carrega a imagem definida aqui.
     fallback 1

     # Define as cores que serão usadas no menu.
     color light-cyan/black white/blue

     # Permite utilizar uma senha.
     password minha-senha-secreta
     password minha-senha (hd0,0)/boot/grub/secret.conf

     # Para boot com o GNU/Hurd
     title GNU/Hurd
     root (hd0,0)
     kernel /boot/gnumach.gz root=hd0s1
     module /boot/serverboot.gz

     # Para boot com o GNU/Linux
     title Linux 2.4.16
     # Pede a senha configurada em "password" antes de carregar esta imagem.
     lock
     root (hd0,0)
     # Atente as opções passadas diretamente para o kernel (vga, mem, etc.).
     kernel (hd0,0)/boot/vmlinuz-2.4.16 vga=6 mem=512M ramdisk=0

     # Para boot com o Mach (obtendo o kernel de um disquete)
     title Utah Mach4 multiboot
     root (hd0,2)
     pause Insira o disquete agora!!!
     kernel (fd0)/boot/kernel root=hd0s3
     module (fd0)/boot/bootstrap

     # Para boot com FreeBSD
     title FreeBSD 3.4
     root (hd0,2,a)
     kernel /boot/loader

     # Para boot com OS/2
     title OS/2
     root (hd0,1)
     makeactive
     chainloader  1
     chainloader /boot/chain.os2

     # Para boot com Windows 9x, ME, NT, 2000, XP.
     title Windows 9x, ME, NT, 2000, XP
     unhide (hd0,0)
     rootnoverify (hd0,0)
     chainloader   1
     makeactive

     # Para instalar o GRUB no disco rí­gido.
     title = Instala o GRUB no disco rí­gido
     root = (hd0,0)
     setup = (hd0)

     # Muda as cores.
     title Mudar as cores
     color light-green/brown blink-red/blue

Usando a linha de comandos do GRUB[editar | editar código-fonte]

O GRUB possui inúmeros recursos, mas com certeza um dos mais importantes e que merece destaque é sua linha de comandos. A maioria dos comandos usados no arquivo de configuração menu.lst são válidos aqui e muitos outros estão disponí­veis. Uma breve apresentação da linha de comandos será dada, ficando por conta do leitor se aprofundar o quanto achar necessário em sua flexibilidade.

Quando o GRUB é inicializado você pode se deparar com sua linha de comandos ou se possuir o arquivo menu.lst configurado, um menu de escolha. Mesmo usando os menus de escolha você pode utilizar a linha de comandos, bastando para isso seguir as instruções no rodapé da tela onde o GRUB nos informa que podemos digitar e para editar as entradas de boot ou c para ter acesso a linha de comandos (lembre-se que pressionar <ESC> faz com que você volte aos menus de escolha).

Caso a opção password tenha sido especificada no arquivo menu.lst, será necessário antes de acessar as outras opções (que estarão desabilitadas) pressionar p e entrar com a senha correta.

Agora, com acesso a linha de comandos, você pode verificar os comandos disponí­veis pressionando duas vezes a tecla <TAB>. Note que você também pode utilizar esta tecla para completar nomes de comandos bem como parâmetros de alguns comandos.

Alguns comandos disponí­veis:

  • cat = Este comando permite verificar o conteúdo de um arquivo qualquer, o qual deve estar gravado em um dispositivo ligado a sua máquina. Embora seja um recurso útil, nenhuma permissão de acesso é verificada e qualquer pessoa que tenha acesso a linha de comandos do GRUB pode listar o conteúdo de arquivos importantes. Para contornar este problema o parâmetro password é utilizado no arquivo menu.lst e faz com que uma senha seja solicitada antes de liberar o acesso a linha de comandos. Não esqueça que ainda é possí­vel utilizar um disquete com o GRUB para dar boot na máquina o que permite usar a linha de comandos pelo disquete.
     Ex.: grub> cat (hd0,0)/etc/passwd
  • cmp = Este comando é utilizado para comparar dois arquivos.
     Ex.: grub> cmp (hd0,0)/arquivo1 (hd0,0)/arquivo2

  • configfile = Carrega um arquivo de configuração do GRUB.
     Ex.: grub> configfile (hd0,0)/boot/grub/menu.lst
  • displayapm = Mostra informações sobre APM.
  • displaymem = Mostra informações sobre a memória RAM.
  • find = Permite encontrar um arquivo. A saí­da deste comando disponibiliza o nome completo do caminho para o arquivo e a partição onde o mesmo está localizado.
     Ex.: grub> find stage1
  • geometry = Mostra informações sobre a geometria reconhecida de seu drive e permite que você escolha a geometria desejada caso esta esteja sendo reconhecida erroneamente.
  • help = help "comando" para ver a ajuda.
     Ex.: help color
  • install = Instala o GRUB, embora não seja recomendado o uso deste comando diretamente, pois é possí­vel esquecer ou trocar facilmente um parâmetro e sobrescrever a tabela de partições de seu disco.
     Ex.: install (fd0)/grub/stage1 d (fd0) (fd0)/grub/stage2 p (fd0)/grub/menu.lst
  • setup = Você pode usar este comando para instalar o GRUB. Note que sua sintaxe é menos complexa do que a usada em install.
     Ex.:
     grub> root = (hd0,0)
     grub> setup = (hd0)

  • quit = Abandona a linha de comandos do GRUB.
  • reboot = Reinicia o computador.
  • boot = Efetua o boot. Suponha o Linux instalado em (hd0,0), podemos passar os seguintes comandos na linha de comandos para efetuar o boot de uma imagem do GNU/Linux:
     grub> root (hd0,0)
     grub> kernel (hd0,0)/boot/vmlinuz-2.4.16 vga=6
     grub> boot

Muitos outros comandos estão disponí­veis tanto na linha de comandos do GRUB quanto no arquivo de configuração menu.lst. Estes comandos adicionais podem ser necessários apenas para algumas pessoas e por isso não serão explicados.

Removendo o GRUB do MBR[editar | editar código-fonte]

Não existe a necessidade de se remover o GRUB do MBR pois não há utilização para o mesmo vazio. Para substituir o GRUB do MBR é necessário apenas que outro gerenciador de boot escreva algo nele. Você pode seguir o procedimento de instalação do LILO para escrever algo no MBR ou usar o comando fdisk /mbr do DOS.

Como obter informações mais detalhadas[editar | editar código-fonte]

Para obter informações mais detalhadas sobre o GRUB é recomendado o site oficial do mesmo, o qual está disponí­vel apenas na lí­ngua inglesa. Os seguintes sites foram utilizados na pesquisa: