UEFI BIOSにWindowsではなくGRUBを起動させる方法は?


22

編集で追加されたTL; DR:

質問は:

BIOSに同じUEFIブートパーティション上のWindowsブートマネージャーよりもGRUBを優先させるにはどうすればよいですか?

問題はGrubではありません。BIOSが起動すると、Grubは正しいことを行います。Windows UEFIブートストラップとGrub UEFIブートストラップの両方がブート可能であるため、「ディスクはブートできません」という問題はありません。問題は、BIOSがどのUEFIブートストラップからブートするかを選択することです。

新しいコンピュータをセットアップしていますが、デフォルトでUbuntuで起動しますが、起動時にWindowsを選択するオプションがあります。これは、電源が切れたり戻ったりする場合に特に重要です。私も家にいません。

まず、内部NVMeディスクにUbuntu 17.04をインストールし、GPTでパーティション分割してディスクの半分を使用し、別のUEFIブートパーティションを作成しました。GRUBはこれで問題なく起動します。起動時にGRUBブートメニューが表示され、GRUBが認識している任意の項目を選択できます。

次に、最近ダウンロードしたISOからWindows 10 Proをインストールしました。Windowsブートマネージャーを同じUEFIパーティションにインストールし、Ubuntuをそのまま(すばらしい!)にして、Windows 10で正常に起動します。

ただし、電源投入時にUEFIファームウェアがGRUBではなくWindowsブートマネージャーをすぐに選択するようにする「何か」が行われました。Linuxをブートする唯一の方法は、BIOSブートマネージャー(私のBIOSではF11)を使用して、GRUBブートローダーを手動で選択することです。UEFI BIOSは、UEFIパーティションに複数の起動可能なインストールがあることを認識しています。これは、ブートマネージャーでインストールを選択できるためです。ただし、UEFI BIOSのセットアップメニューを表示しているときは、起動優先度の選択で「UEFIブート内部ドライブ」を選択するだけで、使用するパーティションの特定のブートローダーを選択できません。 。そして、デフォルトでは、GRUBではなくWindowsを選択します。

インターネット(およびこのサイト)は、これを修正する古い方法はupdate-grub(GRUBがWindowsを認識するように)実行し、次にgrub-install(GRUBをデバイスに戻す)ことを示唆しています。しかし、残念ながら、それでも次のような動作があります。前述のとおり、BIOSはデフォルトでWindowsブートマネージャを選択します。(update-grubWindowsブートマネージャーのインストールが見つかり、それがメニューに追加されます。また、UEFIブートマネージャーでGRUBパーティションを手動で選択すると、そのメニュー項目が機能します。)

UEFIブートパーティションでGRUBを「デフォルト」ブートにするにはどうすればよいですか?

MSI X399 Carbonマザーボードを使用。

2番目の編集:正解は応答へのコメントに記載されることになるため、ここで繰り返します。

"BCDEDIT" in an admin shell on Windows is the working solution. The others don't work.

WindowsをインストールしてからLinuxをインストールするだけです。その逆ではありません。私は正反対の問題を抱えています。電源が切れて元に戻ると、私のコンピューターは不意に起動してLinuxで起動します。一つのことは、私は各システムを独自のドライブに持っているということです。起動順序では、LinuxとGrubが含まれているドライブを選択します。
dmb

1
すでに他の人から提案されていることを多くの人が提案しているのは驚くべきことです。元の投稿でも、以下のコメントでも、うまくいかなかったと私は言いました。正しい解決策は、Windows管理シェルの「BCDEDIT」でした。他のどの提案もそれを解決しませんでした(そして、それらのほとんど、私の質問に従って、私はすでに試しました。)
ジョン・ワッテ

回答:


21

