Wie kann ich GRUB mitteilen, dass ich Windows neu starten möchte - bevor ich neu starte?

33

Ich habe ein Dual-Boot-Linux / Windows-System eingerichtet und wechsle häufig von einem zum anderen. Ich überlegte, ob ich in einem der Menüs ein Menüelement hinzufügen könnte, um Windows direkt neu zu starten, ohne die GRUB-Eingabeaufforderung zu verlassen.

Ich habe diese Frage in einem Forum gesehen, das ist genau das, was ich will, aber es geht um Lilo, was nicht mein Fall ist.

Ich dachte an eine Lösung, die den Standardeintrag im GRUB-Menü ändern und dann neu starten würde, aber es gibt einige Nachteile, und ich fragte mich, ob es eine sauberere Alternative gibt.

(Ich wäre auch an einer Lösung interessiert, um von Windows direkt in Linux zu booten, aber das könnte schwieriger sein und gehört nicht hierher. Wie auch immer, solange ich es auf die eine Art habe, könnte die andere Art eingerichtet werden als der Standard.

UPDATE Es scheint, dass jemand eine ähnliche Frage gestellt hat , und wenn dies die vorgeschlagenen Antworten sind, kann ich sie genauso gut bearbeiten /boot/grub/grubenvwie grub-rebootund grub-set-defaultund grub-editenvtun. )

Vielen Dank im Voraus für alle Tipps.

UPDATE :

Dies ist meine GRUB-Version: (GRUB) 1.99-12ubuntu5-1linuxmint1

Ich habe versucht zu rennen grubonce , der Befehl wurde nicht gefunden. Und die Suche in den Repositories bringt mir nichts. Ich bin auf Linux Mint, also könnte es sein ...

Sehen man grub-reboot, es scheint so, als würde es tun, was ich will, genauso wie es gruboncetut. Es ist auch überall verfügbar (zumindest für mich, ich denke, es ist Teil des Grub-Pakets). Ich habe zwei verwandte Befehle gesehen: grub-editenvund grub-set-default.

Ich habe herausgefunden, dass man nach dem Laufen etwas Ähnliches bekommt sudo grub-set-default 4, wenn man läuft grub-editenv list:

saved_entry=4

Und beim Laufen grub-reboot 4bekommst du so etwas wie:

prev_saved_entry=0
saved_entry=4

Was bedeutet, dass beide dasselbe tun (einer ist vorübergehend, einer nicht).

Überraschenderweise, als ich versuchte:

sudo grub-reboot 4
sudo reboot now

Es hat nicht funktioniert, als hätte ich nichts getan, es zeigte mir nur das Menü wie gewohnt und wählte den ersten Eintrag aus, der besagt, dass dieser Eintrag in 10s gebootet wird.

Ich habe es noch einmal versucht, ich dachte, ich hätte vielleicht den falschen Eintrag geschrieben (er basiert auf Null, oder?). Dieses Mal hing es nur am Menübildschirm, und ich musste den PC hart zurücksetzen, um booten zu können.

Wenn jemand das ausprobieren kann, nur um zu sehen, ob es nur ich ist, würde ich es schätzen. (Minze hat es mir schwer gemacht, und das wäre eine gute Gelegenheit, mich zu ändern: P).

Das Einlesen des Codes /boot/grub/grub.cfgscheint der richtige Weg zu sein, aber nach meinen Beobachtungen werden diese Einstellungen einfach ignoriert ...

jadkik94
quelle
In welcher Distribution bist du? Ich glaube, ich habe es auf meinem Debian zum Laufen gebracht.
JW013

Antworten:

20

Damit der grub-rebootBefehl ausgeführt werden kann, müssen mehrere erforderliche Konfigurationsänderungen vorgenommen werden:

  • Der Standardeintrag für grub muss auf gesetzt sein saved. Ein möglicher Ort hierfür ist die GRUB_DEFAULT=Leitung in/etc/default/grub
  • Verwenden grub-set-default , um Ihren Standardeintrag auf den Standardeintrag festzulegen, den Sie normalerweise verwenden.
  • Aktualisiere deine Grub-Konfiguration (zB update-grub).

