Como faço para o grub2 inicializar uma opção diferente somente na próxima inicialização?

19

Estou configurando uma máquina Linux / Windows sem cabeça de inicialização dupla. Eu principalmente quero que a máquina sempre inicialize no Ubuntu, exceto ocasionalmente quando eu precisar testar algo no Windows.

Instalei o Windows e o Ubuntu e, atualmente, ele é inicializado sempre no Ubuntu. Eu gostaria de poder dizer para ele inicializar no Windows apenas na próxima inicialização e, quando reiniciar a partir do Windows, o sistema retornará à inicialização do Ubuntu.

Encontrei o Grub Legacy - seção 4.3.1 - Inicializando apenas uma vez, mas estou usando o servidor Ubuntu 14.04, que possui a versão mais recente do grub. Pelo que li, preciso fazer algumas alterações /etc/default/grube usá-las sudo grub-set-defaultquando quiser inicializar no Windows.

Eu acho que essas mudanças começam adicionando isso a /etc/default/grub:

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=false

Sempre que são feitas alterações, /etc/default/grubeu sei que preciso executar
sudo update-grube que resulta em:

Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.13.0-43-generic
Found initrd image: /boot/initrd.img-3.13.0-43-generic
Found linux image: /boot/vmlinuz-3.13.0-32-generic
Found initrd image: /boot/initrd.img-3.13.0-32-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
Found Windows 7 (loader) on /dev/sda1
done

Como o Windows é a 7ª opção nessa lista, acredito que executaria sudo grub-set-default 6(contagem baseada em 0) - isso está correto e existe um método diferente para obter uma lista numerada de opções de inicialização depois que o sistema já foi inicializado?

Além disso, as linhas são /etc/default/grubsuficientes para atingir esse comportamento ou preciso adicionar configurações adicionais?

cwd
fonte

Respostas:

19

Você precisa ter certeza de que possui GRUB_DEFAULT=savedsua configuração do grub (que é gerada automaticamente, altere essa parte editando / etc / default / grub). sudo update-grubpara ativar as alterações e usar sudo grub-reboot $1.

grep -i "menuentry '" /boot/grub/grub.cfg

Fornecerá as entradas do menu que você pode colar e colar por US $ 1. Ou, como você observa que as opções são indexadas com zero, então a n-ésima entrada do menu pode ser obtida passando (n-1) para o grub-reboot.

Veja por exemplo

Não testei por mim, pois não tenho uma instalação do 'Windows 7'.

pbhj
fonte
graças Eu acho que isso é o que eu preciso (com detalhes adicionais que eu encontrei em help.ubuntu.com/community/Grub2 )
CWD
Se você passou a tentar fazer isso sem alterar a linha para GRUB_DEFAULT=saved, você tem que fazer isso manualmente mais tarde como explicado aqui no segundo parágrafo para Grub2 e depoisgrub-set-default 0; grub-reboot 0
rubo77
1
um comando para mostrar os números da entrada:grep -i "menuentry '" /boot/grub/grub.cfg|sed -r "s|--class .*$||g"|nl -v 0
rubo77
1
Conforme askubuntu.com/questions/838704/grub-reboot-to-specific-kernel , menuentrys sob um submenuin /boot/grub/grub.cfgdevem ser passados ​​para grub-rebootas SUBMENU>MENUENTRY. Então, por exemplo, usando algum bash-fu semelhante ao do @ rubo77, eu queria inicializar o menuentry7, no entanto, essa entrada estava em uma submenuque era a segunda entrada no menu de nível superior, então eu precisava passar '1>6'(aspas simples para evitar a interpretação do shell>).
Trent Nelson
1
AVISO: Isso não funciona se você inicializar uma partição BTRFS. O Grub precisa ser capaz de gravar no grubenv, pois ele inicializa o Windows, não pode gravar no BTRFS. O arquivo normalmente é armazenado em / boot / grub e pode ser visualizado com grub-editenv. Corrigi meu sistema montando BTRFS em /, uma partição EXT4 em / boot e, em seguida, a partição EFI em / boot / efi.
nathan
-2

Tente instalar o grub-customizer (guia de instalação abaixo) no seu sistema Ubuntu. Essa ferramenta da GUI fornece um bom conjunto de opções com as quais você pode definir as configurações do GRUB, incluindo nomes e ordem das opções de inicialização, sistema padrão, resolução de tela, fontes, plano de fundo, etc ...
Não tenho certeza se possui o capacidade de definir diretamente o que você deseja, mas pelo menos pode mostrar os números do sistema operacional. Eles também podem ser referenciados pelo nome, eu acho.

Como instalar o grub-customizer:

sudo add-apt-repository ppa:danielrichter2007/grub-customizer
sudo apt-get update
sudo apt-get install grub-customizer

(fonte: launchpad - daniel richter )

Byte Commander
fonte
Eu vi essa ferramenta, mas estou usando o servidor Ubuntu 14.04 (sem GUI), então adoraria ter uma solução de linha de comando.
Cwd
Oh, não sabia disso. Uso o padrão 14.10 (Unity) e pessoalmente prefiro GUIs para trabalhos como esses. Você conhece este site? Ele descreve o que você escreveu na sua pergunta, mas se for diferente da sua primeira fonte, talvez você encontre exatamente o que precisa.
Byte Commander
-1 - Estou votando negativamente na sua resposta porque me pergunto se você leu a pergunta. Eu posso entender que você pode ter perdido 'servidor ubuntu' lá, mas você acabou de enviar o mesmo link que eu incluí na minha pergunta em seu último comentário ...
CWD
Opa Mas você acha que toda vez que escrevo um novo comentário ou resposta releio toda a pergunta e as postagens anteriores, verificando todos os links !? Além disso, você também pode instalar DEs nas distribuições de servidores! Admito que ainda não sou especialista, mas pelo menos tento ajudar os outros onde posso, mesmo que as respostas nem sempre sejam 100% corretas ou úteis. Você deveria estar feliz por alguém tentar ajudá-lo a resolver esse problema, mas se você quiser me irritar, conseguiu. Uma última coisa: você falou GRUB_SAVEDEFAULT=false, mas não consigo encontrar isso no nosso link. E você esqueceu outras linhas mencionadas lá!
Byte Commander