Existe uma maneira de o grub reiniciar automaticamente no Windows a partir do Windows?

11

Eu tenho uma configuração de inicialização dupla:

  1. Ubuntu 16.04 LTS
  2. janelas

Atualmente, quando eu quero rebootdo Ubuntu para o Windows, eu uso grub-rebootcom o número apropriado como argumento. Isso funciona bem.

No entanto, às vezes o Windows precisa de uma reinicialização para que um determinado programa possa instalar ou atualizar e eu manualmente tenho que selecionar a entrada correta do menu de inicialização do grub. Existe uma maneira semelhante (na interface do Windows) de informar ao grub qual entrada inicializar?

Suponho que o grub-rebootcomando transmita o argumento para um arquivo que, por sua vez, é lido pelo grub upon reboot.

editar (referente à minha resposta selecionada): Atualmente, estou pensando em montar a unidade ext4 que contém / boot e criar scripts para a edição. isso pode demorar um pouco, já que estou fazendo isso no meu tempo livre, além do meu trabalho não técnico de 40h / semana. ^^

amon san
fonte
Comentários não são para discussão prolongada; esta conversa foi movida para o bate-papo .
terdon
Atualize sua pergunta no futuro com o que você acabou fazendo para o grub reiniciar automaticamente no Windows. Estou interessado em saber qual método funcionou para você e em ver o script da janela (se houver) que você escreveu. Tenho certeza de que muitas outras pessoas também estão interessadas.
WinEunuuchs2Unix 16/03/19
@ WinEunuuchs2Unix atualmente estou trabalhando nisso. como Oli disse - o script no Windows é uma PITA real.
Amon san
@ amonsan Atualizei minha resposta com a reboot-to-windowsfunção que é um compromisso sobre o uso do ext2fsd que corrompe os superblocos do ext4 .
WinEunuuchs2Unix
@amonsan Você já configurou o sistema para que a reinicialização do Windows Update volte ao Windows automaticamente?
WinEunuuchs2Unix 30/03/19

Respostas:

8

Você pode replicar o que grub-rebootfaz. É apenas um script que eventualmente chama:

grub-editenv /boot/grub/grubenv set next_entry="Windows"

Onde Windowsestá o nome da sua entrada no menu grub. Pode não ser isso

Eu corri isso. Tudo o que faz inserção next_entry=Windowsem /boot/grub/grubenv. Na linha 2. Portanto, se é apenas um arquivo, em um sistema de arquivos, você pode fazer exatamente a mesma coisa no Windows . É um problema do Windows para resolver, mas aqui está a visão geral de alto nível:

  • Monte o disco onde está a inicialização. Esta é provavelmente a parte mais difícil, porque provavelmente é ext4. Isso pode ajudar, mas não é inacreditável que você precise do Linux executando o Windows para editá-lo.

    Como muru aponta, não precisa ser tão difícil. Você pode mover /bootpara sua própria partição FAT32 . Isso facilita a montagem no Windows.

  • Insira next_entry=Windows(ou o que seja) no arquivo após o comentário, antes dos hashes.

  • Desmontar.
  • Reinicie.

Criar scripts no Windows está fora da minha zona de conforto e não é exatamente o que fazemos aqui. Mas isso deve ser tudo o que você precisa fazer.

Oli
fonte
1
Nesse método, como eu disse em um comentário agora movido para o bate-papo, é melhor mudar para uma /bootpartição separada e formatá-la para FAT32 ou NTFS, e depois editá-las confortavelmente no Windows. Não há nada /bootque exija particularmente recursos do Unix-y. Criar scripts usando o Powershell deve ser fácil.
Muru
19

A maneira mais fácil é com o Grub

É um controle complicado grubdo Windows. É necessário um aplicativo de terceiros para acessar o Ubuntu no Windows e alguns hackers. No entanto, na parte superior deste post: Como alterar a ordem em minhas distros de inicialização dupla , você pode configurar grubpara reiniciar automaticamente a última opção do menu. Portanto, quando você inicializa com o Windows e ele acorda às 2 da manhã para executar atualizações, grubo Windows é recarregado para que possa concluir as atualizações normalmente.

Quando você reinicia manualmente e escolhe o Ubuntu em grubtodas as próximas reinicializações, carrega o Ubuntu automaticamente. Esse recurso funciona igualmente bem se você tiver bugs no kernel atual e deseja grubreiniciar automaticamente em uma versão mais antiga do kernel selecionada.

Como fazer com que o Grub repita a última seleção de inicialização

Isso é bastante direto. Usando sudopoderes, edite /etc/default/grube altere o seguinte:

#GRUB_DEFAULT=0 # Rather than option #1, we'll always default to last boot choice.
GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

A primeira linha que você estará comentando e logo abaixo, inserirá as próximas duas linhas.

