Esse tópico é uma tradução livre e resumida de :
Documentação da Comunidade Ubuntu, GRUB 2.
São abordados só detalhes da estrutura e da configuração. Quem desejar mais é só ir na
Fonte.
Novo : Incluí no final da tradução um ítem (Manipulando Entradas) com as principais alterações de menu procuradas pelos usuários.
ApresentaçãoO GRUB 2 é agora o gerenciador de boot do Ubuntu 9.10 (Karmic Koala) e outros sistemas.
GRUB 2 é um software Open Source. Ele é descendente do GRUB (GRand Unified Bootloader).
Foi completamente reescrito para dar ao usuário flexibilidade e performance significativamente aumentadas.
MelhoriasAs melhorias em relação ao GRUB incluem :
- apoio de scripts
- módulo de carregamento dinâmico
- modo de recuperação
- menus personalizados
- temas
- suporte ao menu gráfico
- imagens iso de Live CD de boot diretamente do disco rígido
- nova estrutura de arquivos de configuração
- sem suporte a plataforma x-86 (tal como PowerPc)
- suporte universal a UUIDs (não apenas o Ubuntu)
GRUB vs GRUB 2
O menu do GRUB 2 parecerá familiar aos usuários do Grub mas há muitas diferenças internamente.
- numa instalação limpa do Ubuntu 9.10 sem nenhum outro sistema operacional instalado o Grub 2 inicializará
diretamente na tela de login ou Desktop.
- pressione a tecla SHIFT para mostrar o menu durante o boot (no GRUB legacy formalmente ESC)
-
/boot/grub/menu.lst do GRUB legacy foi substituido por
/boot/grub/grub.cfg no GRUB 2
- não há "/find boot/grub/stage1" no prompt do grub. Stage 1.5 foi eliminado
- o principal arquivo de menu
/boot/grub/grub.cfg não é para ser editado mesmo pelo "root"
-
grub.cfg é sobrescrito sempre que houver uma atualização, um kernel for adicionado/removido ou o usuário
executar
update-grub- o usuário pode criar um arquivo personalizado em
/etc/grub.d/40_custom com suas próprias entradas. Esse
arquivo não será sobrescrito
- o arquivo de configuração principal para alterar as configraçoes do menu é o
/etc/default/grub- existem vários arquivos para configurar o menu -
/etc/default/grub mencionado acima e todos os arquivos
da pasta
/etc/grub.d/ - mudou a numeração das partições. A primeira partição agora é 1 em vez de 0. O primeiro dispositivo no entanto
continua 0 (não mudou)
- buscas automáticas para outros sistema operacionais como Windows sempre que
update-grub é executado
- nenhuma mudança na configuração dos arquivos acontecerá até que o comando
sudo update-grub
seja executado
InstalaçãoVersão instalada no seu sistema :
grub-install -v
O GRUB 2 vem instalado por padrão no Ubuntu 9.10 (Karmic Koala).
O pacote do GRUB 2 é o
grub-pc. O pacote
grub-common também será instalado.
grub2 é um pacote simulado de transição, pode ser seguramente removido e é mostrado no Synaptic como não instalado.
Upgrade para GRUB 2A atualização para GRUB 2 a partir do GRUB comum é relativamente fácil.
Os desenvolvedores decidiram não usar uma atualização automática para o GRUB 2 como padrão em instalações de atualização.
Quem fizer upgrade para o Ubuntu 9.10 pode continuar usando o GRUB legacy se desejar,
Para fazer a atualização para GRUB 2 :
Upgrade para GRUB 2Estrutura de arquivosGRUB 2 incorpora um diretório totalmente revisado e uma hierarquia de arquivos.
Para saber onde o GRUB 2 está instalado digite no terminal
sudo grub-probe -t device /boot/grub
para a partição e
sudo grub-probe -t fs_uuid /boot/grub
para a UUID.
Hierarquia de arquivos e diretórios /boot/grub/grub.cfgÉ o que mais se assemelha ao
/boot/grub/menu.lst do GRUB mas diferentemente desse o
grub.cfg não se destina a ser editado.
Cada seção é claramente delimitada com "(### BEGIN)" e a referência do arquivo na pasta
/etc/grub.d a partir da qual a informação foi gerada.
grub.cfg é atualizado executando o comando
sudo update-grub
e é automaticamente modificado quando há uma atualização ou instalação/remoção de kernel.
Por padrão, e sempre que o comando
update-grub é executado, este arquivo é feito "somente leitura". Isto porque a intenção é que o arquivo não seja editado manualmente.
O usuário também verá uma infinidade de arquivos *. mod na pasta
/boot/grub . Esses arquivos são da natureza modular do GRUB 2 e são carregados necessariamente pelo GRUB 2.
/etc/default/grubEsse arquivo pode ser editado e configurado. Detalhes da configuração estão mais adiante em Configurando GRUB 2.
/etc/grub.d/ (diretório)Os arquivos nessa pasta são lidos durante a execução do comando
sudo update-grub
e suas instruções são incorporadas ao
/boot/grub/grub.cfg.
A colocação dos ítens de menu no
grub.cfg é determinada pela ordem em que os arquivos são executados nessa pasta.
Arquivos com numeral no início são executados primeiro começando pelo menor.
10_linux é executado antes de
20_mentest que é executado antes de
40_custonEntradas personalizadas podem ser criadas no arquivo
40_custom ou num outro recém criado.
Somente arquivos executáveis geram saída para o
grub.cfg durante a execução do
update-grub.
Os arquivos default nesta pasta são :
- 00_header : suas configurações normalmente são importadas de informações do
/etc/default/grub e os usuários não precisam mudar esse arquivo.
- 05_debian_theme : configura splash image, cor do texto, cor de realce e tema. Na ausência de splash image esse arquivo configura um tema monocromático para o menu inicial.
- 10_hurd : não usada.
- 10_linux : localiza kernels no root device para o sistema operacional em uso. Leva essa informação e estabelece os nomes apresentados no menu para estes kernels.
- 20_memtest86+ : procura por /boot/memtest86+.bin e o inclue como opção no menu do GRUB 2. Para inibir remova o executável
sudo chmod -x /etc/grub.d/20_memtest86+ e depois sudo update-grub.
- 30_os-prober : procura por Linux e outros sistemas operacionais.Resultados são colocados no
grub.cfg baseando-se nos scripts desse arquivo. Variáveis nesse arquivo determinam o formato dos nomes exibidos no
/boot/grub/grub.cfg e no menu do GRUB 2. Usuários familiarizados com scripts básico podem alterar essas variáveis e mudar o formato das entradas de menu exibidas. Alternativamente o usuário pode inserir uma entrada no
/etc/default/grub a qual desativa esse script.
- 40_custom : Para adicionar entradas de menu personalizado que serão inseridas no
grub.cfg depois de
update-grub. Mais informações sobre esse arquivo na parte de configuração.
Configuração Alterações na configuração são normalmente feitas em
/etc/defaul/grub e nos arquivos da pasta
/etc/grub.d.
O arquivo
/boot/grub/grub.cfg não deve ser editado pelo usuário; mudanças nesse arquivo são feitas pelos scripts de configuração.
Arquivo /etc/default/grubÉ o principal arquivo de configuração para alterar as configurações padrão.
-
GRUB_DEFAULT=0 Configura a entrada default pela posição. Como no GRUB a primeira entrada é zero, a segunda 1, etc,
-
GRUB_DEFAULT=saved Define a entrada de menu padrão com o que foi selecionado anteriormente (a última seleção).
-
GRUB_DEFAULT="xxxx" Neste caso, a localização no menu não importa.
Exemplo: GRUB_DEFAULT="Ubuntu, Linux 2.6.31-9-generic"
-
GRUB_TIMEOUT= Configura o tempo.
-
GRUB_HIDDEN_TIMEOUT=0 O menu ficará oculto.
# GRUB_HIDDEN_TIMEOUT=0 O menu não será oculto
-
GRUB_HIDDEN_TIMEOUT_QUIET=true
true = nenhuma contagem regressiva é exibida. A tela ficará em branco.
false = Um contador será exibido numa tela em branco durante o tempo do GRUB_HIDDEN_TIMEOUT.
-
#GRUB_GFXMODE=640x480
- descomente essa linha para mudar a resolução. Ela fornece resoluções suportadas pela placa de vídeo do usuário (640x480,
800x600, 1280x1024, etc).
aplica-se apenas a resolução do menu de boot.
Dica: Definindo a mesma resolução do sistema operacional o tempo de inicialização diminuirá ligeiramente.
-
GRUB_DISABLE_LINUX_RECOVERY=true
Adicione ou descomente essa linha se não desejar o “Recovery” mode no menu.
"Recovery mode" para apenas um kernel, fazer uma entrada especial em
/etc/grub/40_custom.
Entradas personalizadasGRUB 2 permite ao usuário criar seleções de menus personalizados que serão automaticamente adicionados ao menu principal quando o comando
sudo update-grub
é executado. Um arquivo
40_custom vazio está disponível em
/etc/grub.d/ para uso ou para servir de exemplo para criar menus personalizados. Aqui estão algumas considerações para menus personalizados:
- o nome do arquivo determina a ordem das seleções no menu. Nomes numérico são executados primeiro, seguido por nomes alfabéticos.
- Entrada
10_linux aparecerá antes de
30_os prober, que será colocado antes de entradas
40_custom, que irá preceder
my.custom.entries.
- o usuário que desejar que as suas entradas de menu personalizado apareçam em primeiro lugar no menu principal pode nomear a pasta para
06_custom que suas listas estarão em primeiro lugar no menu.
- o arquivo deve ser feito executável :
sudo chmod +x /etc/grub.d/filename
.
- o conteúdo desse arquivo é adiconado ao
grub.cfg sem alterações quando o comando sudo update-grub é executado.
- ao contrário do
grub.cfg, arquivos personalizados podem ser editados a qualquer momento, não são só leitura, e
podem ser propriedade do usuário, se ele desejar.
- o conteúdo não será alterado, quando novos kernels são adicionados ou removidos.
Criando menus personalizadosO usuário pode editar o arquivo default
/etc/grub.d/40_custom ou criar um novo. A maneira mais fácil de criar o conteúdo de um menu personalizado é copiar uma entrada do
/boot/grub/grub.cfg. Depois de copiado, o conteúdo do
40_custom pode ser adaptado a vontade do usuário.
• De acordo com o arquivo personalizado padrão da amostra (
etc/grub.d/40_custom/) as duas primeiras linhas de um arquivo personalizado em
/etc/grub.d deve ser:
#!/bin/sh
exec tail -n +3
$0 Exemplo de menuentry :
### BEGIN /etc/grub.d/10_linux ###
menuentry "Ubuntu, Linux 2.6.31-15-generic" {
recordfail=1
if [ -n ${have_grubenv} ]; then save_env recordfail; fi
set quiet=1
insmod ext2
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 vga=789 quiet splash
initrd /boot/initrd.img-2.6.31-15-generic
}
Essa entrada do exemplo, copiada do grub.cfg e alterada 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 Carregamento em série para um outro gestor de arranque GRUB.
menuentry "Grub 1 Bootloader" {
set root=(hd0,8)
chainloader +1
}
Splash ImagesGRUB 2 Splash Images
Instale o pacote padrão GRUB 2 splash images :
sudo apt-get install grub2-splashimages
.
Não confundir este com o pacote grub-splashimages, que não é compatível com o GRUB 2.
A localização padrão para essas imagens é
/usr/share/images/grub.
Configurando splash imagesAs splash images do GRUB 2 são controladas pelo arquivo
/etc/grub.d/05_debian_themeEdite esse arquivo como root :
sudo gedit /etc/grub.d/05_debian_theme
Encontre a linha abaixo :
for i in {/boot/grub,/usr/share/images/desktop-base}/moreblue-orbit-grub.{png,tga} ; do
Detalhes sobre esta entrada:
- por default o GRUB 2 procura por splash images em
/boot/grub e
/usr/share/images/desktop-base - o pacote grub2splashimages fica em
/usr/share/images/grub - o usuário deve:
- alterar a localização da pasta na linha acima para apontar para o endereço correto, ou
- mover a imagen para uma das pastas acima referenciadas.
- para adicionar a pasta grub coloque a entrada para ela e mude o nome do arquivo da imagem pelo que voce quer.
Na imagem do
nosso exemplo a configuração ficou assim :
for i in {/boot/grub,/usr/share/images/desktop-base,/usr/share/images/grub}/Lake_mapourika_NZ.{png,tga} ; do
Depois de ter introduzido o caminho e o nome da imagem em
05_debian_theme você executa
sudo update-grub
Configurando fonte e coresEstas 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/blackO 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/blackO black é a cor de transparência GRUB 2 padrão . Altere apenas a cor do primeiro (ou seja, xxxxx /black), 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.
Para mais detalhes :
GRUB 2 Splash Images.
Manipulando Entradas no GRUB 2Primeiro faça uma cópia de segurança, na sua pasta pessoal, dos arquivos
10_linux e
30_os-prober, para reverter se algo der errado.
Depois rode o comando
sudo cat /boot/grub/grub.cfg | grep "menuentry" | cut -d '"' -f 2
Esse comando mostra o que tem no menu. Isso ajuda a fazer a alteração e vc pode ver se funcionou sem precisar reiniciar.
E, não esqueça de :
sudo update-grub
depois de alterar o menu.
I- Retirando/Adicionando A- Kernel(s) antigo(s) :No
Synaptic em
Procurar digite o kernel, ex.: 2.6.31-14-generic.
Marque para remover as citações desse kernel (linux-headers e linux-image).
Para reinstalar faça o inverso.
B- Recovery modesudo gedit /etc/default/grub
GRUB_DISABLE_LINUX_RECOVERY="true" (retira)
#GRUB_DISABLE_LINUX_RECOVERY="true" (adiciona)
C- Memtest86+Retirar :
sudo chmod -x /etc/grub.d/20_memtest86+
Adicionar :
sudo chmod +x /etc/grub.d/20_memtest86+
II- Mudando os Títulos dos Sistemas Operacionais A- Linux Editar :
sudo gedit /etc/grub.d/10_linux
Procure por : linux_entry "${OS},
Linux ${version}" \
"${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_EXTRA} ${GRUB_CMDLINE_LINUX_DEFAULT}" \
quiet
Entrada original = Ubuntu, Linux 2.6.31-16Exemplos : retirando
Linux altera para
Ubuntu 2.6.31-16; trocando
Linux por 9.10 e retirando ${version} altera para
Ubuntu 9.10.
Personalizando ainda mais :
Procure por :
while [ "x$list" != "x" ] ; do
linux=`version_find_latest $list`
echo "Found linux image: $linux" >&2
basename=`basename $linux`
dirname=`dirname $linux`
rel_dirname=`make_system_path_relative_to_its_root $dirname`
version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
alt_version=`echo $version | sed -e "s,\.old$,,g"`
linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"
# User-added variable
codename="`lsb_release -cs`"adicione a parte em negrito.
Vá de novo em : linux_entry "${OS},
Linux ${version}" \
"${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_EXTRA} ${GRUB_CMDLINE_LINUX_DEFAULT}" \
Trocando linux_entry "${OS},
Linux ${version}" \ por : linux_entry "${codename} Karmic Koala" \
Entrada altera para : Karmic Koala. B- Windows Editar :
sudo gedit /etc/grub.d/30_os-prober
Procure por :
for OS in ${OSPROBED} ; do
DEVICE="`echo ${OS} | cut -d ':' -f 1`"
LONGNAME="`echo ${OS} | cut -d ':' -f 2 | tr '^' ' '`"
LABEL="`echo ${OS} | cut -d ':' -f 3 | tr '^' ' '`"
BOOT="`echo ${OS} | cut -d ':' -f 4`"
if [ -z "${LONGNAME}" ] ; then
LONGNAME="${LABEL}"
fi
Comente essa parte :
#if [ -z "${LONGNAME}" ] ; then
#LONGNAME="${LABEL}"
#fi
e adicione essa :
if [ "${LONGNAME} = Windows 7 (loader) (on /dev/sda1)" ] ; then
LONGNAME="Windows 7"
elif [ -z "${LONGNAME}" ] ; then
LONGNAME="${LABEL}"
fi
Windows 7 (loader) (on /dev/sda1) é o que tinha originalmente no Menu (troquei por Windows 7).
Na linha
echo "Found ${LONGNAME} on ${DEVICE}" >&2
retire on ${DEVICE})
E na linha
cat << EOF
menuentry "${LONGNAME} (on ${DEVICE})" {
retire (on ${DEVICE})
Entrada alterou para : Windows 7. C- Outros Linux Editando e alterando o grub.cfg do outro Linux (não há problema nesse caso) :
1- Diretamente pelo Ubuntu
Entre pelo Nautilus como root :
sudo nautilus
Vá em
Locais > Sistema de arquivos de xx GB (partição do outro Linux) > boot > grub > grub.cfg Clique com o botão direito sobre o arquivo
grub.cfg vá em
Propriedades > Permissões (leitura e escrita para o root).
Agora abra o arquivo e modifique como se fosse o
menu.lst do GRUB legacy.
2- Dando boot pelo outro Linux :
sudo chmod -w /boot/grub/grub.cfg
sudo gedit /boot/grub/grub.cfg
Exemplo : menuentry "ubuntu, linux 2.6.31-16-generic, on /dev/sda1" mudar para "ubuntu 9.10" ou "karmic koala".
pode tbém ser retirado o "recovery mode" comentando (#) suas entradas.