Eu tenho uma máquina que possui o Windows e o Ubuntu 20.04. A partição ativa (primeiro item de inicialização no BIOS) é aquela em que o Ubuntu está instalado, e eu inseri manualmente as entradas no GRUB para ter o Windows como uma seleção para inicializar, que é definida como padrão.
Eu gostaria de poder usar um pendrive (ou talvez melhor um SD-Card) para alterar a seleção padrão. Se estiver inserido, deve inicializar no Ubuntu (a primeira entrada), caso contrário, deve usar a seleção padrão (a terceira entrada, Windows).
Eu precisaria (de alguma forma, eu não saberia como) instalar/copiar/dd GRUB no USB-Stick/SD-Card e selecioná-lo para ser o primeiro item na ordem de inicialização do BIOS, com um fallback para a partição do Ubuntu, qual é atualmente o primeiro na ordem de inicialização?
Ou existe (espero) uma ferramenta onde eu possa simplesmente colocar um arquivo no Stick/Card que é lido pelo GRUB?
Atualização: estive verificando os arquivos de configuração do GRUB e notei que existe um arquivo chamado /boot/grub/grubenv
que possui uma entrada chamada next_entry=
. Esta linha existe porque às vezes eu usei sudo grub-reboot 0
para reiniciar no Ubuntu. Se eu executar sudo grub-reboot 0
, essa linha muda para next_entry=0
.
Agora estou pensando em modificar /etc/default/grub/00_header
para verificar se um determinado dispositivo USB está conectado e, se estiver, que ele grava next_entry=0
no grubenv
arquivo ou que eu adicione algum código que apenas defina as variáveis necessárias semelhantes a como next_entry=0
está sendo feito.
Então agora meu problema é que não sei quais ações podem ser executadas em 00_header
, eventualmente usar curl
para buscar a variável seria perfeito, mas acho que nesse ponto nenhuma rede está presente e esse curl não é um comando reconhecido.
Como posso depurar/aprender o GRUB para ver o que é possível neste arquivo sem correr o risco de danificar o sistema?
No momento, estou pensando em usar uma VM limpa com um instantâneo no qual posso reverter se algo der errado, a fim de obter alguns insights. Mas talvez uma dica ou duas de especialistas aqui tenham muito valor para mim.
Costumava haver um software chamado Multisystem. Vejo que ainda está por aí. Geralmente é um software que permite instalar várias distros em um pendrive. A maneira como você pode usá-lo (e eu usei) é usá-lo para inicializar no grub (o grub da unidade flash USB). Uma ferramenta mais recente que vejo chama-se Ventoy, mas não a usei. Parece que tem a mesma abordagem. Basicamente, eu tinha o GRUB no meu bolso. Caso contrário, eu costumava inicializar no Windows. Eu não tinha o grub instalado (de propósito) e também fiz dual boot, usando o pendrive para inicializar no Debian. Existem maneiras mais limpas de fazer isso, mas essas seriam mais fáceis, eu acho.
Se você abortar o processo de inicialização no menu de seleção do GRUB 2 e entrar no shell, poderá listar os dispositivos conectados executando o
ls
comando.No meu caso, o pendrive era
(hd0,msdos1)
.Primeiro eu modifiquei o
/boot/grub/grub.cfg
arquivo para que ele inclua o seguinte:onde
next_entry=0
está o que$prefix/grubenv
estaria definindo se eu tivesse executadosudo grub-reboot 0
.Isso funciona, mas não sobrevive a uma atualização do kernel, pois isso reconstrói
/boot/grub/grub.cfg
Então eu modifiquei
/etc/grub.d/00_header
adicionando o seguinte:e emitido
sudo update-grub
, que então gerou/boot/grub/grub.cfg
O resultado é que, se um pendrive estiver conectado e contiver o arquivo
grub_boot_config
(pode estar vazio) na raiz,(hd0,msdos1)/grub_boot_config
será bem-sucedido e definidonext_entry=0
.O próximo passo de melhoria seria incluir
0
(ou qualquer item de menu que devesse ser inicializado) no arquivo e fazer com que o script o lesse e o configurassenext_entry
, além de fazer com que ele procurasse esse arquivo em todas as unidades, não apenas(hd0,msdos1)
.De qualquer forma, verifica-se que
/boot/grub/grub.cfg
é muito resiliente a erros de digitação, de modo que é improvável que você quebre seu sistema fazendo essas modificações (isso eu testei com uma VM limpa).