Salve o arquivo e digite o terminal:

sudo update-grub

Linha de comando do Ubuntu para reiniciar no Windows

Atualmente você usa algo como isto:

sudo grub-reboot x # Where x is Windows zero-based grub menu number
sudo reboot now

Nesta resposta modificada do Stack Exchange, você pode usar o padrão do grub para reiniciar o Windows. Copie este código no seu ~/.bashrcarquivo:

function reboot-to-windows {
    WINDOWS_TITLE=`grep -i "^menuentry 'Windows" /boot/grub/grub.cfg|head -n 1|cut -d"'" -f2`
    sudo grub-set-default "$WINDOWS_TITLE"
    sudo reboot
}
  • Salve o ~/.bashrcarquivo com nova reboot-to-windowsfunção.
  • Feche sua sessão atual do terminal.
  • Abra uma nova sessão de terminal para que a alteração ~/.bashrcseja carregada.
  • Você pode digitar : ~/.bashrcpara recarregá-lo na sessão de terminal existente, mas algumas pessoas recomendam isso.

Para reiniciar no Windows a partir da linha de comando, use:

reboot-to-windows

Se o Windows reiniciar automaticamente quando você não estiver olhando, o Windows será reiniciado. Isso permite que as atualizações automáticas do Windows sejam processadas normalmente em ciclos de reinicialização múltipla que o Windows às vezes usa.

WinEunuuchs2Unix
fonte
1
Esta questão não tem nada a ver com a ordem de inicialização.
2113 Jennifer Jennifer
2
@ Jennifer A questão é, no entanto, uma instância do problema XY. Portanto, essa resposta é útil. Além disso, na verdade, trata-se de ordem de inicialização, pois está solicitando uma maneira de alterar temporariamente a ordem de inicialização de uma interface do usuário do Windows.
Wizzwizz4
2

grub-set-defaultdeve fazer o mesmo que o grub-reboot, mas tornar a configuração permanente. Isso não é exatamente da interface do usuário do Windows, como você pediu, mas talvez funcione para você.

Sebastian Stark
fonte
Esta questão não tem nada a ver com a ordem de inicialização.
2113 Jennifer Jennifer
Não entendi bem o que você quer dizer com esse comentário, você pode explicar?
Sebastian Stark
Amon San não está perguntando como faço para que o grub seja o padrão do windows - ze está perguntando, se o windows já foi inicializado, como causar uma reinicialização agora e selecione em qual SO inicializar.
23418 Jennifer
@ Jennifer OP não está perguntando "como reiniciar agora no Windows". Nesse caso, o OP poderia simplesmente selecionar Windows Restart e, em seguida, selecione Windows no menu grub. O OP está perguntando "Quando o Windows é reiniciado automaticamente quando eu não estou lá, como posso garantir que ele é reiniciado novamente no Windows, e não na opção padrão do menu grub". Pelo menos é assim que vejo o principal problema.
WinEunuuchs2Unix 30/03
Sim, o OP poderia simplesmente selecionar Windows Restart e, em seguida, selecionar Windows no menu grub. Mas o OP está perguntando especificamente como eu volto ao Windows automaticamente, sem ter que selecionar o Windows no menu de inicialização - em outras palavras, como fazer isso sem a minha intervenção? Muito X Ying!
21419 Jennifer
1

Você não disse qual versão do Windows ou se está na UEFI.

Se você estiver usando uma inicialização UEFI adequada (e não a herdada), é possível inicializar temporariamente a entrada de inicialização UEFI do Windows. No Linux, isso pode ser feito usando ferramentas como efibootmgr. No Windows, eu pessoalmente uso o EasyUEFI . É gratuito para uso pessoal, GUI, mas não para uso corporativo ou CLI. Não posso garantir sua segurança. Também parece ser um pouco lento, mas parece funcionar

Na minha própria configuração, que usa o Arch Linux (kernel EFI shim, sem GRUB) e o Windows 10, é assim que parece, depois de escolher "Manage EFI Boot Option" na tela inicial:

Imagem mostrando a opção de inicialização única

Se você estiver usando a inicialização UEFI, deverá ver algo semelhante para o Windows, além de uma única entrada para o Ubuntu (que carrega o GRUB), além de outras opções específicas de dispositivos. A opção de inicialização única pode então ser usada para definir a inicialização na entrada de inicialização UEFI do Windows uma vez e, em seguida, voltar ao GRUB a inicialização depois disso. Depois de definir isso, você reinicia normalmente.

muru
fonte
1
obrigado, mas isso exige muita interação manual a cada vez para o meu gosto.
Amon san
1
Dar de ombros. De qualquer forma, você deve mudar /bootpara NTFS ou FAT32 em vez de editá-lo como ext4. O suporte de gravação para ext4 no Windows é duvidoso, você está arriscando demais dessa maneira.
Muru