Dies sollte sich um die Ersteinrichtung kümmern. Machen Sie in Zukunft einfach grub-reboot <entry>einen einmaligen Boot von <entry>.

jw013
quelle
Ich sehe deine Worte "Standardeintrag für Maden muss auf saved", während meine Aufbewahrung GRUB_DEFAULT=0auch ausreichte. Also ist das savedunnötig?
Zhangxaochen
Ich bin mir nicht sicher, ob jeder merkt, wie cool diese Funktion wirklich ist. Ich plane, win7ult64 mit rhel64 zu booten und umgekehrt, während der Rhel automatisch für eine geplante Backup-Aufgabe eines anderen Win-Networked-Systems verfügbar wird, die an rhel zfs raidz2 weitergeleitet wird. Wenn die Sicherung abgeschlossen ist, wird das geriebene System für den Rest der Woche automatisch wieder in einen Windows-Server-Spielplatz gestartet, gespült und wiederholt. Es ist ein Formwandler. :-)
Brian Thomas
Es dauerte eine Ewigkeit, bis ich bemerkte, dass der Neustart von grub im Hintergrund fehlschlägt und einen erfolgreichen Rückkehrcode liefert. Ich hoffe, meine vorgeschlagene Bearbeitung ist in Ordnung. :-)
Niemand
23
  1. Bearbeiten Sie die Datei / etc / default / grub und ersetzen Sie sie GRUB_DEFAULT=0durchGRUB_DEFAULT=saved
  2. sudo update-grub
  3. Ihr Befehl wird sein:

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

Eine hübsche Funktion in Ihrem ~ / .bashrc wird so aussehen

# ******************************************************************
# 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
}

Falls Ihre grub.conf mehrere Zeilen für Windows enthält, kümmern sich die folgenden Funktionen nur um Zeilen, die mit menuentryder ersten beginnen und nur die erste auswählen , und beziehen sich auf 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
}
Philippe Gachoud
quelle
Meine Datei /boot/grub/grub.cfgenthält mehr Zeilen mit "Windows", von denen viele ungefähr so ​​aussagen ...=1 i915.semaphores=1 acpi_osi='!Windows 2012' $vt..., also gehe ich davon aus, dass Ihr Code darauf fehlschlagen würde. Dies kann durch Greifen nach behoben werden ^menuentry 'Windows.
Jan Vlcinsky,
Dies sollte als die richtige Antwort markiert werden.
Taha Rehman Siddiqui
Die Funktion ist hilfreicher als ich dachte.
Carson Ip
2

Mit der GRUB Reboot GNOME Shell Extension ist das ganz einfach (wenn Sie also GNOME verwenden).

Um die Erweiterung zu verwenden, rufen Sie die oben verlinkte Website auf und klicken Sie auf den kleinen Schalter in der oberen rechten Ecke (wahrscheinlich ist er deaktiviert, wenn Sie zum ersten Mal zur Seite navigieren). Sie werden aufgefordert, zu bestätigen, dass Sie die Erweiterung herunterladen und installieren möchten.

Sobald es installiert ist, können Sie Ihr Systemmenü öffnen und auf den Netzschalter klicken, wie Sie es normalerweise für einen Neustart tun würden. Das sich öffnende Fenster, in dem bestätigt wird, dass Sie das System herunterfahren oder neu starten möchten, enthält jetzt eine Schaltfläche mit der Bezeichnung "Neu starten auf ...". Wenn Sie auf diese Schaltfläche klicken, werden die Elemente in Ihrem Grub-Menü in der Liste angezeigt, sodass Sie auswählen können, welches Betriebssystem nach dem Neustart automatisch gestartet werden soll. Wenn Sie eines dieser Elemente auswählen, wird Ihr System mit den ausgewählten Grub-Optionen heruntergefahren und neu gestartet.

