terça-feira, 30 de agosto de 2011

Escolhendo sistema operacional default com o Grub 2

Vou falar um pouco a respeito de um problema que eu tive com o grub.

Grub é o gerenciador de boot preferencial do Linux, e é instalado por default pelo Ubuntu, entre outros. Meu desktop em casa tem Ubuntu e Windows instalados, e o Windows é o sistema operacional default, de forma que minha esposa não tem que fazer nada para bootar o Windows.

Configurar o sistema operacional default não foi particularmente fácil. Existem montes de informação na internet sobre como escolher o sistema operacional default, a maior parte das quais se refere à versão anterior do grub. Sobre a nova versão, não muita coisa.

No fim das contas eu usei o Startup Manager do Ubuntu para configurar isso. A propósito, alguém poderia me explicar porque você usa o Startup Manager para escolher que OS você vai bootar, e o Bootup Manager para escolher que processos vão ser iniciados? Bem, voltando ao assunto...

Isso funcionou legal até o dia que eu fiz um upgrade do Ubuntu, quando então uma nova entrada foi criada, o que trocou a posição relativa do Windows no boot. Isso foi desagradável, então resolvi me aprofundar no assunto.

A configuração usada pelo Ubuntu durante o boot está em /boot/grub, em particular /boot/grub/grub.cfg. Mas você não deve editar esse arquivo diretamente -- ele é gerado automaticamente a partir dos scripts localizados em /etc/grub, mais a configuração em /etc/default/grub. Normalmente, é esse último arquivo que você deve alterar.

Para trocar o sistema operacional default você deve editar o arquivo /etc/default/grub, alterar o parâmetro GRUB_DEFAULT, e então rodar update-grub. O Startup Manager faz tudo isso para você, mas há uma coisa que o Startup Manager não faz...

O truque é o seguinte. O parâmetro GRUB_DEFAULT é normalmente configurado como um número, indicando a posição relativa do sistema que você quer bootar no menu, mas ele também pode ser configurado como um nome! Para ver o nome dos sistemas no menu você pode executar "grep menuentry /boot/grub/grub.cfg" -- os nomes são as strings entre apóstrofos ou aspas logo após "menuentry". Por exemplo:


$ grep menuentry /boot/grub/grub.cfg
menuentry 'Ubuntu, with Linux 2.6.38-11-generic' --class ubuntu --class gnu-linux --class gnu --class os {
menuentry 'Ubuntu, with Linux 2.6.38-11-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
menuentry 'Ubuntu, with Linux 2.6.38-10-generic' --class ubuntu --class gnu-linux --class gnu --class os {
menuentry 'Ubuntu, with Linux 2.6.38-10-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
menuentry 'Ubuntu, with Linux 2.6.38-8-generic' --class ubuntu --class gnu-linux --class gnu --class os {
menuentry 'Ubuntu, with Linux 2.6.38-8-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
menuentry "Memory test (memtest86+)" {
menuentry "Memory test (memtest86+, serial console 115200)" {

Isso também mostra porque o Startup Manager usa posição relativa ao invés de um nome: de forma que a última versão do Linux seja sempre a default. Para mim isso parece uma escolha ruim para qualquer coisa exceto a primeira entrada.

De qualquer forma, tudo que você precisa fazer é editar /etc/default/grub, alterar a configuração GRUB_DEFAULT, de forma que ela indique o sistema operacional default de sua escolha, e então rodar update-grub.

2 comentários:

  1. Esse treco devia ser mais simples. Tinha uma opção 'savedefault' no grub velho, não existe mais não? O GRUB sempre escolhia o ultimo OS bootado como default.

    ResponderExcluir
  2. Ainda tem essa opção, mas isso me obrigaria a rebootar em Windows sempre que eu usasse Linux -- selecionar o sistema default naquele menuzinho não é com a Roberta.

    ResponderExcluir