Infra - Linux

Novidades e mudanças na estrutura e configuração do Grub, fique por dentro!

Neste documento abordo as mudanças existentes na nova versão do Grub designada grub2, que por sua vez traz novas formas e conceitos para a manipulação do mesmo. Vale a pena conferir.

por José Cleydson Ferreira da Silva



Índice

1. Introdução

2. Setor de Inicialização

3. O que mudou e o que há de novo na versão 1.97 do Grub

4. Instalação do grub2

5. Configuração dos arquivos do Grub

6. Considerações

6.1 Agradecimentos

6.2 Sobre o Autor

6.3 Contatos

6.4 Referência Bibliográfica

1. Introdução

Para aqueles que utilizaram o gerenciador de boot Lilo (Linux Loader) durante um bom tempo podem falar, ele era bem simples de se configurar, lembro-me que utilizei-o na distro Kurumin 5 e tive opções de usa-lo no Kurumin 7em casos de erros do grub, porém com a sua saída de sena e vigorando o grub, muitas pessoas passaram a buscar informações de como configurar o novo gerenciador de boot. Como as pessoas estavam acostumadas como o diretório /etc/lilo.conf, tiveram que se adaptar as novas formas e convenções de configuração. Durante muito tempo a configuração do grub se dava por intermédio do diretório /boot/grub/menu.lst, o que ocasionaram algumas mudanças na versão 1.97(beta). Agora há uma nova forma de se configurar e um novo arquivo para se configurar. E o objetivo desse é esclarecer uma melhor forma de se entender e configurar o seu gerenciador de boot. Com isso iremos falar um pouco dos setores de inicialização e a configuração do grub. Mas além dessas mudanças novas funções estão por vir juntamente da nova versão.

2. Setor de inicialização

Sempre que ligamos o nosso computador, existem instruções que no indicam inicialização do sistema, ou um boot através da rede o que acontece com terminais LTSP(Linux Terminal Server Project) . Mas é importante lembrar alguns conceitos envolvidos na inicialização do sistema. Quando instalamos o sistema operacional Linux em um disco rígido o próprio sistema se encarrega de deixar um um espaço reservado para o primeiro setor, onde conterão informações importantes para a inicialização de um sistema, esse setor é chamado de MBR (Master Boot Record). A MBR é um setor extremamente pequeno que possui informações super importantes para o arranque do sistema operacional, situada no primeiro setor do disco rígido: a trilha zero. Possuindo apenas 512 bytes que é dividida conforme uma estrutura organizacional do disco conforme mostra a tabela 1.

Tabela 1

Código de arranque

Tabela de Partição

Assinatura

446 bytes

16 bytes

16 bytes

16 bytes

16 bytes

2 bytes

Os primeiros 446 bytes possuem informações de onde iniciar o sistema, e para onde irá apontar quando iniciar, ou seja códigos de inicialização.

Os 16 bytes de cada celula da coluna de partições são responsáveis por informar onde iniciam e terminam cada partição do sistema e o tamanho que cada uma possui.

E as assinaturas ocupam 2 bytes.

Em casos de instalação do Sistema Operacional Windows, nas versões existentes o gerenciador de boot durante a sua instalação não mantem essa tabela, ocasionado uma destruição da mesma quando instalado, que causa uma perda total da MBR, porém a eficiência do grub é a permanência dessa tabela quando instalado respeitando a sequencia já estabelecida por sistemas operacionais instalados, portanto, ele permite que arranque você tenha opção de escolher em qual sistema você quer usar, o que não há similar no windows. Como já sabemos parcialmente o que acontece com os setores de inicialização vamos entender o que há de novo ou que mudou na nova versão do grub. É por essa e outras razões que o diretório /boot não necessita de grande espaço em disco, são suficientes 100 megas para esse diretório, mas lembre-se na dúvida deixe sempre uma quantidade de espaço livre para casos de atualizações do kernel e arquivos de inicialização, quando há uma atualização e o diretório /boot estiver com pouco espaço ocorrerá um erro de instalação culpando no dpkg (“Atenção esse o pulo do gato”). Bom mas por que deixar o /boot em uma partição separada? Em caso de instalação para servidores é mais seguro fazer esse tipo de instalação, para em caso de erro ou perdas será mais fácil recuperar. Abaixo relata todo processo de inicialização.

