segunda-feira, 14 de janeiro de 2013

Grub2 dicas avançadas


IMPORTANTE
Não faça os procedimentos abaixo em computadores de produção, se você não tiver muita experiencias em sistema Linux, ou não se sentir seguro o suficiente, mas se quiser seguir em frente, faça backups do arquivos importantes para você em um pendrive, outro disco ou gravar em DVD antes de prosseguir, pois se você não fizer corretamente ou algo der errado e você não conseguir resolver sem reinstalar o sistema, a reinstalação será sua única solução.
Removendo o memtest

A inclusão do memtest é feita a partir do script /etc/grub.d/20_memtest86+.
Para evitar que o memtest entre no menu do grub em todas as atualizações do kernel, basta mudar as permissões do referido script com o seguinte comando:
# chmod -x /etc/grub.d/20_memtest86+

O script continuará lá, mas não será mais incluso no menu do grub.
# update-grub

Editar os itens do menu, remover ou renomear o nome do sistema


Abra o arquivo /boot/grub/grub.cfg com um editor de texto.

Copie todas as linhas que comecem com "menuentry" até o "}" (chaves).
Cole as linhas copiada no arquivo /etc/grub.d/40_custom e salve.


Notas:
A ordem do boot será determinada pela ordem que você colar as entradas.
Você poderá renomear as entradas que estejam em azul, devendo permanecer as aspas.
É importante que não haja quebra de linha nos itens e que seja obedecida a disposição exata da abertura e fechamento de cada chave “{ e }” de acordo como está no arquivo original. Aqui há quebra devido ao layout da página podendo não está alinhado como no arquivo.

Exemplo do /etc/grub.d/40_custom:
#!/bin/sh
exec tail -n +3 $0
menuentry "Linux Slackware (on /dev/sda1)" {
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set bb1c0561-899b-4fda-9f3c-818fe1116e31
linux /boot/vmlinuz root=/dev/sda1 ro vt.default_utf8=0 vga = 773 raid=noautodetect
}
menuentry 'Ubuntu, with Linux 2.6.35-22-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod part_msdos
insmod reiserfs
set root='(hd0,msdos6)'
search --no-floppy --fs-uuid --set eabc53b2-4e19-48e8-af78-017b62643311
linux /boot/vmlinuz-2.6.35-22-generic root=UUID=eabc53b2-4e19-48e8-af78-017b62643311 ro quiet splash
initrd /boot/initrd.img-2.6.35-22-generic
}
menuentry 'Ubuntu, with Linux 2.6.35-22-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod part_msdos
insmod reiserfs
set root='(hd0,msdos6)'
search --no-floppy --fs-uuid --set eabc53b2-4e19-48e8-af78-017b62643311
echo 'Loading Linux 2.6.35-22-generic ...'
linux /boot/vmlinuz-2.6.35-22-generic root=UUID=eabc53b2-4e19-48e8-af78-017b62643311 ro single
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.35-22-generic
}

menuentry "Windows 7 (loader) (on /dev/sda3)" {
insmod part_msdos
insmod ntfs
set root='(hd0,msdos3)'
search --no-floppy --fs-uuid --set 4bcb70414cbf0896
chainloader +1
}


Em azul é o nome dado ao sistema que aparece no menu do grub2 no boot. Este é um grub2 da distro Xubuntu derivado do Ubuntu; no Menu pra o sistema Ubuntu é usado aspas simples e no menu dos outros sistemas operacionais como o Slackware e Windows 7 é usado aspas duplas.
Se você quiser pode renomear o nome Slackware para algo como Slackware 13.1 ou My Slackware, podendo fazer a mesma coisa nas outras partes do nome do sistema que terá no menu na parte em azul.
A ordem original era os itens do Ubuntu primeiro, após o Slackware e depois o Windows 7.
Como o Slackware é o primeiro item do menu, este será o default na inicialização caso você não teclar Enter ou escolher outro pra boot e caso você queira que o Windows 7 seja o default coloque as linhas dele primeiro na ordem de boot.


Agora para que apareça no boot somente o arquivo personalizado, execute o comando que remove o bit executável dos arquivos "10_linux", "20_memtest86+" e "30_os-prober".

# chmod -x /etc/grub.d/10_linux
# chmod -x /etc/grub.d/20_memtest86+
# chmod -x /etc/grub.d/30_os-prober
# update-grub

