仮想ディスクに grub を入れる

仮想ディスクに grub を入れる

Linuxブートプロセスを理解するために、grubをディスクイメージファイルに入れ、qemuでブートしようとしました。まだカーネルイメージをドライブに入れていません。ただグラブです。私は以下を使用してgrubをインストールしました。

kpartx -av mydrive.img
losetup /dev/loop1 /dev/mapper/loop0p1
mount /dev/loop1 mnt/mydrive/
cd mnt/mydrive/boot
grub-install --no-floppy --boot-directory=. -v /dev/loop0

起動順序を段階的に進めたいので、 grub でカーネルが欠落していると主張し、カーネルをインストールして X までエントリを追加して問題を解決したいと思います。

今は理解

エラー:該当するデバイスがありません

しかし予想される

エラー:設定ファイルがありません。

構造メッセージを作成してls提供してください。

(hd0) (fd0)

質問:*grubが探しているデバイスは何ですか?これはホストシステムを意味しますか? [一部解決済み、UUIDが仮想ファイルシステムのUUIDと同じ] * Grubがデバイスを見つけられないのはなぜですか?

VM内のlive-cdからgrub(grubのみインストール)をインストールすると(小さなバイナリディストリビューションであるため、Bodhi-linuxを選択しました)、すべてがうまく機能します。 qemuはブートパーティションに外部で使用されているものとは異なるuuidを提供しますか?

以下は、仮想ドライブのパーティションテーブルです。

Disk mydrive.img: 264 MB, 264241152 byte
32 huvuden, 63 sektorer/spår, 256 cylindrar, totalt 516096 sektorer
Enheter = sektorer av 1 · 512 = 512 byte
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Diskidentifierare: 0xebe6ebdb

       Enhet Start     Början        Slut     Block    Id  System
mydrive.img1            2048      516095      257024   83  Linux

答え1

grubはデフォルトでこのパーティションタイプのモジュールをインストールしないようです(DOS / MBRパーティションラベルであると仮定します)。core.img

次のコマンドを使用して必要なモジュールをインストールすることもできます。

grub-install --modules part_msdos --root-directory=. /dev/loop0

その後、grubはパーティションテーブル、ファイルシステム、およびmnt/mydrive/boot

したがって、grubコマンドはls次のように出力する必要があります。

(hd0) (hd0,msdos1) (hd0)

答え2

Gilesが指摘したように、これはx86アーキテクチャにのみ適用されます。

背景

正しい順序を知りたい場合は、カーネルをインストールする前にQEMUにホストシステムをインストールする必要があります。このアプローチは、起動プロセスを理解する上で直観に反するように見えるかもしれませんが、唯一の有効なアプローチです。説明します。

すべてのオペレーティングシステムの実行システムは、少なくとも3つの部分で構成されています。

  1. カーネル
  2. 荷物を載せる人
  3. 最終起動オペレーティングシステム。

コンピュータは2つのモードで動作します。

  1. リアルモード
  2. 保護モード、時には仮想モードと間違って呼ばれることがあります。

すべてのx86プロセッサは、実行速度がいくら複雑であっても高速であっても、これら2つのモードのいずれかの形式で動作します。詳細については、私がリンクしたWikipediaの記事の右側にあるリストをご覧ください。


どのように動作しますか?

  1. すべてのコンピュータはリアルモードで起動します。
  2. リアルモードでは、BIOS設定の確認、すべてのデバイス接続の確認、クロックタイミング制御などの操作を実行できます。
  3. リアルモードがチェックを完了すると、コントロールはブートローダとも呼ばれるローダに転送されます。ブートローダは、PC制御をリアルモードから保護モードに切り替えるのに十分なコードセグメントをロードし、名前が示すように正確に実行します。一部のブートローダは「引き継ぎ」の開始時にこの転送を実装し、一部は最後に実装しますが、ほとんどは段階的に実行します。 ガイドを見る
  4. ブートローダがロードフェーズを完了すると、オペレーティングシステムは次の再起動までPCが「永続保護モード」になり、他のすべてのタスクを安全かつ効率的に処理できるようになりました。

これはGrubとどのような関係がありますか?

Grubが正しくインストールされたときにコピーされたファイルを見ると、Stage.というテキストを含むファイルを見ることができます。 3つあるはずです。 Stage1*、Stage1_5*、Stage2*

  1. Stage1ロードはboot.imgMBR / EFIに組み込まれています。ディスクに接続し、最後にロードするように構成されています。core.img
  2. core.imgStage1_5は、BootSectorと呼ばれるセクタ0-62をロードするためによく使用されます。通常、これらのセクターには何も含まれていないため、そのセクター内の項目は上書きまたは自動的に更新されません。
  3. Stage_2が起動すると、最初の62セクタとカーネルパスが決まります。 Stage_2はカーネルとヘルプファイルを最も自然にロードします。初期RAMディスク記憶を入力してください。その後、RAMディスクとカーネルを解凍し、システムをセットアップし、選択したLinuxオペレーティングシステムに制御を転送するために使用されます。

バラよりGNUグラップ


今私がこれを言う理由は直観に反しています。「これはどのように機能しますか?」のステップ3から始めて、「これはGrubとどのような関係がありますか?」では作業できません。。 Stage1.5が完了すると、Stage_2はカーネルや初期RAMディスク(存在する場合)などの回復プロンプトを送信します。この場合、解凍後にデバイスを設定する必要はありませんhd0。 Grubが報告したバグも正確です。

エラー:該当するデバイスがありません

hd0そうです。設定するオペレーティングシステムがないので、Grub Stage_2に「いいえ、私がロードする必要があるオペレーティングシステムです」と言うオペレーティングシステムがないからです。まず、オペレーティングシステムをインストールしてからカーネルをインストールし、最後にブートローダをインストールします。あなたの場合は、LiveCDのISOイメージをCDROMにマウントするようにQEMUを設定し、仮想ディスクにオペレーティングシステムをインストールしてhd0ブートローダを設定する必要があります。 LiveCDのリストについては、以下を参照してください。DistroWatchのメジャーリリース。膨らみが少ない方が便利な場合は、ソースベースのディストリビューションをお試しください。Gentooのように

関連情報