segunda-feira, 16 de janeiro de 2012

Entendendo um pouco do GRUB

O GRUB 2 (GRand Unified Bootloader), é um boot loader (gerenciador de boot), que pode carregar vários sistemas operacionais diferentes. Originalmente foi escrito por Erich Stefan Boleyn.

Normalmente os boot loaders, ficam armazenados na MBR (Master Boot Record) do disco de inicialização, que são os primeiros 512 bytes do dispositivo.

O Grub é responsável por carregar o kernel e a imagem de inicialização (initird), e somente então passar para o init a responsabilidade de carregar o "restante do sistema".


A partir da versão 6 do Debian (Squeeze), o GRUB2 é o responsável pela inicialização do sistema. Um pouco diferente da anterior, em relação à forma de configurar e os arquivos de configuração.


As melhorias do Grub2 são:
  • Apoio a script
  • Carregamento de módulos dinâmicos
  • Modo de recuperação
  • Menus personalizados
  • Temas
  • Suporte ao menu gráfico e splash
  • Boot de imagens ISO diretamente do disco rígido ou outra mídia
  • Nova estrutura de arquivos de configuração
  • Suporte Universal a UUIDs


Diferenças entre GRUB e GRUB v2

Em um primeiro momento, os arquivos do GRUB 1 e 2 se parecem muito, mas não se enganem, são muito diferente. Vejamos alguns itens que foram modificados:
  • Não existe mais o /boot/grub/menu.lst, ele foi alterado para /boot/grub/grub.cfg, e diferente do anterior, não é este o local que usamos pra configurá-lo.
  • O grub.cfg é sobrescrito na inicialização, ou quando executado grub-update ou grub-update2.

  • O usuário pode criar um arquivo personalizado, para suas próprias entradas, no /etc/grub/40_custom ou similar.

  • O arquivo primário de configuração do grub está localizado em /boot/default/grub, mas os arquivos do /etc/grub.d, também podem ser utilizados para configurar.

  • E MUITO IMPORTANTE, a numeração das partições foi alterada, a primeira partição não mais a 0 (zero) e sim a 1, mas os discos ainda iniciam sua numeração com zero.

  • Um item muito legal é que sistemas operacionais, ou outros kernels que foram compilados, podem ser adicionados com um simples comando "update-grub" ou "update-grub2". E os arquivos alterados como o custom da pasta /etc/grub.d, só terão efeito quando o mesmo comando “update-grub” for executado.
Enfim, vamos entender tudo isso.

Agora não se edita mais o arquivo grub.cfg (alternativo ao menu.lst), pois o mesmo é sobrescrito a cada boot (não sempre), pois o Grub 2 recria esse arquivo, baseado nos arquivos de configuração. Mas o interessante é que se não rodar o comando update-grub, nada acontecerá.



Estrutura do GRUB v2

/boot/grub/grub.cfg              Este é o arquivo principal que substitui o menu.lst, mas ao contrário do menu.lst esse arquivo não pode ser editado.
/boot/default/grub                  Este arquivo contêm a seção superior do menu.lst do GRUB v1.
/etc/grub.d                                Este é novo diretório do GRUB, que contêm os scripts de inicialização. 


Esses scripts são blocos de construção utilizados a partir do grub.cfg.
Quando executado o update-grub, é lida a pasta /etc/grub.d e são adicionados à configuração deste arquivo, cada arquivo existente, sendo por ordem numérica, tal como 10_linux, será lido primeiro que 20_custom, e assim sucessivamente. É recomendado usar o 41_custom, para entradas personalizadas.
Vejamos os arquivos padrões nesta pasta:
  • 00_header: Este arquivo carrega as configurações do /etc/default/grub, incluindo timeout, default boot entry, e outras.
  • 05_debian_theme: Configura splash image, fundo, cores e temas.
  • 10_linux: Carrega o menu com as entradas para a distribuição instalada.
  • 30_os_prober: Este arquivo irá verificar no disco rígido por outros sistemas operacionais e adicioná-los no menu de inicialização.
  • 40_custom: Para adicionar entradas de menu personalizados que serão inseridas no grub.cfg depois de executar o update-grub.

