web-dev-qa-db-ja.com

どのOS Grubが起動するかをリモートで制御する方法は?

次のデュアルブートセットアップを検討してください。

  • Grubは/dev/sdaにインストールされます
  • /dev/sda1/bootとしてマウントされます
  • /dev/sda6/としてマウントされます
  • Windows 10は/dev/sdb2にインストールされます

現状では、Grubは起動時にデフォルトでUbuntuを選択し、SSHを介してリモートでログインできます。 Grubの起動時にWindowsを選択することもでき、RDPを介してリモートでログインできます。

問題は、物理的にいないときに起動するOSを選択する方法がないことです。

この質問 は、Grubが最後に選択したオペレーティングシステムを自動的に起動する方法を説明しています。ただし、これは機能しません。 Windowsを選択した場合、PCをリモートで再起動してUbuntuを起動する方法はありません。

起動するOSをリモートで制御する方法はありますか?

9
Nathan Osman

grub-rebootを使用して、特定のGrubメニューブートエントリから再起動できます。これは、リモートセッションからも実行できます。 SSH経由。

別のOSを起動するには、Grubメニューの0から始まる位置を選択します。

Sudo grub-reboot <num>

enter image description here

この場合、私のWindowsは4の位置にあります。だから発行するとき

Sudo grub-reboot 4 && Sudo reboot

Grub設定で定義したタイムアウト後に、マシンはWindowsを再起動します。

Windowsから再起動すると、マシンはデフォルトのOSで起動します。これは次のように定義できます

Sudo grub-set-default <num>

これを機能させるには、GRUB_DEFAULT=saved/etc/default/grubを定義する必要がありますが、私のシステムではデフォルト設定でも動作しました。

残念ながら、WindowsからWindowsを再起動することはできません。

11
Takkat

takkatの答え に感謝する別のアイデア:

  1. デフォルトのブートはUbuntuです
  2. grub-reboot Nここで、NはWindowsブートエントリです
  3. Windowsを再起動すると、デフォルトのブートであるUbuntuに戻ります。

短所:Windowsを再起動するには、2回再起動する必要があります:Windowsを再起動し、Ubuntuを起動してgrub-reboot Nをもう一度! :-(

3
Fabby

時間に応じてgrubを使用してデフォルトのOSを設定できます。 GRUBをスケジュールできますか?これは、定義された期間にデフォルトの 'entry'(自動ログイン)を自動的に変更しますか? 。したがって、たとえば、$ MINUTEが奇数の場合にWindowsを起動し、$ MINUTEが偶数の場合にLinuxを起動するようにgrubを構成できます。

insmod datehook
if [ $MINUTE -eq 0 -o $MINUTE -eq 2  -o $MINUTE -eq 4 -o $MINUTE -eq 6 -o $MINUTE -eq 8]; then
    set default="Ubuntu"
else
    set default="Windows"
fi

特定のOSを使用する場合。その時が来るまで待ってください。

この方法を使用するには、Grubに到達するまでにかかる時間を考慮する必要があります。 5分の時間枠を使用する方がおそらく信頼性が高くなります。


ブートエントリを交互に切り替えることも可能だと思います。何かのようなもの :

if [ $default = "Ubuntu" ]; then
  set default="Windows"
else
  set default="Ubuntu"
fi

grubが最後に起動したOSを記憶するように設定されている場合( grub2に最後の選択を記憶させる方法

お使いのPCが目的のOSで起動しない場合は、再起動してください。

1
Max