Grub 2をインストールしたい1Gb HDDイメージ(Bochsのbximageを使用して作成)があります。
私が知る限り、Grubのインストールは3つの部分で構成されています。
- boot.img イメージ、最初のセクターを占める
- core.img イメージは、最初のセクターの後から次のトラックが始まるまでのスペースを占めます。
- grub.cfgと他のモジュールがある/boot/grub/ディレクトリ。
まず、/boot/grub/ディレクトリにある私のLinux boot.imgイメージを使用します。
次に、次のコマンドを使用してcore.imgイメージを作成しました。
sudo grub-mkimage -v --format=i386-pc -o core.img -p\(hd0,msdos1\)/boot/grub ls ext2 part_msdos
最終ディスクイメージにインストールするには、次のコマンドを使用します。
sudo dd if=boot.img of=/dev/loop0 bs=446 count=1
上書きを防ぐには、446ブロックサイズを使用してください。MBRのパーティションデータsudo dd if=core.img of=/dev/loop0 bs=512 seek=1
ここでのseek=1
目的は、作成したばかりのMBRを上書きすることではありません。
ディスクは、2048セクタで始まり最後のセクタで終わるext2パーティションとしてフォーマットされており、grub.cfg(何もロードしない偽のメニュー項目を含む)を含むboot / grub /ディレクトリと/のモジュールが含まれています。 boot/grub/i386-pc/ ディレクトリ。
Bochs は、この grub インストールを grub> プロンプトで正常に起動しました。 〜のようにこのUbuntuガイドこの動作は grub.cfg が見つからないことを示します。
通話後にls
興味深い問題に直面しました。接続されたデバイスがまったくないようです!
問題の性質をより詳細に説明するために、スレーブドライブからイメージを起動すると、回復grub-mkrescue
ドライブへls
の呼び出しが自分のイメージを表示することが観察されました。そして以前に「存在しなかった」プライマリディスクドライブとext2パーティション。 /boot/grub.cfgが実際にアクセス可能であることを確認しました。
この観察に基づいて、私はcore.imgにいくつかの基本的なモジュールや機能が欠けていると仮定します。しかし、どのように修正しますか?
また、USBスティックを使用して実際のコンピュータでこの練習を実行しましたが、同じことが起こり、問題がBochsにないことを確認できます。
答え1
実際には、次のモジュール、特にディスクドライバが欠落していることがわかりましたbiosdisk
。
OSDev Wikiから:
biosdisk - This module is required for GRUB 2 to be able to boot from a LiveCD.
答え2
原作者は自分のケースが失敗した理由を見つけてコミュニティの他の人と共有しましたが、私は同じ動作を引き起こす別の問題を見つけました。
ls
グラブ構造シェル内でそれを呼び出すと、どのデバイスも作成されません。
何らかの理由で*.mod
ファイルから重要なシンボル情報が削除されると、grub-install
自動的にビルドされますが、core.img
パッケージ化されcore.img
たモジュールは使用できません。
この「無害な」除去オプションでさえ、--strip-unneeded
2つの重要なシンボルgrub_mod_init
とgrub_mod_fini
。これらのシンボルがないと、grubモジュールはロードされますが初期化されていないため使用できません。
grubモジュールを本当に削除するには、コマンドライン-K grub_mod_init -K grub_mod_fini
に追加する必要があります。strip's