Entendendo o novo sistema de configuração

 

Para entender melhor como funciona este processo de geração, o primeiro passo é dar uma olhada no conteúdo da pasta /etc/grub.d:

image1

Como pode ver, esta pasta é populada por vários scripts, numerados sequencialmente. Sempre que o update-grub é executado, estes scripts são executados na ordem em que são numerados, fazendo com que um novo arquivo /boot/grub/grub.cfg seja gerado e a configuração atualizada. Este é mais um motivo para que você não perca tempo tentando editar este arquivo diretamente, já que além de muito complexo, qualquer configuração feita nele será perdida ao atualizar a configuração do Grub. A ideia é exatamente que a configuração seja gerada e atualizada automaticamente, aplicando as suas configurações, definidas no /etc/default/grub.

O primeiro script, o “00_header” lê as variáveis de ambiente e ajusta vários parâmetros e configurações, preparando o terreno para a execução dos outros scripts. O seguinte é o “05_debian_theme”, que aplica o tema visual, carregando a imagem de background, definindo as cores do menu e assim por diante.

Os demais scripts são dedicados à detecção e inserção dos diferentes sistemas operacionais, gerando a lista que permite escolher qual usar durante o boot. O “10_linux” adiciona as entradas do sistema principal, incluindo as diferentes versões do kernel que estejam instaladas. O “10_linux_xen” faz o mesmo com versões do kernel com suporte ao Xen (caso alguma esteja instalada). O “20_memtest86+” adiciona a entrada do Memtest, enquanto o “30_os-prober” detecta e adiciona entradas para outros sistemas operacionais instalados, incluindo o Windows. Os dois últimos, “40_custom” e “41_custom” são dedicados à inserção de scripts personalizados com outras funções que você queira executar.

A ordem com que as diferentes entradas aparecem na tela de boot é definida pela ordem com a qual estes scripts são executados. Ao rodar o “sudo update-grub ” neste PC, por exemplo, obtenho:

$ sudo update-grub

Generating grub.cfg …
Found background image: /usr/share/images/desktop-base/desktop-grub.png

Found linux image: /boot/vmlinuz-3.2.0-21-generic
Found initrd image: /boot/initrd.img-3.2.0-21-generic
Found linux image: /boot/vmlinuz-3.2.0-19-generic
Found initrd image: /boot/initrd.img-3.2.0-19-generic
Found memtest86+ image: /boot/memtest86+.bin
Found Windows 7 (loader) on /dev/sda2
done

Veja que ele inclui um total de 4 entradas: duas para o sistema principal (incluindo uma versão antiga do kernel que ainda está instalada), uma para o Memtest e outra para uma cópia do Windows 7 esquecida em uma partição no início do HD.

Se retiro a permissão de execução do script do Memtest (chmod -x /etc/grub.d/20_memtest86+), fazendo com que ele deixe de ser executado, as outras entradas continuarão sendo adicionadas, mas o Memtest será deixado de fora:

$ sudo chmod -x /etc/grub.d/20_memtest86+
$ sudo update-grub

Generating grub.cfg …
Found background image: /usr/share/images/desktop-base/desktop-grub.png

Found linux image: /boot/vmlinuz-3.2.0-21-generic
Found initrd image: /boot/initrd.img-3.2.0-21-generic
Found linux image: /boot/vmlinuz-3.2.0-19-generic
Found initrd image: /boot/initrd.img-3.2.0-19-generic
Found Windows 7 (loader) on /dev/sda2
done

Caso renomeie o script “30_os-prober”, para “09_os-prober” (fazendo com que ele seja executado antes do “10_linux” que adiciona as entradas referentes ao Linux) faço com que o Windows apareça no topo da lista:

$ sudo mv 30_os-prober 09_os-prober
$ sudo update-grub

[sudo] password for gdh:
Generating grub.cfg …
Found background image: /usr/share/images/desktop-base/desktop-grub.png

Found Windows 7 (loader) on /dev/sda2
Found linux image: /boot/vmlinuz-3.2.0-21-generic
Found initrd image: /boot/initrd.img-3.2.0-21-generic
Found linux image: /boot/vmlinuz-3.2.0-19-generic
Found initrd image: /boot/initrd.img-3.2.0-19-generic
done

Da mesma forma, é possível editar o conteúdo dos scripts ou adicionar outros que executem funções adicionais. Esta acaba sendo a principal vantagem do Grub 2 e o grande motivo da mudança.

Como pode imaginar, a melhor forma de adicionar entradas personalizadas no menu do grub, sem depender da detecção automática é adicionar as instruções desejadas no final do arquivo “/etc/grub.d/40_custom”, o que faz com que a sua entrada personalizada apareça no final da lista.

Basta adicionar as entradas da forma como quer que elas sejam incluídas no arquivo, após a linha “exec tail -n +3 $0” dentro do arquivo. Para adicionar uma entrada que carrega o Windows em chainload (como a que vimos no capítulo sobre o Mandriva), por exemplo, você adicionaria as seguintes linhas ao arquivo “40_custom”:

menuentry "Windows 7 em chainload" {
set root=(hd0,1)
chainloader +1
}

A linha “set root=(hd0,1) ” especifica qual é a partição. Uma diferença entre o Grub 2 e o Grub antigo é que no Grub 2 as partições são numeradas a partir do 1 (e não mais a partir do zero), de forma que “set root=(hd0,1) ” especifica que o Windows está instalado na primeira partição do HD.

Para que seja adicionada uma entrada para o boot de uma imagem ISO localizada em uma partição do HD (que é uma das possibilidades interessantes do novo grub), você adicionaria as linhas a seguir no “40_custom”

menuentry "ISO do Ubuntu" {
loopback loop (hd0,1)/home/gdh/ubuntu.iso
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=home/gdh/ubuntu.iso noprompt noeject quiet splash
initrd (loop)/casper/initrd.lz
}

Veja que esta entrada já é mais complicada, especificando a partição do HD onde está o ISO, como em “(hd0,1)”, que se refere à primeira partição do primeiro HD e o caminho para o arquivo dentro da partição (/home/gdh/ubuntu.iso). A linha “linux…” inclui opções diversas para que o sistema inicialize através do CD; veja que ela inclui novamente a localização do arquivo dentro da partição.

Incluindo as duas entradas, seu arquivo “/etc/grub.d/40_custom” ficaria como o a seguir e depois de executar o “sudo update-grub” você veria as duas novas entradas no final da lista.

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.

menuentry "Windows 7 em chainload" {
set root=(hd0,1)
chainloader +1
}

menuentry "ISO do Ubuntu" {
loopback loop (hd0,1)/home/gdh/ubuntu.iso
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=home/gdh/ubuntu.iso noprompt noeject quiet splash
initrd (loop)/casper/initrd.lz
}

É importante enfatizar que o boot de imagens ISO só funciona em distribuições Linux que suportem a inicialização a partir do ISO (o que inclui a grande maioria dos live-CDs atuais). Devido a esta dependência de suporte por parte do hóspede, esta função não funciona para dar boot em ISOs com outros sistemas operacionais, incluindo imagens de instalação do Windows. 

Postado por
Siga em:
Compartilhe
Deixe seu comentário
Img de rastreio
Localize algo no site!