これを行うには、いくつかの異なる方法があります。

  • EFIセットアップユーティリティ -ほとんどのEFIは、起動時に特別なキー(Esc、Del、またはファンクションキーですが、どのキーがシステムによって異なるか)を押すことでアクセスできるセットアップユーティリティを提供します。これらは、常にではありませんが、ブート順序を調整する方法を提供します。ファームウェアがそのようなオプションを提供している場合、それを使用してGRUBを最上位に移動できるはずです。(ubuntuそのディストリビューションからインストールした場合、GRUBはと呼ばれる可能性があります。)
  • EFIシェル-Arch Linux wikiでbcfg説明されているよう、EFIバージョン2シェルでコマンドを使用できます。システムにアクセスしやすいシェルがまだセットアップされていない場合、このアプローチは他のアプローチよりも使いにくいようですが、OSに依存しません。
  • EasyUEFI-サードパーティのWindows EasyUEFIプログラムが、あなたがやりたいことをする最も簡単な方法であると思われます。ubuntuEasyUEFIのリストでエントリをクリックして、一番上に移動できます。
  • bcdedit-Windows bcdeditコマンドは、NVRAMベースのブート順序を変更できます。具体的には、管理者のコマンドプロンプトウィンドウを開いて入力bcdedit /set "{bootmgr}" path \EFI\ubuntu\shimx64.efi(オプションで、必要に応じbcdedit /set "{bootmgr}" description "ubuntu"て、説明をわかりやすくするために続けます)するとうまくいきます。
  • efibootmgr-このLinuxツールは、ブート順序を調整できます。最初にsudo efibootmgr単独で入力してオプションを表示します。エントリにBoot####関連付けられている番号()ubuntuと現在の起動順序(BootOrder行)をメモします。次にubuntu-oオプションを使用して、上部にエントリがある新しいブート順序を入力できます。たとえば、現在のブート順序が0000,0003,0007,0004でubuntu0007の場合、入力sudo efibootmgr -o 0007,0000,0003,0004してブート順序を調整します。
  • refind-mkdefault-このスクリプトはrEFIndに付属しており、前述の手順を自動化する方法です。rEFIndを使用していない場合は、ここでスクリプトをダウンロードして実行可能にする必要があります(chmod a+x refind-mkdefault)。sudo ./refind-mkdefault -L ubuntuまたはsudo ./refind-mkdefault -L shimx64、GRUBをデフォルトのブートエントリとして実行します。

これらのオプションには潜在的な問題と合併症があります。最も可能性が高いのは、古いまたは代替のubuntuブートエントリがあるかどうかです。正しいものを起動順序の一番上に移動することが重要です。間違ったものを移動すると、動作に変化がなかったり、機能しないブートが発生したりして、ブートが困難になります。を使用する場合efibootmgr、このBootCurrent行は、デフォルトとして設定する必要があるオプションを示すのに役立ちます。

やり過ぎである他の方法があります。たとえば、(Boot Repairまたはを介してgrub-install)GRUBを再インストールすると、うまくいくはずです。ただし、これらのアプローチは、既知の動作するGRUB構成に損傷を与えるリスクがあります。

また、一部のEFIにはバグがあり、GRUBを確実に起動するのを困難にする他の問題があることにも注意してください。このような問題が発生した場合は、AskUbuntuで次の質問と回答を確認してください。


質問で述べたように、EFIセットアップユーティリティではubuntuをデフォルトとして選択できませんでしたが、手動のブートメニューでそれを行うことができました。ドライブを選択させ、それからWindowsを起動するだけです。efibootmgrは起動順序を変更しようとしましたが、BIOSは再起動に注意を払いませんでした。EasyBCDが機能しませんでした。メニュー項目を追加できませんでした。ただし、管理シェルの「BCDEDIT」は実際には機能しました。そのオプションに感謝します!
Jon Watte 2017

EasyBCDとEasyUEFIは、同じベンダーの2つの異なるプログラムであることに注意してください。悲しいことに、EasyUEFIの無料版はもう利用できないようです-試用版のみが提供されています。ただし、BOOTICEはUEFIブート設定を編集できるもう1つの無料プログラムです:元の中国語サイト説明とスクリーンショットのある英語サイト
telcoM 2018年

を使用することsudo efibootmgr -n 0002は、現在のSO順序を変更するよりもはるかに優れています。変更BootNext: 0001BootCurrent: 0002て次回のために残し、現在のGRUBエントリをそのままにします。単にbashを追加して、chmod +xそのコマンドを再起動のコマンドとともにラップします。
m3nda

2

私はこの数週間この正確な問題を抱えてきました。私はこれらのオプションを使用してそれを理解しました。これらのことを行う前に、BIOS / UEFIで起動順序を確認し、GRUBがインストールされている場所が最初であることを確認することをお勧めします。

だから私がそれを見る方法はあなたが2つの選択肢を持っているということです。

オプション1

私がお勧めするのは、最初に Windows 10をインストールすることです次に、ubuntuをインストールします。しかし、「ソフトウェアを再インストールする」と言うのはちょっとタブーだと思うので、別の方法も提供します。

オプション2

現在のセットアップでは、Live Ubuntu CD /フラッシュドライブを起動して、をインストールして実行することをお勧めしますboot-repair。「推奨修復」オプションをクリックして、表示される指示に従います。それを注意深く読み、実行する前にすべてのコマンドを読んでください。これにより、現在のGRUBのインストールが新しいもので上書きされ、うまくいけば修正されるはずです。


