23.2. オペレーティングシステムの起動

仮想マシンを起動する方法には多くの異なる方法があります。これには、BIOS ブートローダー、ホスト物理マシンブートローダー、直接のカーネルの起動、およびコンテナーによる起動が含まれます。

23.2.1. BIOS ブートローダー

BIOS を起動する方法は、完全仮想化に対応するハイパーバイザーで利用できます。この場合、BIOS には起動順序の優先順位 (フロッピー、ハードディスク、CD-ROM、ネットワーク) があり、ブートイメージの検索方法が決定されます。ドメイン XML の <os> セクションには、以下のような情報が含まれます。

  ...
  <os>
    <type>hvm</type>
    <boot dev='fd'/>
    <boot dev='hd'/>
    <boot dev='cdrom'/>
    <boot dev='network'/>
    <bootmenu enable='yes'/>
    <smbios mode='sysinfo'/>
    <bios useserial='yes' rebootTimeout='0'/>
  </os>
  ...

図23.2 BIOS ブートローダーのドメイン XML

ドメイン XML のこのセクションを構成するコンポーネントは以下の通りです。

表23.2 BIOS ブートローダーの各種要素

要素説明
<type>ゲスト仮想マシンで起動されるオペレーティングシステムのタイプを指定します。hvm は、OS がベアメタルで実行されるように設計されたものであり、完全仮想化が必要であることを示します。linux は KVM ハイパーバイザーのゲスト ABI に対応する OS を参照します。さらに、2 つのオプション属性があり、arch は仮想化に対する CPU アーキテクチャーを指定し、machine はマシンタイプを指します。詳細は、libvirt アップストリームドキュメント を参照してください。
<boot>fdhdcdrom、または network のいずれかの値を指定して、次に考慮するブートデバイスを指定します。boot 要素は、順番に試行するブートデバイスの優先順序の一覧をセットアップするために複数回繰り返すことができます。同じタイプの複数デバイスは、バスの順序を保持した状態で、それらのターゲットに基づいてソートされます。ドメインが定義された後に、libvirt によって返される XML 設定は、ソートされた順序でデバイスを一覧表示します。ソート後は、最初のデバイスに bootable (起動可能) というマークが付けられます。詳細は、libvirt アップストリームドキュメント を参照してください。
<bootmenu>ゲスト仮想マシンの起動時に、対話ブートメニュープロンプトを有効にするかどうかを決定します。enable 属性は、yes または no のいずれかになります。指定のない場合はハイパーバイザーのデフォルトが使用されます。
<smbios>SMBIOS 情報をゲスト仮想マシンで表示する方法を決定します。mode 属性は、emulate (ハイパーバイザーがすべての値を生成) か、または host (ホスト物理マシンの SMBIOS 値から、UUID を除くブロック 0 およびブロック 1 のすべての値をコピー。virConnectGetSysinfo 呼び出しはコピーされた内容を表示するために使用できる)、または sysinfo (sysinfo 要素の値を使用) のいずれかに指定される必要があります。いずれも指定されない場合、ハイパーバイザーのデフォルト設定が使用されます。
<bios>この要素には、yes または no の値が使用される可能性のある属性 useserialが含まれます。この属性は、ユーザーがシリアルポートに BIOS メッセージを表示することを可能にする Serial Graphics Adapter を有効/無効にします。そのため、シリアルポートを定義しておく必要があります。rebootTimeout 属性は、ブートに失敗した場合にゲスト仮想マシンが起動を再び開始するかどうかや、どの程度の時間が経過した後に再起動を開始するかなどを (BIOS に基づいて) 制御します。値は、最大値が 65535 のミリ秒単位で設定され、値を -1 に設定すると再起動が無効になります。

23.2.2. カーネルからの直接起動

新規ゲスト仮想マシンの OS をインストールする際に、ホスト物理マシン OS に格納されるカーネルと initrd から直接起動することが役立つ場合が多くあります。これにより、コマンドライン引数がインストーラーに直接渡されます。この機能は通常、準仮想化および完全仮想化ゲスト仮想マシンで利用できます。

  ...
  <os>
    <type>hvm</type>
    <kernel>/root/f8-i386-vmlinuz</kernel>
    <initrd>/root/f8-i386-initrd</initrd>
    <cmdline>console=ttyS0 ks=http://example.com/f8-i386/os/</cmdline>
    <dtb>/root/ppc.dtb</dtb>
  </os>
  ...
  

図23.3 カーネルからの直接起動

ドメイン XML のこのセクションを構成するコンポーネントは以下の通りです。

表23.3 カーネルから直接起動するための要素

要素説明
<type>BIOS ブートのセクションの説明と同様です。
<kernel>ホスト物理マシン OS のカーネルイメージへの完全修飾パスを指定します。
<initrd>ホスト物理マシン OS の (オプションの) ramdisk イメージへの完全修飾パスを指定します。
<cmdline>起動時にカーネル (またはインストーラー) に渡される引数を指定します。これは、多くの場合、代替プライマリーコンソール (例: シリアルポート)、またはインストールメディアソース/キックスタートファイルを指定するために使用されます。

23.2.3. コンテナーによる起動

カーネルまたはブートイメージの代わりに、コンテナーベースの仮想化を使用してドメインを起動するとき、init 要素を使用した init バイナリーへのパスが必要になります。デフォルトでは、これは引数なしで実行されます。最初の argv を指定するには initarg 要素を使用します。これは、必要に応じて何回でも繰り返し使用できます。cmdline 要素は /proc/cmdline と同等ですが、<initarg> に影響を与えません。
...
<os>
  <type arch='x86_64'>exe</type>
  <init>/bin/systemd</init>
  <initarg>--unit</initarg>
  <initarg>emergency.service</initarg>
</os>
...

図23.4 コンテナーによる起動