ディスクイメージの代わりにルートファイルシステムディレクトリでQEMUを実行する

ディスクイメージの代わりにルートファイルシステムディレクトリでQEMUを実行する

ルート ファイル システムをテストするには、作成したディスク イメージをルート ファイル システムとして QEMU を実行する必要があります。QEMU は、ルート ファイル システム内にカーネルを展開せずにカーネルを直接指定するために使用できる -kernel を受け入れますが、ディスク イメージを作成し、-hda または -usbdisk オプションで使用する代わりに、抽出されたルート ファイル システムのパスを指定するために、ルート ファイル システムにも同様の機能が必要です。

QEMU だけで可能なのでしょうか?! またはサードパーティのツール (仮想ディスク イメージ エミュレータなど) でも可能ですか?

私の目標は、ディスクイメージを作成せずにルートファイルシステムのtarアーカイブをテストすることです。

答え1

rootfs が大きすぎない場合は、initd を使用できます。qemu-initrdのオプションを使用して、rootfs とともに (圧縮された) cpio ファイルを提供します。したがって、tar ファイルがある場合は、それを解凍して代わりに cpio を作成する必要があります。cpio-H newcには format を使用する必要があります。例:

mkdir /tmp/rootfs
cd /tmp/rootfs
tar xf /path/to/rootfs.tar
find | cpio --quiet -o -H newc | bzip2 -c > /tmp/rootfs.cpio

良い点は、これには root や sudo が必要ないことです。

答え2

ファイルシステムを USB ドライブに書き込み、それを QEMU 仮想マシンに接続することができます。

それをGRUBのカーネルオプションでルートファイルシステムとしてマウントします。

  1. 仮想マシンのブートメニューを有効にする
  2. カーネルを含むファイルシステムが存在する外部ドライブを接続します。
  3. ファイルシステムにカーネルと GRUB がある場合は問題ありません。そうでない場合は、仮想マシンに Linux ライブ CD も接続します。GRUB コマンド ラインを編集し、カーネルとルート ファイルシステムを使用します。

あなたのペンドライブが/dev/sdB(ハードディスクイメージも添付していて、/dev/sdAとにかくそれを見つけることができることを考慮すると)あなたのgrubコマンドは次のようになります。

kernel (hd1,gpt0)/location_of-kernel root=/dev/sdB
initramfs mention_if_you_have
boot

gpt0適切なパーティションと/dev/sdB適切な文字で置き換えます/dev/sdb1/dev/sdbUSBにパーティションがない場合)

関連情報