何でも「仮想マシン」と呼んでしまう癖が抜けないのですけど、
CPUなどのエミュレータがQEMUでリソース管理を行うハイパーバイザーがKVM、
そしてXenなど他のハイパーバイザーと共通化を図ったlibvirtライブラリがあり、
CUIならvirshコマンド、GUIならvirt-managerで操作します。
自分が仮想マシンと呼んでいるものはlibvirtの「ドメイン」にあたり、
これだけでも覚えておかないとヘルプを読んだときに「ドメインの再起動???」となってしまうのです。
ドメインの定義
ディスプレイ無しでシリアルコンソールを使うシンプルなXMLファイルが書けました。
このXMLで仮想マシン毎に変更が必要なのは<name>
と<disk><source>
だけです。
あとはホスト側に用意した仮想ネットワークに合わせて<interface>
が変わります。
ドメインXMLのフォーマットについてはここを参照。
<domain type='kvm'>
<name>centos-73min</name>
<memory unit='GiB'>1</memory>
<vcpu>1</vcpu>
<os>
<type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
<bootmenu enable='yes' timeout='3000'/>
<bios useserial='yes' rebootTimeout='0'/>
</os>
<features>
<acpi/>
<apic/>
</features>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/libvirt/images/centos-73min.qcow2'/>
<target dev='vda' bus='virtio'/>
</disk>
<controller type='usb' index='0' model='nec-xhci'/>
<interface type='bridge'>
<source bridge='br0'/>
<model type='virtio'/>
</interface>
<console type='pty'>
<target type='serial' port='0'/>
</console>
</devices>
</domain>
好きな容量のディスクイメージを<disk><source>
で指定した場所に用意して、XMLファイルから仮想マシンを作成します。
virsh defineした段階でuuid、macアドレス、pciスロット番号などが適切に補われるため上記のXMLファイルでは指定していません。
さらにvirsh startした段階でホスト側のブリッジと繋がるTAPインタフェースの名前(vnet?)やシリアルコンソールが繋がる擬似端末(/dev/pts/?)の番号が決まります。
[root@localhost ~]# qemu-img create -f qcow2 /var/lib/libvirt/images/centos-73min.qcow2 10G Formatting '/var/lib/libvirt/images/centos-73min.qcow2', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off [root@localhost ~]# virsh define centos-73min.xml ドメイン centos-73min が centos-73min.xml から定義されました [root@localhost ~]# virsh list --all Id 名前 状態 ---------------------------------------------------- - centos-73min シャットオフ
USBインストールメディアの作成
CentOSのISOイメージをddコマンドでUSBメモリに書き込むだけでそのままブート可能なメディアになります。
[root@localhost ~]# dd if=CentOS-7-x86_64-Minimal-1611.iso of=/dev/sdc bs=512k 1360+0 レコード入力 1360+0 レコード出力 713031680 バイト (713 MB) コピーされました、 46.8097 秒、 15.2 MB/秒
[root@localhost ~]# lsusb Bus 001 Device 002: ID 8087:0a2b Intel Corp. Bus 002 Device 009: ID 0411:021a BUFFALO INC. (formerly MelCo., Inc.) Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub [root@localhost ~]# cat usb.xml <hostdev mode='subsystem' type='usb'> <source> <vendor id='0x0411'/> <product id='0x021a'/> </source> </hostdev>
テキストモードでのインストール
仮想マシンを起動してUSBメモリを接続したらシリアルコンソールにアクセスします。 このとき仮想マシンはブートメディアが無くてリブートを繰り返している状態です。
[root@localhost ~]# virsh start centos-73min ドメイン centos-73min が起動されました [root@localhost ~]# virsh attach-device centos-73min usb.xml --live デバイスが正常に接続されました [root@localhost ~]# virsh console centos-73min
ESCキーを押してブートメニューを開き、認識されたUSBメモリを選択します。
ドメインの定義で<bootmenu enable='yes'>
と<bios useserial='yes'>
を有効にしておかないとこの辺の作業はできません。
CentOSをDVDでインストールするときと同じ画面が出るので Tabキーを押して起動オプションに「inst.keymap=jp inst.text console=ttyS0」を書き足します。 一気にコピペすると失敗するため1文字ずつ入力しましょう。
テキストモードのインストールプログラムが表示され、 Installation sourceが検出できていれば成功したも同然です。 最小構成以外の場合は素直にVNC経由でグラフィカルモードを使いましょう。
CentOSのインストールが完了すると1つのCPUと1GBのメモリ、XMLファイルで定義したPCIデバイスが仮想マシンに実装されたことを確認できます。
[root@localhost ~]# cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 13 model name : QEMU Virtual CPU version 1.5.3 stepping : 3 microcode : 0x1 cpu MHz : 4008.000 cache size : 4096 KB physical id : 0 siblings : 1 core id : 0 cpu cores : 1 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 4 wp : yes flags : fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 syscall nx lm rep_good nopl pni cx16 hypervisor lahf_lm abm bogomips : 8016.00 clflush size : 64 cache_alignment : 64 address sizes : 39 bits physical, 48 bits virtual power management: [root@localhost ~]# free total used free shared buff/cache available Mem: 1016532 83880 664024 6640 268628 765616 Swap: 1048572 0 1048572 [root@localhost ~]# lspci 00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02) 00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II] 00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II] 00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03) 00:03.0 Ethernet controller: Red Hat, Inc Virtio network device 00:04.0 USB controller: NEC Corporation uPD720200 USB 3.0 Host Controller (rev 03) 00:05.0 SCSI storage controller: Red Hat, Inc Virtio block device 00:06.0 Unclassified device [00ff]: Red Hat, Inc Virtio memory balloon
ここから先はACPIが有効になるので、virsh destroyでなくvirsh shutdownで仮想マシンを停止させるようにしましょう。 最後にUSBメモリが仮想マシンに挿さったままになっているためホスト側に戻って抜いておきます。
[root@localhost ~]# virsh detach-device centos-73min usb.xml --live デバイスが正常に切断されました
1 件のコメント: