GRUB は、基本エントリを 2 番目のオペレーティングシステムに設定します。

GRUB は、基本エントリを 2 番目のオペレーティングシステムに設定します。

私はUbuntuとArchをデュアルブートとして使用しており、2番目のOSを起動するようにGRUBのデフォルトブートエントリを設定する方法が必要だと思います。たとえば、Archから再起動するとUbuntuで起動し、その逆も同様です。おそらく新しいグルーブエントリを作成して実行することもできますが、古いブートエントリを確認する方法がわからないので、別のエントリを選択してください。

答え1

grub-set-defaultGRUBの最新バージョンでは、これを達成するために2つのコマンドを使用できますgrub-reboot

grub-set-defaultデフォルトの起動項目に対する変更は保持されますが、変更を適用するには、UniversalまたはDebian / Ubuntu専用のラッパーを使用して実際のGRUB構成をGRUB_DEFAULT=saved更新する必要があります。/etc/default/grubgrub-mkconfigupdate-grub

grub-reboot指定する一度次の発射の発射対象としてのみ使用されます。名前にもかかわらず、実際にシステムを再起動しません。

どちらも、数値、メニュー項目のタイトル、またはメニュー項目の識別子を引数として使用します。必要なメニュー項目がサブメニューにある場合は、メインメニュー項目の名前/識別子、文字、およびサブメニュー項目>の名前を指定する必要があります。

たとえば、Debianでは、最初の(一般的なデフォルト)メニュー項目の名前は一般的であり、2番目のDebian GNU/Linuxメニュー項目のタイトルAdvanced options for Debian GNU/Linuxは、現在インストールされているカーネルのサブメニューを開くことです。各コアのサブメニューには、とDebian GNU/Linux, with <kernel version>の2つの項目がありますDebian GNU/Linux, with <kernel version> (recovery mode)

以前のカーネルバージョンを使用して通常モードで一度起動するには、次の手順を実行できます。

grub-reboot 'Advanced options for Debian GNU/Linux>Debian GNU/Linux, with <kernel version>'

コマンドを実行して変数に値があることを確認したら、grub-reboot現在のブートサイクルでコマンドが使用されていることを確認できます。一度も使用したことがない場合は、変数がまったく存在しない可能性があります。grub-editenv listnext_entry=grub-reboot

saved_entry=同様に、変数が存在する場合は、そのgrub-set-defaultコマンドが使用されたことを意味しますが、それとは異なり、next_entry=ブート試行後にその値は自動的に削除されません。

答え2

現在使用しているシステムを確認するスクリプト(サービス)を作成できますsystemd(たとえば、コマンドが存在することを確認してlsb_releaseUbuntuにいる必要がありますが、Archにはありません)。次に、GRUB設定ファイルの内容を確認します/boot/grub/grub.cfgGRUBに関するWikiページ)。次に、システムに応じてGRUB設定のエントリを切り替えます。これを行う方法はいくつかあります。これ推奨しないこれを行う方法は、基本設定ファイルを「手動で」(つまり、スクリプト/サービスを使用)編集することです。理論的には、システムの起動を妨げる間違いを犯すのは簡単なので、これをしないでください。 GRUBエントリを編集するための推奨される方法はカスタムエントリを使用することですが、スクリプト(または一般的なコマンドライン)でこれを処理するのは少し面倒です。

もちろん、スクリプト/方法にはいくつかの問題がありますsystemd(たとえば、実際には2つのスクリプトが必要です。1つはArchにあり、もう1つはUbuntuにあり、どちらも同じ機能を実装します)。しかし、あなたが望む機能に非常に近いです。ところで、あなたは次のように書きました:

以前の開始項目を確認する方法がわからないので、別の項目を選択してください。

必ずお読みください。GRUBのアーチLinux Wiki- 何度も。 GRUBの仕組みを最終的に理解するのに大いに役立ちました。私はこの文書を作った人を尊敬し、素晴らしい説明だと言いたいと思います。 Web上の最高の1つです(wikiページの例として)。

おおむねあなたの質問から望ましい結果を得る簡単な方法はありません。一方、「簡単な」ソリューションの楽しみはどこにありますか? :) 頑張ってください。楽しいコーディングになりますように。追加のアドバイスが必要な場合はお知らせください。

関連情報