1) O BIOS busca um dispositivo que faça o carregamento do SO (normalmente um disco rígido) e move o controle para o MBR ou Master Boot Record. O MBR é situado nos 512 primeiros bytes do disco.

2) O MBR contém o estágio 1 do GRUB. Dado o pequeno tamanho deste estágio, ele apenas carrega o próximo estágio do GRUB (que pode residir em qualquer locação do disco). O estágio 1 pode carregar o estágio 1.5 ou o estágio 2 diretamente.

3) O estágio 1.5 é localizado nos 30 primeiros Kb do disco imediatamente após o MBR. O estágio 1.5 carrega o estágio 2.

4) O estágio 2 recebe o controle, e mostra ao usuário o menu com as opções de sistemas operacionais instalados no sistema.

5) O GRUB carrega na memória o núcleo (kernel) do SO escolhido (ou o padrão) e passa o controle a este núcleo. (Para sistemas operacionais não suportados totalmente pelo GRUB, o controle é passado para outro carregador que continua o processo até carregar o núcleo em memória). (www.wikipedia.org)

3. O que mudou e o que há de novo na versão 1.97 do Grub

O grub originou-se de um pacote cujo o nome era Grand Unified Bootloader, que por sua vez foi implementado por Erik Stefan Boleyn. A nova geração do grub designada GNU Grub 2, substituiu o Grub legacy (legado) versão 0.97, que não está sendo desenvolvido. O desenvolvimento da nova versão do grub está sob a responsabilidade do projeto PUPA que o reescreveu do zero com objetivo de torna torna-lo modular e portável. Com isso alcançar mais robustez e segurança, mas para isso estão propondo as seguintes mudanças.

1. Utilizar interface Gráfica.

2. Carregamento dinâmico de módulos.

3. Utilização de linguagens de script, para melhor personalização

4. Adicionar suporte para outras arquiteturas, bem como, UltraSparc e PowerPC.

5. E criar uma imagem de núcleo mais compacta.

6. Suporte para demais línguas (Internacionalização).

7. Utilizar drivers do Etherboot para implementar o conceito de netboot.

8. Estrutura orientada à objeto para sistema de arquivos, discos e entre outros

9. Superação à falha de RAID.

Essas mudanças requem um novo conceito e conhecimento para configuração, portanto colocarei aqui algumas formas e configurações que usei, caso dúvida podem entrar em contato para tirar dúvidas.

4. Instalação do grub2

Em alguns casos, a instalação do grub2 se dá pelo processo de instalação normal através do CD de instalação. Sistemas mais atualizados que geralmente utilizam kernel 2.6.31 provavelmente utilizarão o novo GNU Grub, porém podes-se instala-lo juntamente de outros pacotes adicionais que o compõem. Se estiver usando Ubuntu 9.10 use um comando para verificar a versão do grub atual. Caso não esteja usando a versão mais recente instale o pacote mais atual utilizando o utilitário aptitude ou gerenciador da distribuição que está usando. O quadro 1, localizado abaixo está apresentando os procedimentos para a instalação.

Processo de instalação do Grub 2

Checar a versão que está usando

$ grub-install -v

Instalar versão atual do grub2 (Beta)

$ sudo aptitude install grub2

Ou atualizar o grub1

$ update-grub

Identificar o HD onde se encontra o grub

$ sudo grub-prob -t device /boot/grub

Após a instalação você irá notar as seguintes diferenças, uma delas é que ao reiniciar o computador ao pressionar a tecla (ESC) não conseguirá entrar nas opções de escolha de boot, entendendo que a mesma por padrão só aparece se houver dois sistemas instalados, mas se houver a necessidade de escolher alguma versão do kernel ou se for preciso entrar por algum motivo precisará pressionar a tecla (SHIFT).

Outra mudança importe é o arquivo /boot/grub/menu.lst passou a ser /boot/grub/grub.cfg, que utiliza scripts para a elaboração do arquivo. O diretório possui arquivos modulares que compõem o grub, eles são responsáveis pelo funcionamento correto e quais componentes podem ser adicionados ou removidos. Geralmente configurações eram feitas no menu.lst, agora podemos fazer as mesmas configurações no grub.cfg porém não aconselhadas pois o arquivo de configuração que do diretório /etc/default/grub e /etc/grub.d que por sua vez modifica-o. Os arquivos que compõem o /etc/grub.d são lidos na hora em que o computador está sendo iniciado, e por está razão há uma prioridade de execução, a tabela 2 demostra quais arquivos são esses e suas funcionalidades.