Dylan Smith
quelle
1
Ich habe meinen Beitrag so bearbeitet, dass Details zur Installation und Verwendung der Erweiterung enthalten sind.
Dylan Smith
1

Ich verwende openSUSE, das mit einem Skript namens kommt grubonce, das genau das tut, was Sie brauchen - setzen Sie grub entry, um es beim nächsten Neustart zu verwenden.

# 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

Ich weiß nicht, welche (falls vorhanden) anderen Distributionen dieses Skript enthalten. Falls Ihre Distribution es nicht hat, können Sie diese Seite lesen:

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

Petr Uzel
quelle
Es ist eigentlich Teil von grub und trustedgrub (was auch immer das ist) und NICHT von grub2, also habe ich es nicht auf Tumbleweed Juni 2019
Redanimalwar
1

grub-set-defaultscheint verfügbarer zu sein ( gruboncewird in Ubuntu nicht aufgeführt). Dies kann auch hilfreich sein, da Windows 7 einen Neustart während des Startvorgangs durchführt, wenn beim letzten Herunterfahren Aktualisierungen angewendet wurden (dh der Start wird gestartet, einige Aktualisierungsdaten werden verarbeitet, ein Neustart wird durchgeführt und anschließend die Anmeldeseite angezeigt).
Ich habe Windows 7 oft gestartet, nur um Ubuntu wieder zum Laufen zu bringen.

Charles-Brücke
quelle
1
Ich habe das Windows-Update deaktiviert, damit das kein Problem sein sollte: D, ich werde es versuchen. Nach dem, was ich gesehen habe, scheint dies dasselbe zu tun wie grub-reboot. Ich bearbeite meine Frage mit mehr Details. Danke trotzdem.
Jadkik94
1

In Fedora können Sie das folgende Skript verwenden. Beachten Sie, dass dies größtenteils das gleiche ist wie unter https://askubuntu.com/a/18186/149422 beschrieben , mit einigen Änderungen für GRUB 2 in Fedora .

#!/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
Roy Hyunjin Han
quelle
1

Ich benutze Ubuntu 16.04 und die oben genannten Lösungen haben bei mir nicht funktioniert ... aus irgendeinem Grund sudo grub-reboot 2schien die /boot/grub/grubenvDatei nie zu aktualisieren , auch nach dem Wechsel GRUB_DEFAULT=0zu GRUB_DEFAULT=savedin beiden /etc/default/grubund /boot/grub/menu.lst. Die Verwendung des savedefault --default=2 --onceBefehls in grub schien ebenfalls weder zu funktionieren noch die grubenv-Datei zu ändern. Es kehrte immer wieder zum ursprünglichen Menü zurück, als ob nichts getan worden wäre.

Also habe ich es manuell gemacht und es hat funktioniert (ich bin mir nicht sicher, wie es mit RAID-Laufwerken funktionieren würde).

sudo grub-editenv - set next_entry=2
reboot

Wobei die 2 der auf Null basierende Menüeintrag für den Windows-Eintrag im Startmenü von Grub ist.

Sie können sehen, warum dies funktioniert, indem Sie sich die /boot/grub/grub.cfgDatei ansehen, da sie den Wert next_entry verwendet und ihn dann für den nächsten Start zurücksetzt.

user4061565
quelle
0

Stimmen Sie mit @ jw013 überein. Außerdem können Sie die Menükachel für den Neustart von Grub angeben (einschließlich des Titels des übergeordneten Menüs). z.B:

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

Während "Erweiterte Optionen für Ubuntu" das übergeordnete Menü ist, ist "Ubuntu mit Linux 4.13.0-26-generic" das Untermenü.

Changbin Du
quelle
0

Starten Sie den Computer auf einem bestimmten Startziel neu (Grub-Eintrag).
Das Startziel wird interaktiv mit fzf ausgewählt.

# 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
Simon Schürg
quelle