web-dev-qa-db-ja.com

UEFI BIOSでWindowsではなくGRUBを起動する方法

TL; DR、編集に追加されました:

質問は:

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

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

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

私は、Ubuntu 17.04を内部のNVMeディスクにインストールすることから始めました。このディスクは、GPTでディスクの半分を使うようにパーティション分割し、別のUEFIブートパーティションを使います。 GRUBがうまく起動するので、起動時にGRUBブートメニューが表示されます。ここではGRUBが知っている項目を選択できます。

それから私は最近ダウンロードしたISOからWindows 10 Proをインストールしました。それは同じUEFIパーティションにWindowsブートマネージャをインストールし、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-grubはWindowsブートマネージャのインストールを見つけてそれをメニューに追加します、そしてそのメニュー項目はUEFIブートマネージャでGRUBパーティションを手動で選択したときに機能します。)

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

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

2番目の編集:正しい答えは返答へのコメントの中で言及されることになるので、ここでそれを繰り返すつもりです:

"BCDEDIT" in an admin Shell on Windows is the working solution. The others don't work.
12
Jon Watte

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

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

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

やり過ぎるやり方は他にもあります。たとえば、GRUBを( Boot Repair またはgrub-install経由で)再インストールするとうまくいくはずです。ただし、これらの方法では、動作確認済みのGRUB設定が破損する危険性があります。

EFIの中にはバグがあるものもあり、GRUBを確実に起動させるのを困難にする可能性があるその他の問題もあります。あなたがそのような問題に出くわすなら、あなたはAskUbuntuでこれらの質問と答えをチェックすることを望むかもしれません:

12
Rod Smith

私はこの数週間この問題を抱えています。私はこれらのオプションを使ってそれを考え出しました。これらのことをする前に、私はあなたのBIOS/UEFIに入って起動順序をチェックし、grubがインストールされている場所が最初に正しいことを確認することをお勧めします。

だから私はそれがどのように見えるかあなたは2つの選択肢があるということです。

オプション1

私があなたにお勧めするのは、まずWindows 10をインストールすることですそれからubuntuをインストールします。しかし、「ソフトウェアを再インストールする」と言うのはちょっとしたタブーであることを私は知っているので、私も選択肢を提供します。

オプション2

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

1
taterbotz

いくつか解決策があります。

  1. UEFIを編集してデフォルトを調整します。 Linuxではefibootmgrを使うことができます。 Windowsではよくわかりませんが、UEFIを設定できる回復オプションで起動できると思います。あるいは、rEFIndのようなものをインストールするのを好むかもしれません。
  2. EFIパーティションのフォルダ名を変更してください。私はそれがbootと呼ばれるフォルダーを好むか、それにフォールバックすると思います。
  3. Windowsのブートローダを使うだけで、他のOSを起動するように設定できると思います。
1
jiggunjer

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

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

Grubを起動オプションとして表示させる。私はBIOSにEFIを追加する必要がありました。

私は私の経歴の中の「ブートリストオプション」に行きました。 [ブートオプションの追加]をクリックしました(これはBIOS固有のものです)。これは私にファイル名のオプションを与えました、私の場合は\EFI\ubuntu\grubx64.efiで、それにgrubという名前を付けました

それからgrubエントリを起動シーケンスの先頭に移動すると、これがデフォルトエントリとして表示されます。

すなわち私が言っているのは、正しいEFIファイルを見つけてそれを起動順序/順序の先頭に移動する必要があるかもしれないということです。

0
Wes