Tabela 2

Arquivo

Descrição da utilidade do arquivo

00_header

Essas configurações são importadas

05_debian_theme

Configura o splash de inicialização

10_hurd

-

10_linux

Indica o Kernel no dispositivo

20_memtest86+

Indica /boot/memtest86+.bin e menu grub2

30_os-prober

Indicam os Sistemas Operacionais instalados

40_custom

Personalizar o menu

5. Configuração dos arquivos do Grub

O arquivos /etc/defaults/grub é arquivo responsável pela alteração de configurações padrões do grub, nele podemos configurar o menu de apresentação, qual sistema iniciar por padrão, ultima sessão usada (ultimo sistema usado), mudar nome do kernel no menu, tempo de espera, resolução no boot e entre outros. Embora pode-se fazer a configuração em três arquivos, bem como, diretamente no grub.cfg, /etc/defaults/grub, ou criar um arquivo padronizado que tenham as configurações semelhantes à do grub.cfg. Mas indo por tartes a configuração do /etc/defaults/grub está representada na tabela 3.

Opção

Configuração

Descrição

GRUB_DEFAULT

0, save, “Ubuntu, Linux 2.6.31-9-generic”

Sistema de arranque

GRUB_HIDDEN_TIMEOUT

0

Ocultar menu

GRUB_HIDDEN_TIMEOUT_QUIET

True ou False

Não use

GRUB_TIMEOUT

10

Configurar o tempo

GRUB_DISTRIBUTOR

`lsb_release -i -s 2> /dev/null || echo Debian`

Padrão

GRUB_CMDLINE_LINUX_DEFAULT

"quiet splash"

Apresentar splash

GRUB_CMDLINE_LINUX

“”

-

GRUB_TERMINAL

Console

Desabilita terminal gráfico

GRUB_GFXMODE

640x480

Resolução do boot

GRUB_DISABLE_LINUX_UUID

True

Não use

GRUB_DISABLE_LINUX_RECOVERY

True

Não use

As configurações do arquivo /etc/grub.d/40_custom é o arquivo em que podemos fazer as configurações diversas, elas são iguais as configurações do arquivo grub.cfg, embora necessite de duas linhas fundamentais para tornar o arquivo executável. Então poderá copiar algumas funções do arquivo grub.cf, que podem ser as especificações menuentry (Menu de entrada), essas opções podem ser customizadas conforme queira o seu menu, portanto, pode seguir o modelo de configuração no exemplo abaixo. Note no exemplo os textos que estão ilustrados como comentário.

Exemplo 1

#!/bin/sh

exec tail -n +3 $0

############ Este trecho foi cópia do do fórum do Ubuntu ##################
#Regras para construção de menuentry
# - a primeira linha inicia com menuentry e finda com {
# - o que está entre aspas é o que vai aparecer no menu do GRUB 2. Edite como desejar
# - a última linha do menuentry deve ser }
# - não deixe espaços em branco no fim das linhas
# - a linha set root= deve apontar para a localização de inicialização do GRUB2 (sdXY)
# - referência root da linha Linux deverá apontar para a partição do sistema.
# Se GRUB 2 não encontra o kernel referenciado, tente substituir a UUID pelo nome do #dispositivo (exemplo: / dev/sda6).


#Este é um exemplo copiado do grub.cfg que após alterado pode ter este aspecto:

menuentry "Ubuntu 9.10" {
set root=(hd0,2)
search --no-floppy --fs-uuid --set 22290d2e-82c9-48d5-92c1-ce138634eedc
linux /boot/vmlinuz-2.6.31-15-generic root=UUID=22290d2e-82c9-48d5-92c1-ce138634eedc ro quiet splash
initrd /boot/initrd.img-2.6.31-11-generic

}

# Uma entrada de exemplo para uma versão de disco rígido do SystemRescueCD instalado conforme as instruções no site (em sda8).

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

}
# Exemplo de entrada para windows

echo "Adding Windows 43_custom" >&2
menuentry "Windows Vista " {
insmod ntfs
set root=(hd0,1)
search --no-floppy --fs-uuid --set CFFCFF9EECFF7F49
chainloader +1
}


