GRUB ブートローダは、起動可能なフラッシュドライブを使用して内部 eMMc ドライブで Windows 10 を検索します。

GRUB ブートローダは、起動可能なフラッシュドライブを使用して内部 eMMc ドライブで Windows 10 を検索します。

この質問の残りの部分では、「内部」があるのは私のラップトップの内部eMMcドライブを表し、「USB」があるのは起動可能なUSBフラッシュドライブを表し、「Debian」はDebian Busterを表し、「Windows」は「Windows 「と仮定できます。 Windows 10を意味します。

内蔵ドライブにWindowsをインストールし、起動可能なUSBフラッシュドライブにDebianをインストールしました。マイブート設定では、デフォルトのブートローダよりもGrubブートローダが優先されます。

私の問題は、起動可能なドライブが接続されていないたびにGrubがドライブを見つけることができないことです。何もないコマンドラインインターフェイスを起動します。一度接続すると、グラフィカルインターフェイスを介してDebianとWindowsの間で標準を選択することができました。

私はStack Exchangeで似たような答えを見つけましたが、私のものを使うのに十分ではないと言うとき、私を信じてください。持つ発見によって問題を解決できます。私は引用する:

これらのどれも私の状況とは関係ありません。なぜならできるUSBスティックを接続して両方のオペレーティングシステムを実行した後、次のことができます。ESCCLI Grub 移行F9マイスタートデバイスを選択します(Windowsのみ利用可能)。

ついています。理想的には、USBスティックが接続されていない場合は、コンピュータが自動的にWindowsから起動したいと思います。または、これが不可能な場合は、狙撃する必要なしに起動方法を選択できます。ESCCLI Grubが始まる前。

USBフラッシュドライブを接続するときは、Grubを実行してください。 USBスティックが接続されたらGrubを実行 USBフラッシュドライブがGrub状態の場合いいえ接続済み: USBスティックが接続されていないグラップ 私が使用したときの起動オプションESCそしてF9: 起動オプション 「debian」はGrub CLIを再び呼び出します。

答え1

UEFIベースのシステムを使用しているようです。 GRUBとWindowsブートローダはどちらも(hd1,1)GRUBが表示するEFIシステムパーティション(縮小してESP)にインストールされます。

Debian 10のデフォルトのUEFI GRUBには、デフォルトではデフォルトの実行可能ファイルにすべてのGRUBモジュールが含まれているため、ファイルgrubx64.efiシステムドライバの不足は問題になりません。内部eMMCには標準のWindowsパーティションがあります。

  • (hd1,1)ESPで、約260MのFAT32ファイルシステムがあります(4kブロックサイズのディスクでFAT32がサポートする最小サイズ)。
  • (hd1,2)まったくフォーマットされていない「Microsoft Reserve」パーティションで、サイズは約128Mです。これは、Windowsダイナミックディスク(Windows用のLinux LVMに似ています)または他の変換に簡単に変換できるようにするために存在します。
  • (hd1,3)NTFS ファイルシステムを使用するプライマリ Windows システムドライブです。
  • (hd1,4)NTFSファイルシステムがある別のパーティション(おそらくWindowsの回復パーティション)です。

すべてのLinuxパーティションは外部フラッシュドライブにあります。問題は、Debian 10がデフォルトで非常に小さなGRUB設定ファイルのみをESPにインストールすることです。本質的に、これはUUIDでLinuxディレクトリを含むファイルシステムを識別し、/bootGRUBにそこから実際の設定をロードするように指示します。明らかに、これは外部フラッシュドライブの接続が切断されても発生しません。実際の構成ファイルには、Windows用の起動メニュー定義を含むすべての起動メニュー定義が含まれています。これがなければ、GRUBはコマンドプロンプトのみを表示できます。

次のようにLinuxを起動し、実際のGRUB構成ファイルをESPにコピーしてこの問題を解決できます。

mv /boot/efi/EFI/debian/grub.cfg /boot/efi/EFI/debian/grub.cfg.mini
cp /boot/grub/grub.cfg /boot/efi/EFI/debian/grub.cfg

ただし、このupdate-grubコマンド(Debianのカーネルアップデートパッケージで使用されています!)は新しい場所を自動的に更新しません。幸いなことに、コマンドはスクリプトなので簡単に修正できます。

まず切り替えアップデートが変更を上書きしないように、パッケージ管理システムで次のことを行います。

dpkg-divert --local --rename --add /usr/sbin/update-grub

これにより、/usr/sbin/update-grub現在の名前が自動的に変更されます。/usr/sbin/update-grub.distrib 今後の更新も新しい場所にリダイレクトします。

これで、スクリプトを元の場所にコピーして、お気に入りのテキストエディタを使用して変更できます。

cp -a /usr/sbin/update-grub.distrib /usr/sbin/update-grub

最初にスクリプトは次のようになります。

#!/bin/sh
set -e
exec grub-mkconfig -o /boot/grub/grub.cfg "$@"

3行目は次のように変更する必要があります。

#!/bin/sh
set -e
exec grub-mkconfig -o /boot/efi/EFI/debian/grub.cfg "$@"

主要なシステムアップデート(Debian 10「buster」からDebian 11へ)の後には、再編がまだ機能していること、および新しいバージョンがスクリプトに変更をもたらしていないことを確認して/usr/sbin/update-grub.distrib修正する必要があります。/usr/sbin/update-grubupdate-grub

実際には、GRUBフォントファイル(〜/boot/grub/fonts/unicode.pf2/boot/efi/EFI/debian/fonts/unicode.pf2、GRUBメニューの背景画像、または使用しているGRUBテーマに関連する同様のファイルなど、他のファイルをESPにコピーする必要があります。

答え2

USBディスクには、完全なDebianボリューム(/bootディレクトリを含む)が含まれています。これがないと、EFIシステムパーティションに組み込まれているフェーズ1 grubブートローダは、grub設定ファイル、モジュールvfat(したがってファイルシステムがないように見える(hd1,2))、またはカーネルをロードできませんinitramfs

スペースがある場合は、USBディスクのパーティションを内部ストレージに移動し、grub構成を再作成してgrubがユーザーが実行した操作を理解できますが、接続されていない場合は、この時点でインストールを再作成する方が簡単です。

関連情報