Generating grub.cfg ...
done

Reinicie o sistema e verifique o resultado!


Notas 2:
Caso você instale um novo kernel o mesmo não será atualizado automaticamente deverá colocar permissão x nos arquivos anteriores:
/etc/grub.d/10_linux, e /etc/grub.d/30_os-prober e depois fazer update-grub, com isto você perderá as entradas personalizadas do menu, depois deverá repetir o mesmo processo para personalizar o menu com o novo kernel.

Sob chmod -x /etc/grub.d/30_os-prober (se você não retirar permissão terá itens duplicados no menu, ou seja o seu menu personalizado mais a detecção de outros sistemas que será adicionado ao menu).

A edição direta do arquivo /boot/grub/grub.cfg não funciona no Grub2, pois quando você executar o comando update-grub este arquivo será substituído pelas configurações detectadas dos scripts localizados em /etc/grub.d.

Faça antes um backup de todos os arquivos das pastas /boot/grub, /etc/grub.d usando o comando tar -cvf originais.tar * dentro da pasta e faça uma copia do arquivo /etc/default/grub. Assim caso haja com problema, basta usar uma distro em live CD pra recuperar o grub sem precisar reinstalar.


Os testes feito por mim, foi feito usando o grub2 instalado pelo Xubuntu 10.10.



Retirando o modo de recuperação

Se você não quer que as entradas apareçam no Grub2, faça assim:

# gedit /etc/default/grub

Descomente a última parte do texto, conforme abaixo:

# Uncomment to disable generation of recovery mode menu entrys

#GRUB_DISABLE_LINUX_RECOVERY="true"

Para:

# Uncomment to disable generation of recovery mode menu entrys

GRUB_DISABLE_LINUX_RECOVERY="true"

Se quiser aumentar o tempo de espera antes que o Grub inicie o sistema operacional padrão, mude neste item:

GRUB_TIMEOUT="20"

Aqui no meu caso eu mudei de 5 para 20 segundos, fica a seu critério!

Feito todos esses, passos salve o arquivo e em seguida você deve executar:

# update-grub

Reinicialize o sistema e veja o resultado!



Recuperando o grub2

De um boot com uma live CD.

Monte a partição : (Troque sda2 pela partição do seu sistema)
# mount /dev/sda2 /mnt

Reinstale o GRUB 2 :
# grub-install --root-directory=/mnt /dev/sda

Reinicie o computador.

Notas:
Alternativamente pode usar o chroot.
Precisamos trabalhar no diretório raiz do nosso antigo sistema, e então usamos o chroot root que faz essa tarefa. Se atente para que indique o caminho correto da montagem do sistema. Na prática:

# chroot /mnt
# grub-install /dev/sda

Pressione Ctrl+D para sair do modo “chroot” e reinicie o computador.

Backup extra de segurança antes de fazer alterações no Grub

BACKUP DO MBR

Para efetuar o backup pelo Linux, digite o comando:
# dd if=/dev/hda of=hda.mbr bs=512 count=1
Substitua pelo endereço do disco onde se encontra a MBR. Hdx é o padrão em sistemas GNU/LINUX mais antigos para indicar discos IDE. Discos SCSI ou Sata são representados por sdX. Nas distros mais recentes todos os discos IDE, SATA E SCSI, começa com sdX, onde em X, substituir pela letra a,b,c,d,e,f,g...
Com este comando, será criado um arquivo chamado hda.mbr. Este arquivo deve ser salvo fora de seu computador. Faça uma transferência via FTP para outra máquina ou grave este arquivo em um pendrive.

Para restaurar a MBR utilize o comando:
# dd if=hda.mbr of=/dev/hda bs=512 count=1

Tenha cuidado ao restaurar o backup e execute este comando no mesmo local de onde está o arquivo para não perder as informações do MBR.
No teste que eu fiz, o arquivo de backup hda.mbr possuir o tamanho de 512 bytes.

Onde colocar paramentos especiais de boot pra o Grub2 ?

No arquivo /etc/default/grub coloque o parâmetro na linha GRUB_CMDLINE_LINUX= "entre aspas duplas"

Exemplo: GRUB_CMDLINE_LINUX="vga=792 splash quiet 440 480"


Exemplo parcial do arquivo /etc/default/grub

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.

GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""


Nenhum comentário:

Postar um comentário