Para fazer configurações de imagens para o splash, precisa-se de instalar o pacote de imagens, após a instalação imagens serão copiadas para o diretório /usr/share/images/grub, o que não se limitará a usuários fazerem seus próprios splash"s. Processo de configuração do pacote de splash baixo.

$ sudo aptitude install grub2-splashimages


Para fazer a configuração dos bootsplash usaremos o arquivo /etc/grub.d/05_debian_theme, dentro do arquivo possui um loop que, por padrão ele busca em outro diretório em /boot/grub e /usr/share/images/desktop-base, portanto, você pode fazer duas ações: Uma seria colocar a imagem no diretório padrão e indicar o nome da mesma; A outra é adicionar ao loop o diretório /usr/share/images/grub e indicar o nome da imagem como mostra o exemplo 2.

Trechos do arquivos 05_debian_theme

# Para trocar a cor das descrições seque-se o modelo abaixo que pode ser modificado.

set_mono_theme()

{

cat << EOF

set menu_color_normal=white/black

set menu_color_highlight=black/white

EOF

}

# Verifica para usar imagem de backgrounds

use_bg=false

if [ "$GRUB_TERMINAL_OUTPUT" = "gfxterm" ] ; then

for i in {/boot/grub,/usr/share/images/desktop-base,/usr/share/imagens/grub}/sua-imagem.{png,tga} ; do

if is_path_readable_by_grub $i ; then

bg=$i

case ${bg} in

*.png) reader=png ;;

*.tga) reader=tga ;;

*.jpg|*.jpeg) reader=jpeg ;;

esac

if test -e /boot/grub/${reader}.mod ; then

echo "Found Debian background: `basename ${bg}`" >&2

use_bg=true

break

fi

fi

done

fi

Estas linhas estão contidas em/etc/grub.d/05_debian_theme. A cor é definida pela linha abaixo. A primeira cor é a cor do texto, a segunda é a cor de fundo.

set color_normal=black/black


O código abaixo define a cor de entradas selecionadas. A primeira cor é a cor do texto em destaque, a segunda é a cor de fundo da linha selecionada. Se black é a segunda entrada, a linha de destaque será transparente e apenas o texto mudará de cor.

set color_highlight=magenta/black


O black é a cor de transparência GRUB 2 padrão . Altere apenas a cor do primeiro, se utilizar uma imagem de splash. Se o segundo valor nesta linha é alterada para uma cor diferente de black a imagem splash será escondida atrás de um fundo de cor sólida. Após fazer todas essas configurações ou qualquer configuração que se relacione com o grub2 utilize o comando um comando para validar as alterações.

# update-grub2

6. Considerações finais

Embora o grub seja um dos melhores gerenciadores de inicialização de sistemas, novas implementações o tonará mais confiável e robusto, que por sua vez, beneficiará a usuários e instituições mais confiabilidade no Sistema Operacional Linux.


6.1 Agradecimentos

Agradeço ao Carlos Farah, que orientou-me a utilizar nos meus artigos utilitários que minimizam erros para usuários iniciantes, que consiste em usar comandos sudo e aptitude. Obrigado Carlos.

6.2 Sobre o Autor

José Cleydson Ferreira da Silva.


Técnico em Tecnologia da Informação formado pela Escola Técnica de Viçosa-MG (ETEV), Bacharelando em Sistemas de Informação - FDV Viçosa-MG, usuário do Linux por filosofia, acredito que os padrões abertos podem mudar os rumos do mercado de TI.

6.3 Contatos

Email, gtalk: cleysinhonv@gmail.com

Twitter: @cleysinhonv

Web site: www.cleysinho.blogspot.com

Web site: www.gnu-lia.org

Outros artigos: http://www.vivaolinux.com.br/artigos/userview.php?login=cleysinhonv

6.4 Referência Bibliográfica


http://www.gnu.org/software/grub/grub-2.en.html

http://ubuntuforums.org/

http://pt.wikipedia.org

http://commons.wikimedia.org

José Cleydson Ferreira da Silva

José Cleydson Ferreira da Silva - Técnico em Tecnologia da Informação formado pela Escola Técnica de Viçosa-MG (ETEV), Bacharelando em Sistemas de Informação - FDV Viçosa-MG, usuário do Linux por filosofia, acredito que os padrões abertos podem mudar os rumos do mercado de TI.