QEMUのnographicモードでモニタに移行する

モニタ画面への移行

  • Ctrl-a c

すると以下のようなモニタ画面が表示される

QEMU 7.2.0 monitor - type 'help' for more information
(qemu) 

シリアルコンソールへの復帰

モニタへの移行と同じキー操作

実行中に強制終了

  • Ctrl-a x

関連記事

initrdの作り方の例

roofsイメージのあるディレクトリで、次のコマンドを実行
find . | cpio -o -H newc | gzip -c > ../initrd.gz
なお、initramfsでは、/initが最初に実行される

LXDでホストのディレクトリをコンテナにマウントする例

lxc config device add [CONTAINER_NAME] share disk source=[HOST_DIR] path=[CONTAINER_DIR]

QEMUの基本的な使用方法

QEMUは、ハイパーバイザー型の完全仮想化ソフトウェアです。Linuxでは、Virt-Manager経由で利用されることもしばしばあります。 しかし、QEMUの持つ機能を直接使用したり、よりシンプルに利用する場合、QEMUを直接起動するほうが便利です。 この記事では、基本的な起動方法を紹介します。

なお、x86_64アーキテクチャでは、LinuxのKVMという仮想化支援機能を用いて高い実行性能を実現しています。 そのめ、QEMU/KVM、あるいは、単にKVMと呼ばれることもあります。

基本形

QEMUのコマンドラインは、仮想マシンの構成を含むためやや長くなりがち。そのため、以下ではシェルスクリプトとして起動コマンドを記載する例を示す。下記の内容を適当なファイル名(例: launch-qemu.sh)で保存し、実行すればよい。
#!/bin/sh

QEMU=qemu-system-x86_64
DISK_IMAGE=disk1.raw
MEMORY=1024

${QEMU} \
-enable-kvm \
-cpu host \
-m ${MEMORY} \
-drive format=raw,file=${DISK_IMAGE},if=virtio \
-nic user,model=virtio-net-pci
上記の実行により、次のようなWindowが起動する。

ドライブを追加する(SCSI接続のドライブ追加やUSBドライブの接続を含む)

以下の記事を参照

NICをブリッジモードに変更したり、ユーザモードで外部からアクセスする

上記の-nic userは、QEMU内でのNATを行うNICを追加する。 10.0.2.0/24のプライベートアドレスが仮想マシンに割り当てられる。 仮想マシン内から外部へのアクセスは行えるが、以下の制約がある。
  • pingで外部のノードと通信できない
  • 外部ノードから仮想マシンにアクセスできない(例えば、sshやnginxを仮想マシンで起動しても外部からアクセスできない)
これらが問題となるなる場合、ブリッジモードにするか、ユーザモードでポートフォワーディングの設定をする。 設定方法については、以下の記事を参照。

シリアルコンソールで起動する

X11を使っていない場合や、GUIのWindowが不要な場合、-nographicオプションを追加すると、 コマンドを起動した端末をシリアルコンソールにすることができる。
-nographic
nographicモードでシリアルコンソールとなった端末から復帰する方法については以下を参照

カーネルを直接起動する

冒頭のコマンド例では、物理マシンと同じように仮想ドライブ内に格納されているブートローダーが、同じく仮想ドライブ内のLinuxカーネルを起動する。QEMUは、ホストOS上の(仮想ドライブ内にない)Linuxカーネルを直接起動できる。以下に追加するコマンド例を示す。 -appendはカーネルの起動オプションである。
-kernel vmlinuz \
-append root=PARTUUID=a99825a2-e759-4e41-9c4c-b4804d050caa console=ttyS0 \
-initrd initrd.gz

参考

LXDでプロファイルを作成する

作成(ここでPROF_NAMEは任意の名前)
lxc profile create PROF_NAME
一覧表示
lxc profile list
ひとつのプロファイルを表示
lxc profile show PROF_NAME
プロフィールにNICを追加する例
lxc profile device add PROF_NAME eth0 nic nictype=bridged parent=BRIDGE_NAME
プロファイルをコンテナに追加
lxc profile add CONTAINER_NAME PROF_NAME
コンテナのデバイスに調べ方についてはこちらを参照 lxdのコンテナにNICを増設する例