この質問の残りの部分では、「内部」があるのは私のラップトップの内部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状態の場合いいえ接続済み: 私が使用したときの起動オプション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ディレクトリを含むファイルシステムを識別し、/boot
GRUBにそこから実際の設定をロードするように指示します。明らかに、これは外部フラッシュドライブの接続が切断されても発生しません。実際の構成ファイルには、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-grub
update-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がユーザーが実行した操作を理解できますが、接続されていない場合は、この時点でインストールを再作成する方が簡単です。