web-dev-qa-db-ja.com

壊れたUEFIブート、安全に進める方法

Windows 10(Windows 8.1からのアップグレード)とプライマリOSであるUbuntu 14.04をデュアルブートするラップトップを持っています。 UEFIブート用にシステムを構成しましたが、今朝まで正常に機能していました。

昨夜、Windowsを何かに使用しましたが、このマシンではめったにありません。今朝、コンピューターはWindowsで起動しました。 Windowsでブート設定が乱れているのではないかと疑われたため、ブート時に「エスケープ」を使用して、grubがインストールされているドライブを手動で選択しました。

コンピューターが起動時に最初にチェックするデフォルトのgrub/bootパーティションは、Windowsの起動時に直接ポイントされます-grubメニューはありません。幸い、初期インストール時にブート修復を使用し、他のパーティションの1番目のセクターがgrub /ブートパーティションを指すようにオプションを選択しました。ルートパーティションを選択すると、BIOSから安全ではないという通知を受け取りました。

考える前に、BIOSに入ってセキュアブートを無効にし、ルートパーティションからブートしようとしました。 GRUBがうまくいったので、Ubuntuを選択してLUKSパスワード画面にアクセスしました。

この時点で、セキュアブートを無効にしてUbuntuをロードしようとするのは間違いであると考えました。結局のところ、UEFIが2番目の何かを無効にした場合、完全に正常で機能する署名付きブートローダーが台無しになりますか?

安全に進めるための正しい方法が何であるかについて、私はちょっと迷っています。安全に起動せずにUbuntuを復元する方法はありますか?提案?

-ありがとう

1
Joe

あなたの主なポイントに対するより直接的な答えに進む前に、あなたの質問のいくつかの誤解に対処したいと思います。どうか我慢してください。

起動時に最初にコンピューターがチェックするデフォルトのgrub/bootパーティションは、Windowsの起動時に直接

EFIベースのコンピューターでは、ブートローダーは通常のファイルとして EFI System Partition(ESP)に保存されます。 コンピューターは、起動時にどのファイルを起動するかを認識しています。実行するパーティションとファイルを識別するエントリがNVRAMに保存されているためです。 EFIには「デフォルト...ブートパーティション」というものはありません。これがBIOSの起動方法であり、EFIではありません。

最初のインストール時にブート修復を使用し、他のパーティションの1番目のセクターがgrub/bootパーティションを指すようにするオプションを選択しました。

EFIでは、「ブートセクター」は存在しません。または、より正確には、ブートコードはディスクまたはパーティションの最初のセクターに格納されません。すべてファイルを介して処理され、NVRAMのエントリによって参照されます。

ルートパーティションを選択すると、BIOSから安全ではないという通知を受け取りました。

パーティションを選択しませんでした。ブートローダーファイルを選択しました。あなたの説明から、ESPでEFI/ubuntu/grubx64.efiを選択したと思います。これで問題が解決し始めますが、その点に戻ります。

BIOSに入った

BIOSがありません。あなたはEFIを持っています。多くの人々、さらには製造業者でさえもEFIをBIOSと呼んでいますが、これは混乱を招きます。これは、あなたが行ったように、ブートプロセスに関するBIOSの仮定を人々が引きずり込むからです。

セキュアブートを無効にしてUbuntuをロードしようとするのは間違いかもしれません。結局のところ、UEFIが2番目の何かを無効にした場合、完全に正常で機能する署名付きブートローダーが台無しになりますか?

EFI(またはUEFI、EFI 2.xのみ)とセキュアブートを混同しないでください。セキュアブートはUEFIのオプション機能の1つにすぎません。 EFIは、BIOSのreplacementです。多くのEFI(さらにUEFI)にはセキュアブートサポートがありませんが、セキュアブートにはUEFIが必要です。

安全に進めるための正しい方法が何であるかについて、私はちょっと迷っています。安全に起動せずにUbuntuを復元する方法はありますか?提案?

