Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Tudo sobre o GRUB

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    Tutorial Tudo sobre o GRUB

    Com o Linux ficando cada vez mais popular, nada mais natural que muitas pessoas terem instalados em seus computadores mais de um sistema operacional. Seja por dual boot ou por virtualização, os gerenciadores de boot sempre existem, até mesmo para um único SO.



    Neste artigo vamos entender como o gerenciador de boot mais famoso dos últimos tempos funciona, como configurá-lo, como recuperá-lo em caso de falhas ou perdas e estudar sua interação com o sistema. O GRUB (GRand Unified Bootloader) acompanha muitas distribuições atuais como Ubuntu, Debian e OpenSUSE. Foi escrito por Erich Boleyn e agora é mantido pela FSF (Free Software Foundation). Apesar de ser um pouco mais complexo que outros gerenciadores de boot, o GRUB, se bem entendido, é uma ferramenta impressionante e bem feita. Descubra neste artigo o porquê dessa afirmação.



    Parte 1 - A função de um bootloader

    Parte 2 - Estrutura de armazenamento do GRUB

    Parte 3 - Setor de inicialização e MBR

    Parte 4 - Como instalar

    Parte 5 - Configuração básica

    Parte 6 - Cores e imagens



    1. A função de um bootloader

    Esta primeira pergunta pode surgir na mente de alguns leitores. Antes de falar sobre o GRUB, vamos definir o que é e qual a função de um bootloader. Tudo começa com o BIOS (Basic Input/Output System - Sistema Básico de Entrada e Saída), que é o programa responsável por executar o teste básico de hardware chamado POST (Power On Self Test - Auto-teste ao ligar) quando o PC é ligado. Depois deste teste o BIOS procura por um bootloader nos setores de boot de vários dispositivos de armazenamento ou de rede. A ordem de busca nos dispositivos é configurada no SETUP - programa que configura o BIOS.



    O BIOS não sabe inicializar um sistema operacional. Ele só busca um bootloader e somente nos setores de boot dos dispositivos ou pela rede (boot PXE). É de responsabilidade do BIOS buscar nesses dispositivos pelo bootloader e, caso não encontre em nenhum deles (configurados previamente no SETUP - opção boot order), o BIOS retorna um erro e a inicialização do PC é interrompida. É por isso que o sistema não inicializa quando o HD principal está desconectado ou quando há um disquete no drive e o drive de disquete está configurado na ordem de boot como mais prioritário que o HD e assim por diante.



    Quando o BIOS acha o bootloader, o carrega para memória do PC e se encerra. A partir de agora, quem controla o PC é o bootloader. Esse bootloader pode oferecer um menu como fazem o GRUB e o LILO ou podem simplesmente apontar para o início de uma partição, sem dar-te opções de escolha, como os do Windows antigos. Todavia, todos são bootloaders. Eles é que vão iniciar o sistema operacional.





    2. Estrutura de armazenamento do GRUB

    Quando o GRUB é instalado, são criados executáveis em áreas diferentes do disco rígido. Esses executáveis são chamdos de estágios (stages). São eles:



    stage1 - instalado no MBR (Master Boot Record - Setor Mestre de Inicialização) ou no setor de boot de uma partição. Em ambos os casos, o setor é limitado a 512 bytes de tamanho. Seria quase impossível para Erich Boleyn escrever um software que coubesse num setor de 512 bytes. Para contornar esta limitação, o stage1 só verifica a geometrica do disco rígido contra erros de configuração e chama outro executável que pode ser o stage1.5 ou o stage2, dependendo do caso.



    stage1.5 - este executável define o sistema de arquivos utilizado pela partição que contém GRUB. Mas nem sempre o stage1.5 é utilizado porque os sistemas de arquivos mais comuns já são suportados nativamente pelo GRUB e, a não ser que o hardware realmente exija, o stage1 vai pular diretamente para o stage2.



    stage2 - aqui é exibido o menu ou a CLI, dependendo da configuração. Então o usuário seleciona uma opção e o stage2 carrega o sistema operacional escolhido.





    3. Setor de inicialização e MBR

    Depende. Se estivermos falando do MBR, ele é o primeiro setor do disco rígido. Se for o setor de inicialização de uma partição, ele é o primeiro setor da partição. Simples, não? Vamos fazer um pequeno laboratório para demonstrar onde o grub fica, logo abaixo.



    O primeiro passo é instalar um editor de disco rígido. O Linux tem o lde, que é bem conhecido. Você até pode usá-lo mas neste artigo vamos demonstrar com o ncurses-hexedit. Se estiver no Ubuntu ou em distribuições baseadas em Debian, pode usar o APT:

    Código:
    $ sudo apt-get install ncurses-hexedit
    Se preferir usar o código-fonte para compilar ou obter outros executáveis, acesse a página do autor do programa, Adam Rogoyski.



    No PC que usamos para escrever o artigo, usamos um disco rígido SATA onde está instalado o Ubuntu Hardy e o grub foi instalado no MBR. Sabemos que o Linux reconhece este tipo de HD como /dev/sdx, onde x é a letra que indica a posição do HD na placa-mãe (primeiro HD, segundo HD, etc). Vamos ver o conteúdo do disco rígido:

    Código:
    $ sudo hexeditor -d  /dev/sda
    Vamos entender a saída:



    Esses são os dados presentes no nosso disco rígido, sendo exibidos para nós em hexadecimal e o equivalente em ASCII.



    A coluna OFFSET nos mostra o endereço (posição) do byte em questão, onde 0x00000000 é o primeiro byte do disco rígido, 0x00000001 é o segundo e assim por diante. O nosso primeiro setor, que é o MBR, tem 512 bytes, como falamos anteriormente. Logo, o MBR vai de 0x00000000 até 0x00000200 (512 em decimal equivale a 200h - em hexa).



    PS.: A notação hexa tem pelo menos três formas diferentes. O hexa 4D pode ser escrito como 0x4D, 4Dh ou 4DH.



    Descendo um pouco vemos, na coluna ASCII, a string "GRUB .Geom.Hard Disk.Read. Error" (ver imagem abaixo). Este é um erro acusado pelo GRUB quando há parâmetros de geometria de disco incorretos. Se você esqueceu quem faz isso, volte ao item 2 e releia. Estamos falando do stage1. Perceba que o limite de 512 bytes (offset 0x200) não é estrapolado. Na verdade o MBR pode ocupar até 446 bytes dos 512. O resto é reservado para a tablela de partições que, nosso caso, pasmem, é a FAT. Isso mesmo. Mesmo utilizando um sistema Linux, o formato de tabela de partições padrão é o MS-DOS/FAT, por conveniência.



    Se você reperar bem, na imagem acima, até um pouco antes de 1BE (446) há alguns zeros, que indicam o fim do MBR. Em 1BE já começa a tabela de partições com o byte 80h.



    Se descermos mais um pouco, vamos nos deparar com uma string sobre o stage1.5:



    E se descermos mais, sobre o stage2:



    O stage2 é o maior executável. Aqui ele ocupa 108356 bytes. Bem, isso dá mais de 7000 linhas de offsets. Para sair do hexeditor, aperte CTRL+C.





    4. Como instalar

    Muitas distribuições atuais trazem o GRUB por padrão. Na própria instalação da distribuição, o GRUB já é instalado. Geralmente o usuário que está instalando escolhe onde instalar, se no MBR ou no setor de inicialização da primeira partição do primeiro disco.

    De qualquer forma, se desejar ter acesso so GRUB dentro do sistema, pode instalar via repositório (com certeza todos tem).

    Código:
    No Ubuntu:
    
    $ sudo apt-get install grub
    
     
    
    No SUSE:
    
    $ zypper install grub
    
     
    
    No Fedora:
    
    $ yum install grub
    
     
    
    Enfim, a regra é usar o seu gerenciador de pacotes e instalar. Como alternativa, pode-se baixar o código-fonte, compilar e instalar, mas antes é necessário instalar as dependências, caso ainda não estejam instaladas:
    
     
    
    $ sudo apt-get install bison gcc-4.1 g++ make liblzo2-dev
    
    $ wget -c ftp://alpha.gnu.org/gnu/grub/grub-1.96.tar.gz
    
    $ tar -xvzf grub-1.96.tar.gz
    
    $ cd grub-1.96.tar.gz
    
    $ ./configue
    
    $ make
    
    $ sudo make install
    5. Configuração básica

    O GRUB guarda sua configuração e seus binários todos em /boot/grub. Uma listagem típica deste diretório segue abaixo:

    Código:
    $ ls -lah /boot/grub/
    total 216K
    drwxr-xr-x 3 root 999 4,0K 2008-06-24 00:23 .
    drwxr-xr-x 3 root root 4,0K 2008-06-24 00:23 ..
    -rw-r--r-- 1 root 999 197 2008-04-27 21:44 default
    -rw-r--r-- 1 root 999 45 2008-04-27 21:44 device.map
    -rw-r--r-- 1 root 999 7,9K 2008-04-27 21:44 e2fs_stage1_5
    -rw-r--r-- 1 root 999 7,8K 2008-04-27 21:44 fat_stage1_5
    drwxr-xr-x 2 root root 4,0K 2008-06-12 02:42 images
    -rw-r--r-- 1 root 999 16 2008-04-27 21:45 installed-version
    -rw-r--r-- 1 root 999 8,5K 2008-04-27 21:44 jfs_stage1_5
    -rw-r--r-- 1 root root 4,3K 2008-06-24 00:23 menu.lst
    -rw-r--r-- 1 root root 4,3K 2008-06-24 00:23 menu.lst~
    -rw-r--r-- 1 root 999 7,2K 2008-04-27 21:44 minix_stage1_5
    -rw-r--r-- 1 root 999 9,5K 2008-04-27 21:44 reiserfs_stage1_5
    -rw-r--r-- 1 root 999 512 2008-04-27 21:44 stage1
    -rw-r--r-- 1 root 999 106K 2008-04-27 21:45 stage2
    -rw-r--r-- 1 root 999 9,1K 2008-04-27 21:44 xfs_stage1_5
    Dos stages nós já falamos anteriormente, então vamos listar a função dos arquivos de configuração:



    default - este é o arquivo de configuração que detém qual a opção padrão de inicialização. Por exemplo, você pode ter na sua inicialização do GRUB, os sistemas: Fedora, Windows XP e Arch Linux. Um deles você configurará como padrão para ser inicializado caso nenhum seja escolhido durante a inicialização. Mas você não vai digitar diretamente o nome do sistema no arquivo default, e sim usar o comando grub-set-default, passando para ele como parâmetro o nome do bloco que refere-se ao sistema desejado. Esta configuração pode ser feita no menu.lst, que fica bem mais fácil.



    device.map - esta é a lista de dispositivos de armazenamento que o GRUB detectou na instalação. Veja um exemplo:

    Código:
    $ cat /boot/grub/device.map 
    (hd0) /dev/sda
    (hd1) /dev/sdb
    (hd2) /dev/sdc
    No exemplo acima, o GRUB detectou três discos rígidos SATA/SCSI no PC onde está instalado. O GRUB chama de hdx os discos, onde x é um número, começado em 0 para o primeiro disco (/dev/hda ou /dev/sda). O GRUB não faz distinção entre SATA/SCSI e IDE no que diz respeito ao nome do dispositivo. Ou seja, independente da interface do disco, ele entrará na numeração hdx, tendo como base a posição do dispositivo na placa-mãe.



    installed-version - este arquivo contém o número da versão do GRUB instalada. Seu conteúdo é similar a saída do comando grub --version.



    menu.lst - este é onde mais vamos mexer. A maioria dos sistemas com GRUB exibe um menu de inicialização. Este é o arquivo de configuração deste menu. Nele, temos diversas opções, que veremos abaixo.

    Vamos ver um conteúdo de exemplo do menu.lst, mas vamos filtrar a saída para exibir somente as linhas que não estão comentadas (do contrário, a saída será muito grande):

    Código:
    No exemplo acima, o GRUB detectou três discos rígidos SATA/SCSI no PC onde está instalado. O GRUB chama de hdx os discos, onde x é um número, começado em 0 para o primeiro disco (/dev/hda ou /dev/sda). O GRUB não faz distinção entre SATA/SCSI e IDE no que diz respeito ao nome do dispositivo. Ou seja, independente da interface do disco, ele entrará na numeração hdx, tendo como base a posição do dispositivo na placa-mãe.
    
     
    
    installed-version - este arquivo contém o número da versão do GRUB instalada. Seu conteúdo é similar a saída do comando grub --version.
    
     
    
    menu.lst - este é onde mais vamos mexer. A maioria dos sistemas com GRUB exibe um menu de inicialização. Este é o arquivo de configuração deste menu. Nele, temos diversas opções, que veremos abaixo.
    
    Vamos ver um conteúdo de exemplo do menu.lst, mas vamos filtrar a saída para exibir somente as linhas que não estão comentadas (do contrário, a saída será muito grande):
    Agora vamos explicar cada linha deste exemplo.



    default 0 - esta linha configura que o sistema padrão a ser selecionado é o de número 0. Para saber qual é o sistema de número 0, procure pelo primeiro "title" (sem aspas) no menu.lst. A segunda ocorrência de "title" refere-se ao sistema de número 1 e assim por diante.



    timeout 3 - este é o tempo, em segundos, de espera para que o usuário selecione um sistema no menu. No caso desta configuração, se o usuário não escolher um sistema em 3 segundos, o sistema padrão será carregado.



    hiddenmenu - se esta linha estiver presente, o menu não aparecerá. Ao invés dele, uma mensagem com o texto "Pressione ESC para exibir o menu" surgirá na tela. Se em X segundos (configurados no timeout) o usuário não pressionar o ESC, o sistema padrão será carregado. Para desabilitar esta função remove (ou comente) esta linha.



    splashimage - esta opção indica o caminho para uma imagem de fundo do menu, no formato xpm.gz. Veremos como adicionar uma imagem de fundo mais adiante.



    title - aqui definimos um título para um novo bloco (uma nova opção no menu do grub). Pode ser qualquer coisa.



    root - esta sub-opção de title, indica o HD e a partição so sistema que será inicializado. O GRUB numera as partições no formato (hdx,y) onde x é o número do HD (como explicado acima, quando falamos do device.map) e y é o número da partição onde a primeira partição é a 0 (zero) e assim por diante.

    Opções dos sistemas baseados em UNIX e GNU/Linux



    kernel - no caso do Linux, ainda é necessário especificar o caminho absoluto da imagem do kernel que será inicializada. Este caminho (e ocasionalmente algumas opções) fica nesta linha.



    initrd - esta opção define a imagem que será utilizada como Initial RAM Disk. Trocando em miúdos, define a imagem que será posta em RAM disk (emulação de disco rígido em memória) na inicialização.



    Esses são os comandos mais usados para inicialização de sistemas Linux. Existe uma gama enorme de opções que você pode conferir lendo os manpages do GRUB. Vale a pena.



    Opções dos sistemas Windows



    Um bloco típico para inicizaliação de sistemas Windows é:

    Código:
    title Windows Vista Ultimate
    
    root (hd1,0)
    
    makeactive
    
    chainloader +1
    Vamos às explicações das novas opções:



    makeactive - marca a partição em questão como ativa (permitindo ser inicializada) pois o Windows tem o seu próprio bootloader.



    chainloader +1 - esta opção carrega/lê um setor (o primeiro) da partição em questão, que é justamente onde está o bootloader próprio do Windows e a partir daí o sistema é inicializado sem problemas.





    6. Cores e imagens



    O menu do GRUB é muito simples e é exibido por pouco tempo. Mesmo assim, existem alguns recursos para deixar o GRUB mais bonito. Um deles é alterar suas cores.



    Para mudar as cores do menu, use a opção color a/b c/d no seu menu.lst, onde:



    a - é a cor das opções.

    b - é a cor do fundo.

    c - é a cor da opção selecionada.

    d - é a cor do cursor de seleção.



    As cores válidas para a,b,c, d são:



    * black (preto)
    * blue (azul)
    * green (verde)
    * cyan (ciano)
    * red (vermelho)
    * magenta (púrpura)
    * brown (marrom)
    * light-gray (cinza-claro)



    As cores que são válidas somente para a e c são:



    * dark-gray
    * light-blue
    * light-green
    * light-cyan
    * light-red
    * light-magenta
    * yellow (amarelo)
    * white (branco)



    Portanto, para um menu no melhor estilo "Matrix", seu menu.lst poderia conter a linha:

    color green/black light-green/black



    Para usar uma imagem de fundo, esta deve estar no formato XPM, medir 640x480 e usar uma paleta de 14 cores. Por fim, deve também estar nomeada para splash.xpm e compactada com o gzip como splash.xpm.gz. Todas essas exigências são para reduzir o tamanho ao máximo pois o menu é carregado ainda no MBR. Vamos ver como converter uma imagem para este formato:



    Abra no GIMP a imagem que você deseja (neste exemplo, vamos usar o logotipo antigo de nosso site), depois vá em "Imagem > Redimensionar" e coloque os valores como na figura abaixo:



    Depois, temos que converter a paleta de cores para 14 cores. Vá em "Imagem > Modo > Indexado", sete a paleta para 14 cores e clique em "Converter".



    Agora clique em "Salvar como..." e nomeie como splash.xpm. Ao clicar em salvar, o GIMP detecta o formato desejado pela extensão digitada e já cria nosso arquivo no formato certo (XPM).



    É necessário compactar a imagem com o gzip e depois colocar em /boot/grub. Para isso, vamos ao terminal:

    Código:
    $ gzip slpash.xpm
    
    $ sudo cp splash.xpm.gz /boot/grub
    Agora adicione a linha a seguir ao seu menu.lst:
    Código:
    splashimage=(hd0,0)/boot/grub/splash.xpm.gz
    Substitua (hd0,0) pela sua partição Linux. Salve e reinicie. Aqui, nosso resultado segue abaixo:

    SEJA ÚNICO E NÃO IMITE OS OUTROS E NEM COLOQUE PARA TRÁS QUEM ESTA NO COMEÇO AGORA.

    USEM SEUS CONHECIMENTOS PARA O BEM E NÃO PARA O MAL AMIGOS PORQUE O MAL NÃO LEVA A NADA E O BEM SEMPRE GANHAREMOS COISAS MELHORES.


    Similar Threads

  • Font Size
    #2
    ótimo tópico continue assim!

    Comment


    • Font Size
      #3
      Obrigado pela força mais agora eu também estou com mais dois novos sites que o link esta qui em baixo mais por enquanto o site esta em manutenção por que ele esta sendo criado hoje mais pretendo daqui a uma semana colocar os dois já no ar.
      SEJA ÚNICO E NÃO IMITE OS OUTROS E NEM COLOQUE PARA TRÁS QUEM ESTA NO COMEÇO AGORA.

      USEM SEUS CONHECIMENTOS PARA O BEM E NÃO PARA O MAL AMIGOS PORQUE O MAL NÃO LEVA A NADA E O BEM SEMPRE GANHAREMOS COISAS MELHORES.


      Comment


      • Font Size
        #4
        Seria interessante que vc posta-se o nome do autor...
        Otimo texto,explica bem sobre o grub.
        sigpic

        Comment


        • Font Size
          #5
          Faltou os créditos!
          Se foi você qeum fez, ponha o seu...

          Aguardo sua resposta para a edição do tópico!
          Não te engane. De Deus não se zomba, o que o homem plantar, é o que ele vai colher. (Gálatas 6:7)


          sigpic


          Comment


          • Font Size
            #6
            acho que não foi ele que fez,ali na grub esta escrito "fernando" e o nome do mano e "alax".

            Comment


            • Font Size
              #7
              Os Creditos finais não é meu e sim de Fernando.
              SEJA ÚNICO E NÃO IMITE OS OUTROS E NEM COLOQUE PARA TRÁS QUEM ESTA NO COMEÇO AGORA.

              USEM SEUS CONHECIMENTOS PARA O BEM E NÃO PARA O MAL AMIGOS PORQUE O MAL NÃO LEVA A NADA E O BEM SEMPRE GANHAREMOS COISAS MELHORES.


              Comment


              • Font Size
                #8
                Vlw pelo post muito bom!

                Comment

                X
                Working...
                X