AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 669349
Accepted
Daniel F
Daniel F
Asked: 2021-09-17 12:44:31 +0800 CST2021-09-17 12:44:31 +0800 CST 2021-09-17 12:44:31 +0800 CST

Use o pendrive com o arquivo para selecionar a entrada do GRUB 2

  • 772

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/grubenvque possui uma entrada chamada next_entry=. Esta linha existe porque às vezes eu usei sudo grub-reboot 0para 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_headerpara verificar se um determinado dispositivo USB está conectado e, se estiver, que ele grava next_entry=0no grubenvarquivo ou que eu adicione algum código que apenas defina as variáveis ​​necessárias semelhantes a como next_entry=0está sendo feito.

Então agora meu problema é que não sei quais ações podem ser executadas em 00_header, eventualmente usar curlpara 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.

grub2 dual-boot
  • 2 2 respostas
  • 345 Views

2 respostas

  • Voted
  1. Alex
    2021-09-17T14:22:33+08:002021-09-17T14:22:33+08:00

    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.

    • 0
  2. Best Answer
    Daniel F
    2021-09-25T03:22:21+08:002021-09-25T03:22:21+08:00

    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 lscomando.

    No meu caso, o pendrive era (hd0,msdos1).

    Primeiro eu modifiquei o /boot/grub/grub.cfgarquivo para que ele inclua o seguinte:

    ### BEGIN /etc/grub.d/00_header ###
    if [ -s $prefix/grubenv ]; then
      set have_grubenv=true
      load_env
    fi
    # =================== BEGIN MODIFICATION ===================
    if [ -s (hd0,msdos1)/grub_boot_config ]; then
      set next_entry=0;
    fi
    # =================== END MODIFICATION ===================
    if [ "${initrdfail}" = 2 ]; then
       set initrdfail=
    elif [ "${initrdfail}" = 1 ]; then
       ...
    

    onde next_entry=0está o que $prefix/grubenvestaria definindo se eu tivesse executado sudo 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_headeradicionando o seguinte:

    cat << EOF
    if [ -s \$prefix/grubenv ]; then
      set have_grubenv=true
      load_env
    fi
    EOF
    # =================== BEGIN MODIFICATION ===================
    cat << EOF
    # =================== BEGIN MODIFICATION ===================
    if [ -s (hd0,msdos1)/grub_boot_config ]; then
      set next_entry=0;
    fi
    # =================== END MODIFICATION ===================
    EOF
    # =================== END MODIFICATION ===================
    cat <<EOF
    if [ "\${initrdfail}" = 2 ]; then
       set initrdfail=
    elif [ "\${initrdfail}" = 1 ]; then
       ...
    

    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_configserá bem-sucedido e definido next_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 configurasse next_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).

    • 0

relate perguntas

  • grub2-mkconfig não está gerando caminhos de montagem corretos (e também como faço para me livrar de kernels extras que não uso mais?)

  • Como encontrar o logon do kernel panic no debian

  • Ctrl + C não funciona no modo de usuário único no Linux

  • Como instalar o rEFInd para multiboot USB DIY

  • Configuração do GRUB para reconhecer diferentes ambientes de desktop (instalações) da mesma distribuição Linux

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve