GRUBコマンドラインから起動すると、パーティションが存在しないとマークされます。

GRUBコマンドラインから起動すると、パーティションが存在しないとマークされます。

私はいくつかの関連する質問を見つけましたが、それらのどれも私の問題を解決できませんでした。

Windowsハードドライブを搭載したノートパソコンがあります。私は2番目のハードドライブにDebianをインストールしたかったので、キャディを接続してWindowsハードドライブを取り外しました。その後、Debian を正常にインストールし、その時点で唯一のディスクだったので、同じディスクに GRUB をインストールしました。その後、Windowsハードドライブを再挿入しました。

これで、BIOSから起動するドライブを選択できるようになりました。 Windowsドライブは完全に起動しますが、Debianドライブから起動することを選択するとGRUBメニューが表示され、ダッシュが点滅する黒い画面が表示されます。

Windowsハードドライブを削除すると、Debianを正常に起動できるため、GRUBの設定に問題があるようです。

したがって、私はGRUBコンソールを選択します。 Linuxが(hd0,5)パーティションにあり、vmlinuzとinitrdがルートからアクセスできることを検出して、一般的なタスクを実行しました。

grub> set root=(hd0,5)
grub> linux /vmlinuz root=/dev/sda5
grub> initrd /initrd.img
grub> boot

その後、多くのinitrd出力と複数のメッセージが表示され、最後に次のメッセージBegin: Running /scripts/local-block ... done.で失敗します。sda5 doesn't exists. Dropping to a shellでも、まあ…あるじゃないですか…そんなことが存在してブロックされました。

答え1

ドライブ識別とパーティション識別の2つの問題があります。

Grubは0からパーティション計算を開始し、Linuxは1からパーティション計算を開始します。したがって、Grubがhd0Linux用の場合、sdaGrubは(hd0,5)Linux用ですsda6

Grubで「root」として選択したパーティションは、必ずしもLinuxのルートパーティションである必要はありません。 Grubでは、「root」はショートカットにすぎないため、ファイル名の前にパーティション名を入力する必要はありません。別々のパーティションがある場合、Grubはその内容(カーネルイメージと初期RAMディスクイメージ)/bootにのみ興味があるため、通常これをGrubルートに設定します。 Linuxはアップグレードする以外に/boot内部の内容には興味がありません。/boot

GrubとLinuxの間のドライブ番号が一致しない可能性があります。 GrubはコンピュータのBIOSを使用してドライブを列挙します。 Linuxには独自のドライバがあります。ディスクが異なるインタフェースを介して接続されている場合、どのディスクコントローラがより速く応答するかによって、リストされている順序を予測することは困難です。したがって、Grubがhd0必ずしもLinuxである必要はありませんsda

コンピュータが確実に起動するようにするには、ディスクの接続方法とコントローラの応答時間に関係なく、英数字の代わりにラベルまたはUUIDを使用してください。起動したら実行してください。通常、UUIDを含むファイルを生成する必要がupdate-grubあります。/boot/grub/grub.cfgGrubとLinuxはどちらも起動時に使用可能なパーティションを列挙し、対応するUUIDを覚えています。grub.cfg次の行が表示されます。

search --no-floppy --fs-uuid --set=root 82aecd65-6423-4d95-9319-3034263ee747

そして

linux /vmlinux root=UUID=82aecd65-6423-4d95-9319-3034263ee747 ro

関連情報