提案をありがとうございますが、私はすでにそれらを試しました。初めてインストールしたときは、Windows 10、Ubuntu 17.04、Boot Repairの順にインストールしました。それはまだデフォルトでWindowsになっていて、それから私は最初に消去してUbuntuで再インストールしました。
Jon Watte 2017

UEFIで起動順序を調整しようとしたと思いますよね?
taterbotz 2017

はい、私が言うように、「UEFI BIOSのセットアップメニューにいるとき、ブート優先度の選択で「UEFI boot my internal drive」を選択できます-特定のブートローダーを選択できませんそのパーティションで使用する」
Jon Watte

2

私はいくつかの解決策を見ます:

  1. UEFIを編集してデフォルトを調整します。Linuxではを使用できますefibootmgr。Windowsではわかりませんが、UEFIを構成できる回復オプションを起動できると思います。または、rEFIndなどをインストールすることをお勧めします。
  2. EFIパーティションのフォルダー名を変更します。というフォルダが優先されるか、フォールバックされると思いますboot
  3. Windowsブートローダーを使用するだけで、他のOSを起動するように構成できると思います。

efibootmgrを使用して起動順序を編集できましたが、BIOSはそれを無視してWindowsを起動します。ブートフォルダー名の変更(またはgrubを "boot"にコピーすること)は、Microsoftのフォルダーを削除するまで機能しません。WindowsブートローダーはWindows以外のOS(少なくとも署名されていないもの)を起動しません
Jon Watte

@JonWatteたぶんuefiブートローダーが異なるかもしれませんが、32ビットのBIOSマシンでWindows 7ブートローダーからubuntuを起動したことを覚えています。多分それはまだgrub2をチェーンロードできますか?以来efibootmgr動作しません、私はMSIを購入されることはありません知っています。
jiggunjer 2017

ええ、このMSIマザーボードには他にもいくつかの問題があり、ギガバイトと引き換えにAmazonに戻ります。
Jon Watte 2017

1

ラップトップのマザーボードを交換したところ、汚れが完全に消えました。

これが修正済みとしてマークされていることは知っていますが、あなたにとって役立つと思いました。

grubをブートオプションとして表示するには。EFIをBIOSに追加する必要がありました。

私は私のBIOSの「ブートリストオプション」に行きました。「ブートオプションの追加」をクリックしました(これはBIOS固有であることを認識しています)。これは私にファイル名のオプションを与えました、私の場合は \EFI\ubuntu\grubx64.efiそれであり、それに名前を与えましたgrub

次に、grubエントリをブートシーケンスの一番上に移動しました。これで、デフォルトのエントリとして表示されます。

つまり、私が言っているのは、正しいEFIファイルを見つけて、それをブートシーケンス/順序の先頭に移動する必要があるだけかもしれません。


1

上記のいずれのオプションも、古いHP 655ラップトップでは機能しませんでした。解決策は、Windowsブートマネージャーを非アクティブにすることです。

sudo -s
efibootmgr
efibootmgr -b 4 --inactive

4をWindowsブートマネージャーの数に置き換えます。efibootmgrを再度実行すると、非アクティブであることを示すために星が消えるはずです。

私のコンピューターが起動してgrupブートメニューを起動した後も、そこからウィンドウを選択できます。


-2

可能な解決策は、/ etc / default / grubファイルを手動で編集することです。

sudo vim /etc/default/grub

デフォルトのエントリはGRUB_DEFAULT=、/ etc / default / grubの設定によって決まります。最初の「メニューエントリ」の値は「0」です。Ubuntuが起動画面の2番目のエントリである場合は、GRUB_DEFAULT = 1を設定します。

その後、grub configを更新するコマンドを実行する必要があります。 update-grub

別のオプションは、インストールgrub-customizerで、そのGUIを使用してブート優先順位を構成することです。


問題はGrubではありません。投稿で述べたように、BIOSでGrub UEFIブートオプションを選択できる場合は、WindowsまたはUbuntuを選択できるGrubブートアップメニューが表示されます。これはデフォルトで必要なメニューです。残念ながら、BIOSはデフォルトでWindowsブートマネージャを選択します。
Jon Watte 2017

先に述べたように、最初に起動するシステムとしてUbuntuを構成することで、grubのブート順で修正できます。GUIを使用してこれを行うには、grub-customizerを使用します。linuxandubuntu.com/home/...
氏ラズベリー

繰り返しになりますが、GrubはBIOSによっても開始されません。GRUBの起動順序は関係ありません。GRUB_DEFAULTは関係ありません。ここでは問題ではありません。
Jon Watte 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.