Configuração do GRUB

O arquivo de configuração /etc/default/grub é o principal arquivo para alterações padrões.


Enquanto o /etc/grub/default contém customizações a pasta /etc/grub.d contêm informações sobre o menu do GRUB, e scripts para boot de sistemas operacionais. Quando o comando update-grub é executado, ele lê o conteúdo do arquivo grub e o diretório grub.d e cria o grub.cfg.

Os script em grub.d foram feitos para serem executados, ou seja, o bit de execução deve estar ligado, caso contrario terá problemas com isso. Vamos dar uma olhada nas opções do /etc/boot/grub.



Entradas personalizadas

As entradas personalizadas devem ser feitas no arquivo 41_custom, ou outro qualquer, mas o mesmo deve estar com o bit de execução ligado, e dentro de /etc/grub.d. O uso do grub.d segue algumas condições:
  • O nome dos arquivo determina a ordem das seleções no menu. Nomes numéricos são executados primeiro, seguido por nomes alfabéticos.

  • Entrada 10_linux, aparecerá antes que 30_os_prober, que será colocada antes de uma entrada por exemplo minha_entrada.

  • Os usuários que desejam que suas entradas apareçam primeiro no menu principal, podem nomear um arquivo com menor numero, como 01_xxx que suas listas estarão em primeiro no menu.

  • O arquivo deve ter permissão de execução.

  • O arquivo grub.cfg é criado automaticamente através da pasta /etc/grub.d, então os arquivos personalizados normalmente são estáticos, há não ser que o usuário crie scripts para alterá-los automaticamente.

  • Caso venha alterar a ordem do menu, é necessário alterar o /etc/default/grub colocando a ordem de inicialização em DEFAULT.
     
Criando entradas personalizadas

Alguns itens foram alterados em relação ao GRUBv1, mas sua sintaxe não é difícil. Vejamos somente alguns itens que devem ser seguidos.
  • Os novos valores em relação ao Grub v1 são:

    • titile deve ser mudado para menuentry
    • root para a set root=
    • Kernel passa a ser linux
    • qualquer designação de partição (sda1,sdb2) deve ser mudada porque no Grub a primeira partição é 0 e no grub v2 é 1.

  • No menuentry algumas regras devem ser seguidas:

    • A primeira linha inicia com menuentry e finaliza com {
    • O que vai entre aspas é o que vai aparecer no menu do Grub v2.
    • A última linha do menuentry deve ser }
    • Não deixe espaços em branco no fim da linha
    • A linha root= deve apontar para a localização de inicialização do GRUB2 (hdxx, sdxx)
    • A linha Linux (root) deverá apontar para a partição do sistema.
    • Caso ocorra erro ao encontrar o kernel tento usar o UUID do dispositivo.

  • Dessa forma a sintaxe é essa abaixo :

    menuentry ” Um titulo qualquer” {
    set root=(hdX,Y)
    – boot parameters –
    }

    Podemos ver então que o que vem depois de menuentry é apenas um título, set root= deverá indicar onde está o boot, seja na mesma partição raiz ou em uma separada.
    Em boot parameters podemos ter por exemplo:

    linux /boot/vmlinuz
    initrd /boot/initrd

    Ou seja, a informação onde está nosso kernel e a imagem de inicialização.

  • Exemplo de entrada do menuentry:
menuentry “Linux 3.0″ {
set root=(hd0,2)
linux /boot/vmlinuz-3.0.2 root=UUID=543999-9898-98989 ro quiet splash
initrd /boot/initrd.img-3.0.2
}

menuentry “System Rescue CD” {
set root=(hd0,8)
linux /sysrcd/rescuecd subdir=sysrcd setkmap=us
initrd /sysrcd/initram.igz
}


O recurso visto acima “System Rescue” é muito interessante, pois estamos carregando uma imagem diretamente do nosso disco rígido, onde se aplica outro recurso bastante interessante, a inicialização de uma imagem ISO pelo GRUB, mas isso será explicado depois.




Adaptado de: StatoBlog

Nenhum comentário:

Postar um comentário

DropBox