it-swarm-eu.dev

Jak mohu říct GRUB chci restartovat systém Windows - před restartem?

Mám nastavený duální spouštěcí systém Linux/Windows a často přecházím z jednoho na druhý. Přemýšlel jsem, jestli bych mohl přidat položku nabídky v jednom z nabídek, abych se restartoval přímo do oken, aniž bych se zastavil na řádku GRUB Prompt.).

Viděl jsem tuto otázk na fóru, to je přesně to, co chci, ale jedná se o lilo, což není můj případ.

Přemýšlel jsem o řešení, které by změnilo výchozí položku v nabídce GRUB a následně restartovalo), ale existují nějaké nevýhody, a přemýšlel jsem, jestli existuje čistší alternativa.

(Také by mě zajímalo řešení pro zavedení ze systému Windows přímo do Linuxu, ale to by mohlo být těžší a nepatří sem. Každopádně, pokud to budu mít jedním způsobem, druhý způsob by mohl být nastaven jako výchozí.

[~ # ~] update [~ # ~] Zdá se, že se někdo zeptal podobná otázka , a pokud jsou navrženy odpovědi, mohu také upravit /boot/grub/grubenv, jako grub-reboot a grub-set-default a grub-editenv. )

Předem děkujeme za jakékoli tipy.

[~ # ~] aktualizace [~ # ~] :

Toto je moje GRUB verze: (GRUB) 1.99-12ubuntu5-1linuxmint1

Pokusil jsem se spustit grubonce, příkaz nebyl nalezen. A hledání toho v úložištích mi nic nedává. Jsem na Linux Mint, takže to může být ...

Když vidíme man grub-reboot, Vypadá to, že dělá to, co chci, stejně jako to dělá grubonce. Je také k dispozici všude (alespoň je to pro mě, myslím, že je součástí balíčku grub). Viděl jsem dva související příkazy: grub-editenv A grub-set-default.

Zjistil jsem, že po spuštění Sudo grub-set-default 4, Při spuštění grub-editenv list Získáte něco podobného:

saved_entry=4

A když běží grub-reboot 4, Dostanete něco jako:

prev_saved_entry=0
saved_entry=4

Což znamená, že obě dělají totéž (jedna je dočasná, není).

Překvapivě, když jsem se pokusil:

Sudo grub-reboot 4
Sudo reboot now

Nefungovalo to, jako bych nic neudělal, pouze mi ukázal menu jako obvykle a vybral první položku, která uvede, že bude spuštěna v 10s.

Zkoušel jsem to znovu, myslel jsem si, že jsem mohl napsat nesprávný záznam (je nulový, že?). Tehdy se to prostě oběsilo na obrazovce menu a já jsem musel tvrdě resetovat PC, abych mohl nastartovat.

Pokud to někdo může vyzkoušet, jen abych zjistil, jestli jsem to jen já, ocenil bych to. (mincovna mi dala těžký čas a to by byla dobrá příležitost ke změně: P).

Čtení kódu v /boot/grub/grub.cfg Vypadá, jako by to šlo, ale z mých pozorování to jen ignoruje tato nastavení ...

34
jadkik94

Za účelem grub-reboot příkaz k práci, musí být provedeno několik požadovaných změn konfigurace:

  • Výchozí položka pro grub musí být nastavena na saved. Jedním možným místem pro toto je GRUB_DEFAULT= řádek v /etc/default/grub
  • Použijte grub-set-default pro nastavení výchozí položky na položku, kterou obvykle používáte.
  • Aktualizujte konfiguraci grubu (např. update-grub).

To by se mělo postarat o počáteční nastavení. V budoucnu stačí udělat grub-reboot <entry> pro jednorázové spuštění <entry>.

20
jw013
  1. Upravte/etc/default/grub a nahraďte GRUB_DEFAULT=0 s GRUB_DEFAULT=saved
  2. Sudo update-grub
  3. váš příkaz bude:

    Sudo grub-reboot "$(grep -i 'windows' /boot/grub/grub.cfg|cut -d"'" -f2)" && Sudo reboot
    

hezká funkce ve vašem ~/.bashrc bude vypadat

# ******************************************************************
# reboot directly to windows 
#   Inspired by http://askubuntu.com/questions/18170/how-to-reboot-into-windows-from-ubuntu
# ******************************************************************
function my_reboot_to_windows {
    WINDOWS_TITLE=`grep -i 'windows' /boot/grub/grub.cfg|cut -d"'" -f2`
    Sudo grub-reboot "$WINDOWS_TITLE"
    Sudo reboot
}

V případě, že váš soubor grub.conf obsahuje více řádků pro Windows, následující funkce se postarají pouze o řádky začínající menuentry a vybírající pouze první, odkazující na Windows:

function my_reboot_to_windows {
    WINDOWS_TITLE=`grep -i "^menuentry 'Windows" /boot/grub/grub.cfg|head -n 1|cut -d"'" -f2`
    Sudo grub-reboot "$WINDOWS_TITLE"
    Sudo reboot
}
24

Nejjednodušší způsob, jak to udělat, je GRUB Restartovat GNOME Shell Extension (tj. Pokud používáte GNOME).

Chcete-li rozšíření použít, přejděte na výše uvedený web a v pravém horním rohu klikněte na malý přepínač (pravděpodobně se při prvním přechodu na stránku vypne). Budete požádáni o potvrzení, že chcete stáhnout a nainstalovat rozšíření.

Po instalaci můžete otevřít nabídku Systém a kliknout na tlačítko napájení tak, jak byste normálně restartovali. Okno, které se objeví, potvrzující, že chcete vypnout nebo restartovat, má nyní tlačítko s názvem „Restart to ...“. Po klepnutí na toto tlačítko se v seznamu zobrazí položky v nabídce grub, takže si můžete vybrat, který operační systém se po restartování automaticky spustí. Pokud vyberete jednu z těchto položek, váš systém se vypne a restartuje pomocí vybraných možností grubu.

2
Dylan Smith

Souhlasím s @ jw013. A můžete také dát menu dlaždice grub-reboot (včetně názvu nadřazené nabídky). např:

$ Sudo grub-reboot "Advanced options for Ubuntu>Ubuntu, with Linux 4.13.0-26-generic"
$ Sudo reboot

Kde je „Rozšířené možnosti pro Ubuntu“ nadřazené menu, je podnabídka „Ubuntu s Linuxem 4.13.0-26-generic“.

1
Changbin Du

Používám Ubuntu 16.04 a výše uvedená řešení pro mě nefungovala ... z nějakého důvodu Sudo grub-reboot 2 Nikdy se zdálo, že neaktualizuje soubor /boot/grub/grubenv, Ani po změně GRUB_DEFAULT=0 Na GRUB_DEFAULT=saved V /etc/default/grub A /boot/grub/menu.lst. Zdá se, že použití příkazu savedefault --default=2 --once V grubu také nefungovalo ani nezměnilo soubor grubenv. Právě se vracela do původní nabídky grubu, jako by se nic nedělo.

Nakonec jsem to udělal ručně a funguje to (nejsem si jistý, jak by to fungovalo s jednotkami RAID).

Sudo grub-editenv - set next_entry=2
reboot

Kde 2 je nulové umístění položky nabídky pro položku Windows v úvodní nabídce grubu.

Proč to funguje, se podíváte na soubor /boot/grub/grub.cfg, Protože používá hodnotu next_entry a poté ji resetuje pro další spuštění.

1
user4061565

Používám openSUSE, který je dodáván se skriptem s názvem grubonce, který dělá přesně to, co potřebujete - nastavit grub, aby se použil při příštím restartu.

# grubonce
0: Trace -- openSUSE 12.1 - 3.1.10-1.16
1: Debug -- openSUSE 12.1 - 3.1.10-1.16
2: Desktop -- openSUSE 12.1 - 3.1.10-1.16
3: Failsafe -- openSUSE 12.1 - 3.1.10-1.16

# grubonce 0
Using entry #0: Trace -- openSUSE 12.1 - 3.1.10-1.16

# grubonce 2
Using entry #2: Desktop -- openSUSE 12.1 - 3.1.10-1.16

Nevím, které (pokud existují) jiné distribuce dodávají tento skript, takže v případě, že jej distro nemá, můžete se podívat na tuto stránku:

http://sidvind.com/wiki/GRUB:_Boot_another_OS_once

1
Petr Uzel

grub-set-default se zdá dostupnější (grubonce není uveden v verši Ubuntu '). Může být také užitečnější, protože systém Windows 7 má ve zvyku provádět restart během spouštění, pokud byly aktualizace použity při posledním vypnutí (to znamená, že se spustí, zpracuje některá aktualizační data, restartuje se a poté zobrazí přihlašovací stránku).
Často jsem začal Windows 7, abych se vrátil a zjistil, že Ubuntu běží.

1
charlesbridge

Ve Fedoře můžete použít následující skript. Všimněte si, že je to většinou to samé, jak je popsáno v https://askubuntu.com/a/18186/149422 , s několika úpravami pro GRUB 2 ve Fedoře .

#!/bin/bash
if [ `readlink /boot/grub2/grubenv` == "/boot/efi/EFI/Fedora/grubenv" ]; then
    Sudo mv /boot/grub2/grubenv /boot/grub2/grubenv-original
    Sudo ln -s ../efi/EFI/Fedora/grubenv /boot/grub2/grubenv
fi
MENU_ENTRY=`grep ^menuentry /boot/grub2/grub.cfg  | grep --line-number Windows`
MENU_NUMBER=$(( `echo $MENU_ENTRY | sed -e "s/:.*//"` - 1 ))
Sudo grub2-reboot $MENU_NUMBER
Sudo reboot
1
Roy Hyunjin Han

Restartujte počítač na konkrétní spouštěcí cíl (položka Grub).
Cíl spouštění je interaktivně vybrán s fzf.

# Search for grub.cfg
GRUB_CFG=$(find /boot -name grub.cfg 2> /dev/null)

if [[ -z ${GRUB_CFG} ]]; then
  echo "No grub.cfg found under /boot. Try as root."
  exit 1
Elif [[ ! -r ${GRUB_CFG} ]]; then
  echo "${GRUB_CFG} is not readable. Try as root."
  exit 1
fi

GRUB_MENUENTRY=$(awk -F\' '/menuentry / {print $2}' ${GRUB_CFG} | fzf)

# Set boot target for next boot
grub2-reboot "${GRUB_MENUENTRY}"

reboot
0
Simon Schürg