セキュアブートをサポートするために、UbuntuはShimというプログラムを使用します。 Ubuntuでは、shimx64.efiというファイル名が付いています。 ShimはGRUB=(grubx64.efi)を起動するようにハードコードされています。これはLinuxカーネルを認証するためにShimを呼び出すことができます。

以前にgrubx64.efiを起動したことを書いたことに注意してください。これは、セキュアブートを無効にすると正常に機能します。ただし、セキュアブートを有効にすると、grubx64.efiがデフォルトのセキュアブート要件と一致しない可能性があるため、失敗します。 shimx64.efi、OTOHはMicrosoft(そのキーはほぼすべてのコンピューターに存在する)によって署名されているため、機能します。これが解決策の鍵です(望ましくありませんが、Wordが最適です):Shim経由で起動するようにシステムを再構成します。 Ubuntuでefibootmgrユーティリティを使用してこれを行うことができます。まず、Sudo efibootmgr -vを使用して利用可能なオプションを表示します。

$ Sudo efibootmgr -v
BootCurrent: 0000
Timeout: 0 seconds
BootOrder: 0000,0007,0003,2003,0001,2001,2002
Boot0000* ubuntu    HD(2,1f4800,82000,5f6b4992-fcfe-4a2c-9e67-98b0a30dfe7d)File(\EFI\ubuntu\shimx64.efi)
Boot0001* Lenovo Recovery System    HD(3,276800,1f4000,de3b7563-97f5-48c6-ab7f-2f5d6d57c644)File(\EFI\Microsoft\Boot\LrsBootMgr.efi)RC
Boot0002* EFI Network 0 for IPv4 (08-9E-01-FF-CA-4D)    ACPI(a0341d0,0)PCI(1c,0)PCI(0,0)MAC(089e01ffca4d,0)IPv4(0.0.0.0:0<->0.0.0.0:0,0, 0RC
Boot0003* ubuntu    HD(2,1f4800,82000,5f6b4992-fcfe-4a2c-9e67-98b0a30dfe7d)File(\EFI\ubuntu\grubx64.efi)RC
Boot0004* EFI Network 0 for IPv6 (08-9E-01-FF-CA-4D)    ACPI(a0341d0,0)PCI(1c,0)PCI(0,0)MAC(089e01ffca4d,0)030d3c000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000RC
Boot0007* Windows Boot Manager  HD(2,1f4800,82000,5f6b4992-fcfe-4a2c-9e67-98b0a30dfe7d)File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}....................

これはほんの一例であり、あなたのものはかなりの点で異なる可能性があります。ただし、2つのubuntuエントリがあり、1つはshimx64.efiを参照し、もう1つはgrubx64.efiを参照することに注意してください。 BootCurrent行に示されているように、grubx64.efiエントリから起動している可能性があります。 grubx64.efiエントリも、おそらくBootOrder行の最初にあります。これを変更するには、次のように、BootOrder-oオプションを使用して、新しいefibootmgrを作成する必要があります。

Sudo efibootmgr -o 0000,0007

最初の2つが失敗した場合にコンピューターが使用する他のオプションも追加できます。もちろん、ShimとGRUBエントリではなく、0000,0007ではありません)に関連付けられた番号を指定する必要があります(これらが番号である場合を除きます)。最初にGRUBエントリが失敗した場合のフォールバックとして;理論的には、Shimエントリを指定するonlyで問題なく動作するはずです。エントリを含めることをお勧めします。セキュアブートを無効にしても動作することがわかっているため、現在のBootCurrent値を2番目(またはそれ以降)のオプションとして使用します。そのようにすると、間違えたり、Shimバイナリが破損した場合でも、セキュアブートを無効にして、コンピューターの組み込みブートマネージャーを使用するか、他の方法でブート順序を調整することにより、作業システムに戻ります。

これが完了したら、ファームウェアを再起動し、セキュアブートを再度有効にします。それ以降はshouldで正常に動作します。

7
Rod Smith