web-dev-qa-db-ja.com

GRUB再起動する前にWindowsを再起動したいのですが、どうすればよいですか?

デュアルブートのLinux/Windowsシステムをセットアップしていて、頻繁に一方から他方に切り替えます。 GRUBプロンプトで停止することなく、メニューの1つにメニュー項目を追加してウィンドウに直接再起動できるかどうかを考えていました。

私はフォーラムで この質問 を見ました、それはまさに私が欲しいものですが、それはliloを扱っています、それは私のケースではありません。

GRUBメニューのデフォルトエントリを変更してから再起動する解決策を考えましたが、いくつかの欠点があり、よりクリーンな代替策があるかと思っていました。

(また、私はWindowsからLinuxに直接ブートするソリューションに興味がありますが、それは難しいかもしれないし、ここには属しません。デフォルト。

[〜#〜] update [〜#〜]誰かが尋ねたようです 同様の質問 、そしてそれらが提案されているかどうか答えは、/boot/grub/grubenvgrub-rebootgrub-set-defaultgrub-editenvと同じように編集することです。 )

ヒントを事前にありがとう。

[〜#〜]更新[〜#〜]

これは私のGRUBバージョンです:(GRUB) 1.99-12ubuntu5-1linuxmint1

grubonceを実行してみましたが、コマンドが見つかりません。リポジトリで検索しても何も起こりません。私はLinux Mintを使っているので、それでそれかもしれません...

man grub-rebootを見ると、grubonceと同じように、私が望んでいるように見えます。それはどこでも入手可能です(少なくとも私にとっては、それはgrubパッケージの一部だと思います)。関連する2つのコマンド、grub-editenvgrub-set-defaultを見ました。

Sudo grub-set-default 4を実行した後、grub-editenv listを実行すると、次のような結果が得られることがわかりました。

saved_entry=4

そしてgrub-reboot 4を実行すると、次のようになります。

prev_saved_entry=0
saved_entry=4

これは、両方が同じことを行うことを意味します(一方は一時的なもので、もう一方はそうではありません)。

驚いたことに、私が試したとき:

Sudo grub-reboot 4
Sudo reboot now

何もしなかったかのように機能しませんでした。通常どおりメニューを表示し、最初のエントリを選択しました。このエントリは10秒で起動するというものです。

もう一度試しましたが、間違ったエントリを書いたのではないかと思いました(ゼロベースですよね?)。その時、それはメニュー画面でハングしただけで、起動するためにPCをハードリセットする必要がありました。

誰かがこれを試してみることができるなら、それが私だけであるかどうかを確認するために、私はそれを感謝します。 (ミントは私に苦労してきました、そしてそれは:Pを変更する良い機会です)。

/boot/grub/grub.cfgでコードを読み取るのはこれでいいようですが、私の観察では、これらの設定を無視しているだけです...

34
jadkik94

grub-rebootコマンドが機能するためには、いくつかの必要な構成変更を行う必要があります。

  • Grubのデフォルトのエントリはsavedに設定する必要があります。これが可能な場所の1つは、GRUB_DEFAULT=/etc/default/grub行です。
  • grub-set-defaultを使用して、デフォルトのエントリを通常使用するエントリに設定します。
  • GRUB設定を更新します(例:update-grub)。

これにより、初期設定が処理されます。将来的には、grub-reboot <entry>を一度だけ起動して<entry>を実行します。

20
jw013
  1. / etc/default/grubを編集し、GRUB_DEFAULT=0GRUB_DEFAULT=savedに置き換えます
  2. Sudo update-grub
  3. コマンドは次のようになります。

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

〜/ .bashrcのきれいな関数は次のようになります

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

Grub.confにWindowsの複数の行が含まれている場合、以下の関数はmenuentryで始まり、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

それを行う非常に簡単な方法は GRUB Reboot GNOME Shell Extension を使用することです(つまり、GNOMEを使用している場合)。

拡張機能を使用するには、上記のリンク先のサイトに移動し、右上隅にある小さなトグルをクリックします(最初にページに移動したときに、おそらくOffと表示されています)。拡張機能をダウンロードしてインストールすることを確認するように求められます。

インストールが完了すると、通常の再起動と同様に、[システム]メニューを開いて電源ボタンをクリックできます。シャットダウンまたは再起動することを確認するポップアップウィンドウに、「Restart to ...」というラベルの付いたボタンがあります。そのボタンをクリックすると、grubメニューの項目がリストに表示され、再起動後に自動的に起動するOSを選択できます。これらの項目のいずれかを選択すると、システムはシャットダウンし、選択したGRUBオプションを使用して再起動します。

2
Dylan Smith

@ jw013に同意します。また、メニュータイルをgrub-rebootに与えることもできます(親メニューのタイトルを含む)。例えば:

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

「Ubuntuの詳細オプション」が親メニューの場合、「Ubuntu、with Linux 4.13.0-26-generic」がサブメニューです。

1
Changbin Du

私はUbuntu 16.04を使用していますが、上記の解決策が機能しませんでした...何らかの理由で、Sudo grub-reboot 2/boot/grub/grubenvGRUB_DEFAULT=0の両方でGRUB_DEFAULT=savedから/etc/default/grubに変更した後でも、/boot/grub/menu.lstsavedefault --default=2 --onceファイルを更新しないようです。 grubでSudo grub-editenv - set next_entry=2 reboot コマンドを使用しても、grubenvファイルが機能せず、変更もされませんでした。何も行われなかったかのように、元のgrubメニューに戻ってきました。

だから私はそれを手動でやるようになり、それはうまくいきました(しかし、それがRAIDドライブでどのように動くかはわかりません)。

__コード__

2は、grubスタートアップメニューのWindowsエントリのゼロベースのメニューエントリの場所です。

これが機能する理由は、/boot/grub/grub.cfgファイルを見るとわかります。これは、next_entry値を使用し、次回の起動のためにリセットするためです。

1
user4061565

私はgrubonceと呼ばれるスクリプトが付属しているopenSUSEを使用しています。

# 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

他のどのディストリビューションがこのスクリプトを配布しているのかわからないので、ディストリビューションにない場合は、このページをチェックしてください。

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

1
Petr Uzel

grub-set-defaultの方が利用しやすいようです(grubonceはUbuntuの「バース」にリストされていません)。 Windows 7は、最後のシャットダウン時に更新が適用された場合(つまり、起動を開始し、一部の更新データを処理し、再起動して、ログインページを表示する)、起動中に再起動を実行する癖があるため、さらに役立つ場合があります。
私はしばしばWindows 7を起動して、Ubuntuが動作していることを確認して戻ってきました。

1
charlesbridge

Fedoraでは、次のスクリプトを使用できます。これは https://askubuntu.com/a/18186/149422 で説明されているものとほとんど同じですが、 FedoraのGRUB 2 にいくつかの変更を加えています。

#!/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

マシンを特定のブートターゲット(Grubエントリ)で再起動します。
ブートターゲットは、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