最近、ハード ドライブの一部に不良セクタが発生しました。数日前にはデータが破損しました。そのため、ハード ドライブの寿命が近づいているようです。
そこで、新しいハードディスクを購入するという選択肢もありましたが、今後 5 ~ 6 か月以内にラップトップを交換する予定なので、出費を増やしたくありませんでした。そこで、外付けハードドライブに Ubuntu をインストールしました。インストールすると、外付けの Ubuntu が内蔵ハードドライブの EFI パーティションを変更してしまいました。これで、起動するには外付けハードドライブを接続する必要があります。
両方の EFI パーティションを分離したいです。外部ドライブなしで内部ハード ドライブ Ubuntu を開くことができる EFI パーティションが必要です。また、内部に障害が発生した場合に外部で起動したいです。そのため、内部に 1 つ、外部に 1 つ、2 つの異なる EFI が必要です。
内部 Ubuntu から update-grub を実行してみました。内部から Windows を検出できるだけでなく、外部から Ubuntu も検出できることが示されました。ただし、EFI パーティションは変更されません。また、外部ドライブに別の EFI パーティションを構成するにはどうすればよいでしょうか。外部ドライブに 200 MB の EFI fat32 パーティションをすでに作成しています。内部から外部に EFI 全体をコピーしました。BIOS で作成したカスタム エントリから起動するかどうかをテストしました。そこで、内部ハード ドライブから内部 grub を起動する方法と、すべてを動作させるために外部で /etc/default/grub の EFI パス以外にどのような変更を加える必要があるかを知りたいです。
答え1
Launchpad のバグ #1396379 (インストール中にブートローダの場所に関するユーザーの入力が無視され、最初に見つかった EFI が使用される) が、この種の問題の原因です。2 番目のディスクにインストールする場合は、バグの「この問題は私にも影響しますか?」に自分自身を追加してください。インストーラー以外では、grub は正常に動作し、適切なオプションを使用してインストール先を指定できます。
2 台目のディスクにインストールすると、1 台目のディスクの EFI が更新され、grub は引き続き起動しますが、grub の追加ファイルは 2 台目のディスク上に置かれます。これは、2 台目のディスクが接続されている限り機能します。2 台目のディスクが接続されていないと、grub は起動を続行するために必要なファイルを見つけることができません。1 台目のディスクの EFI ファイルを 2 台目のディスクの EFI にコピーすると、2 台目のディスクの起動が機能します。起動するには、ディスクをブート順序の先頭として選択/配置します。
最初の EFI の修正は、EFI/ubuntu/grub.cfg ファイル (数行のみ) を編集して、ディスク/パーティションの参照を最初のディスクに戻し、最初のディスクの Ubuntu の UUID (ターミナルで sudo blkid を実行して取得) を使用することです。この変更により、grub は最初のディスクから起動できるようになります。他に必要な変更は、Windows ブートローダーをデバイスのデフォルトに戻すことだけです (必要な場合があります)。ファイル /EFI/Boot/bootx64.efi は元々 Windows ブートローダーでしたが、/EFI/Boot/bckbootx64.efi (または bootx64.efi.bup) に名前が変更された可能性があります。/EFI/Microsoft/Boot/bootmgfw.efi の Windows ブートローダーのサイズをチェックして、bckbootloader.efi が実際に Windows ブートローダーであることを確認します。次に、それを (または /EFI/Microsoft/Boot/bootmgfw.efi) コピーして /EFI/Boot/bootx64.efi に戻します。デバイスまたは /EFI/Microsoft/Boot/bootmgfw.efi を起動順序の 2 番目に配置します。これにより、2 番目のディスクが接続されていない場合は、2 番目のエントリが起動します。