このエントリーをはてなブックマークに追加

KVM

概要

KVM(Kernel-based Virtual Machine)はLinuxカーネルに組み込まれている仮想化機能(ハイパーバイザ)です。
利用するためにはCPUの仮想化支援機構(Intel VTもしくはAMD-V)をサポートしているマシンを用意する必要があります。
またKVMの上でKVMを利用するネストをする場合(確認 modinfo kvm-intel | grep nes)はカーネル3.1以降の必要があります。
Ubuntu12.04であればデフォルトで利用できるためクラウド検証用環境などの構築などもKVMの上でできます。

インストール

パッケージをインストールするだけなので特に困ることはありません。
NAT接続のみを利用するのであればbridge-utilsのインストールも必要ありません。
virshによる電源断を行うのであればゲストのインストール後にacpidをインストールしておきましょう。UbuntuもCentOSでもどちらも必要です。
$ sudo apt-get install virtinst qemu-kvm kvm-ipxe virt-manager bridge-utils -y

設定

設定とはいってもブリッジ接続する場合のブリッジを作成するくらいです。
ここでは単一NICがeth0である前提で設定しています。
IPアドレスなどは適宜設定をあわせてください。
$ sudo vi /etc/network/interfaces
auto eth0
iface eth0 inet static
       address 192.168.10.50
       netmask 255.255.255.0
       network 192.168.10.0
       broadcast 192.168.10.255
       gateway 192.168.10.1
       dns-nameservers 192.168.10.1

上記を以下のように変更

auto eth0
iface eth0 inet static

auto br0
iface br0 inet static
       address 192.168.10.50
       netmask 255.255.255.0
       network 192.168.10.0
       broadcast 192.168.10.255
       gateway 192.168.10.1
       dns-nameservers 192.168.10.1
       bridge_ports eth0
       bridge_stp off
       bridge_fd 0
       bridge_maxwait 0

設定の反映

$ service networking restart

ディスクイメージの作成

仮想マシンをインストールするためのディスクイメージを作成します。
KVMで利用出来るディスクイメージのフォーマットは以下のフォーマット形式があります。
最初からホストのディスク領域を作成した容量分確保するのはddで作成したものだけです。
その他のイメージは最初はディスク領域は確保せず仮想マシンが利用する分だけ増加していきます。
ディレクトリは /opt/virt/kvm を利用します。
スナップショットや差分イメージを利用する場合はqcow2、利用しない場合はrawを利用すればよいと思います。
但しフォーマットは後からでも変更可能です。
速度はddで作成したraw(non-sparse)形式が一番早いはずですがキャッシュのせいなのかベンチマークではraw(sparse)が一番早かったです。
$ sudo mkdir -p /opt/virt/kvm

raw(sparse)形式

スナップショットは利用できません。
仮想マシンが利用するディスク領域を先に確保します。
$ sudo qemu-img create -f raw /opt/virt/kvm/Ubuntu12.04_BASE.img 20G

raw(non-sparse)形式

こちらもスナップショットは利用できません。
ddコマンドで作成します。
$ sudo dd if=/dev/zero of=/opt/virt/kvm/Ubuntu12.04_BASE.img bs=1M count=20480

qcow2形式

スナップショットを利用できます。特にパフォーマンスの問題とかが無ければディスクイメージはqcow2のほうが便利です。
$ sudo qemu-img create -f qcow2 /opt/virt/kvm/Ubuntu12.04_BASE.img 20G

qed方式

qcow2と同じくスナップショットを利用できます。qcow2よりパフォーマンスが上らしいのですがベンチマークではほぼ同じ結果でしgた。
$ sudo qemu-img create -f qcow2 /opt/virt/kvm/Ubuntu12.04_BASE.img 20G

作成したディスクイメージの確認

$ sudo qemu-img info IMAGE01

仮想マシンのインストール

virt-installコマンドを利用して仮想マシンを作成します。
ISOイメージからではなくインターネット経由でインストールします。
オプションは非常に多いですがCUIで利用する想定で作成します。
またKVM上でKVMを利用する場合はオプションで --cpu core2duo を付与する必要があります。
またフォーマットは作成したイメージにもよります。
ddで作成したイメージを利用する場合はrawを指定します。
メモリ2GB、CPUはコア1つを設定しています。
ネストでKVMを利用する場合ははCPUの指定は出来ないみたいなのでオプション(–cpu core2duo)は外してください。
writebackはホストへのキャッシュのみ書き出すことで高速化を図っていますがRHELで利用する場合は保証外です。
サポートを受ける場合は、writethroughもしくはオプション無しで利用しましょう。
オプション 概要
-h 引数の一覧とその説明の表示
-n 仮想マシンの名前を指定
-r 仮想マシンのメモリ容量を指定
-f 仮想マシンのディスクの場所を指定
-s 仮想マシンのディスク容量を指定。単位はG
–vcpus= 仮想マシンの仮想CPU数を指定
–os-type ゲストOSのタイプを指定
–network= 仮想マシンのネットワークタイプを指定。 ゲストOSにブリッジ接続させる場合は、[–network bridge=br0]とする。複数行指定可能。
–nographics グラフィクスを使わない
–location= インストール元を指定
–extra-args= インストール時にカーネルに渡すパラメータを指定
–vnc ゲストのVGA 出力を VNC で表示する
–prompt 質問に答えて新ストールできる

コマンド実行後は物理マシンへのUbuntuをインストールする手順と同じです。

$ sudo virt-install                              \
--connect=qemu:///system                       \
--nographics                                   \
--accelerate                                   \
--name=Ubuntu13.04_BASE                        \
--ram=2048                                     \
--vcpus=1                                      \
--network bridge:br0,model=virtio              \
--sound                                        \
--os-type=linux                                \
--keymap=ja                                    \
--os-variant=virtio26                          \
--extra-args='console=tty0 console=ttyS0,115200n8' \
--location=http://ftp.riken.jp/Linux/ubuntu/dists/raring/main/installer-amd64/ \
--disk path=/opt/virt/kvm/Ubuntu13.04_BASE.img,format=qcow2,cache=writeback \
--cpu core2duo

UbuntuをKVMでインストールする場合は日本語の言語の選択肢が無いためインストール後に設定しておきます。

$ sudo apt-get install language-pack-ja
$ sudo locale-gen ja_JP.UTF-8
$ sudo update-locale LANG=ja_JP.UTF-8

タイムゾーンを東京にしていない場合も設定しなおしはできます。

$ sudo dpkg-reconfigure tzdata

コマンド実行後は物理マシンへのUbuntuをインストールする手順と同じです。

$ sudo virt-install                              \
--connect=qemu:///system                       \
--nographics                                   \
--accelerate                                   \
--name=Ubuntu12.10_BASE                        \
--ram=2048                                     \
--vcpus=1                                      \
--network bridge:br0,model=virtio              \
--sound                                        \
--os-type=linux                                \
--keymap=ja                                    \
--os-variant=virtio26                          \
--extra-args='console=tty0 console=ttyS0,115200n8' \
--location=http://ftp.riken.jp/Linux/ubuntu/dists/quantal/main/installer-amd64/ \
--disk path=/opt/virt/kvm/Ubuntu12.10_BASE.img,format=qcow2,cache=writeback \
--cpu core2duo

UbuntuをKVMでインストールする場合は日本語の言語の選択肢が無いためインストール後に設定しておきます。

$ sudo apt-get install language-pack-ja
$ sudo locale-gen ja_JP.UTF-8
$ sudo update-locale LANG=ja_JP.UTF-8

タイムゾーンを東京にしていない場合も設定しなおしはできます。

$ sudo dpkg-reconfigure tzdata

コマンド実行後は物理マシンへのUbuntuをインストールする手順と同じです。

$ sudo virt-install                              \
--connect=qemu:///system                       \
--nographics                                   \
--accelerate                                   \
--name=Ubuntu12.04_BASE                        \
--ram=2048                                     \
--vcpus=1                                      \
--network bridge:br0,model=virtio              \
--sound                                        \
--os-type=linux                                \
--keymap=ja                                    \
--os-variant=virtio26                          \
--extra-args='console=tty0 console=ttyS0,115200n8' \
--location=http://ftp.riken.jp/Linux/ubuntu/dists/precise/main/installer-amd64/ \
--disk path=/opt/virt/kvm/Ubuntu12.04_BASE.img,format=qcow2,cache=writeback \
--cpu core2duo

UbuntuをKVMでインストールする場合は日本語の言語の選択肢が無いためインストール後に設定しておきます。

$ sudo apt-get install language-pack-ja
$ sudo locale-gen ja_JP.UTF-8
$ sudo update-locale LANG=ja_JP.UTF-8

タイムゾーンを東京にしていない場合も設定しなおしはできます。

$ sudo dpkg-reconfigure tzdata

コマンド実行後は物理マシンへのUbuntuをインストールする手順と同じです。

$ sudo virt-install                              \
--connect=qemu:///system                       \
--nographics                                   \
--accelerate                                   \
--name=Ubuntu11.10_BASE                        \
--ram=2048                                     \
--vcpus=1                                      \
--network bridge:br0,model=virtio              \
--sound                                        \
--os-type=linux                                \
--keymap=ja                                    \
--os-variant=virtio26                          \
--extra-args='console=tty0 console=ttyS0,115200n8' \
--location=http://ftp.riken.jp/Linux/ubuntu/dists/oneiric/main/installer-amd64/ \
--disk path=/opt/virt/kvm/Ubuntu11.10_BASE.img,format=qcow2,cache=writeback \
--cpu core2duo

UbuntuをKVMでインストールする場合は日本語の言語の選択肢が無いためインストール後に設定しておきます。

preseedを利用して全自動でインストールします。
全自動ではなく最初の国の選択と、パーティションのOKだけEnterを押下する必要があります。
全自動にしたいんですけど。
$ sudo virt-install                               \
   --connect=qemu:///system                       \
   --nographics                                   \
   --accelerate                                   \
   --name=Ubuntu12.04_BASE                        \
   --ram=2048                                     \
   --vcpus=1                                      \
   --network bridge:br0,model=virtio              \
   --sound                                        \
   --os-type=linux                                \
   --keymap=ja                                    \
   --os-variant=virtio26                          \
   --extra-args='priority=critical auto=true console=tty0 console=ttyS0,115200n8 url=http://oss.fulltrust.co.jp/preseed/preseed.cfg' \
   --location=http://ftp.riken.jp/Linux/ubuntu/dists/precise/main/installer-amd64/ \
   --disk path=/opt/virt/kvm/Ubuntu12.04_BASE.img,format=qcow2,cache=writeback \
   --cpu core2duo

コマンド実行後は物理マシンへのCentOS6.3をインストールする手順と同じです。

$ sudo virt-install                              \
--connect=qemu:///system                       \
--nographics                                   \
--accelerate                                   \
--name=CentOS6.3_BASE                          \
--ram=2048                                     \
--vcpus=1                                      \
--network bridge:br0,model=virtio              \
--sound                                        \
--os-type=linux                                \
--keymap=ja                                    \
--os-variant=virtio26                          \
--extra-args='console=tty0 console=ttyS0,115200n8' \
--location=http://ftp.riken.jp/Linux/centos/6.3/os/x86_64/ \
--disk path=/opt/virt/kvm/CentOS6.3_BASE.img,format=qcow2,cache=writeback \
--cpu core2duo
予めISOをダウンロードしている場合の方法が若干違いますので記述しておきます。
locationのパスが無いとextra-argsオプションを利用できません。
コンソールを利用しない場合、後からコンソールを設定する場合はややこしくないです。
ただ後からコンソールを設定するのは少し面倒なのでこちらのやり方のほうが楽です。
コマンド実行後は物理マシンへのCentOS6.3をインストールする手順と同じです。
locationで指定するパスにISOをマウントして置いてインストールを開始します。
/data/iso にISOがあるものとして記述しています。
$ mkdir /mnt/centos63
$ mount -t iso9660 /data/iso/CentOS-6.3-x86_64-bin-DVD1.iso /mnt/centos63/
$ sudo virt-install                              \
--connect=qemu:///system                       \
--nographics                                   \
--accelerate                                   \
--name=CentOS6.3_BASE                          \
--ram=2048                                     \
--vcpus=1                                      \
--network bridge:br0,model=virtio              \
--sound                                        \
--os-type=linux                                \
--keymap=ja                                    \
--os-variant=virtio26                          \
--extra-args='console=tty0 console=ttyS0,115200n8' \
--location=/mnt/centos63 \
--disk path=/mnt/CentOS-6.3-x86_64-bin-DVD1.iso,device=cdrom \
--disk path=/opt/virt/kvm/CentOS6.3_BASE.img,format=qcow2,cache=writeback \
--cpu core2duo

あと、インストール後はコンフィグに余計なものが入っていますので気になる場合はvirsh edit ドメイン名で削除してしまいましょう。

$ sudo virsh edit IMAGE01

 <disk type='file' device='cdrom'>
   <driver name='qemu' type='raw'/>
   <source file='/mnt/CentOS-6.2-x86_64-bin-DVD1.iso'/>
   <target dev='hdc' bus='ide'/>
   <readonly/>
   <address type='drive' controller='0' bus='1' unit='0'/>
 </disk>
 :wq
ks.cfgを予め作成しておきオプションで指定することで自動的にインストールできます。
ベアメタルの場合だとks.cfgを指定する際はブート時に ks=http://oss.fulltrust.co.jp/preseed/ks.cfg を指定します。

ks.cfgの中身

# cat ks.cfg
install
url --url=http://ftp.riken.jp/Linux/centos/6.3/os/x86_64/
lang ja_JP.UTF-8
keyboard jp106

#Modify HostName
network --onboot yes --device eth0 --bootproto dhcp --noipv6  --hostname centos63
#network --device eth0 --bootproto static --ip 192.168.10.50 --netmask 255.255.255.0 --gateway 192.168.10.1 --nameserver 192.168.10.1,192.168.10.2 --noipv6 --hostname centos63
#network --device eth1 --bootproto static --ip 192.168.20.50 --netmask 255.255.255.0 --gateway 192.168.20.1 --nameserver 192.168.20.1,192.168.20.2 --noiprv6

#Modify Password
rootpw password
firewall --service=ssh,http --port=80:tcp
authconfig --enableshadow --passalgo=sha512
selinux --disabled
timezone --utc Asia/Tokyo
bootloader --location=mbr --driveorder=vda --append="crashkernel=auto console=ttyS0,115200n8"

clearpart --linux --drives=vda --all

#Partition For Default
part /boot --fstype=ext4 --size=500
part pv.253002 --grow --size=1
volgroup VolGroup --pesize=4096 pv.253002
logvol /home --fstype=ext4 --name=lv_home --vgname=VolGroup --grow --size=100
logvol / --fstype=ext4 --name=lv_root --vgname=VolGroup --grow --size=1024 --maxsize=51200
logvol swap --name=lv_swap --vgname=VolGroup --grow --size=4032 --maxsize=4032

#Partition For Nova Volume
#part /boot --fstype=ext4 --size=500
#part pv.253002 --size=70000
#part pv.253003 --grow --size=200
#volgroup nova_volumes --pesize=4096 pv.253003
#volgroup vg_stack01 --pesize=4096 pv.253002
#logvol / --fstype=ext4 --name=lv_root --vgname=vg_stack01 --size=65900
#logvol swap --name=lv_swap --vgname=vg_stack01 --size=4096

repo --name="CentOS"  --baseurl=http://ftp.riken.jp/Linux/centos/6.3/os/x86_64/ --cost=100
#repo --name="EPEL" --baseurl=http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/6/x86_64/ --cost=100

%packages --nobase
@base
@core
@japanese-support
git
ntp
#epel-release
%end

%post
chkconfig ntp on
yum update -y
yum upgrade -y
#sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/epel*
%end

shutdown

インストールの実行

$ sudo virt-install                              \
--connect=qemu:///system                       \
--nographics                                   \
--accelerate                                   \
--name=CentOS6.3_BASE                          \
--ram=2048                                     \
--vcpus=1                                      \
--network bridge:br0,model=virtio              \
--sound                                        \
--os-type=linux                                \
--keymap=ja                                    \
--os-variant=virtio26                          \
--extra-args='console=tty0 console=ttyS0,115200n8 ks=http://oss.fulltrust.co.jp/preseed/ks.cfg' \
--location=http://ftp.riken.jp/Linux/centos/6.3/os/x86_64/ \
--disk path=/opt/virt/kvm/CentOS6.3_BASE.img,format=qcow2,cache=writeback \
--cpu core2duo

RHEL6.3をローカルインストールする場合

予めISOをダウンロードしている場合の方法が若干違いますので記述しておきます。
locationのパスが無いとextra-argsオプションを利用できません。
コンソールを利用しない場合、後からコンソールを設定する場合はややこしくないです。
ただ後からコンソールを設定するのは少し面倒なのでこちらのやり方のほうが楽です。
コマンド実行後は物理マシンへのCentOS6.3をインストールする手順と同じです。
locationで指定するパスにISOをマウントして置いてインストールを開始します。
/data/iso にISOがあるものとして記述しています。
$ mount -t iso9660 /data /mnt
$ sudo virt-install                              \
--connect=qemu:///system                       \
--nographics                                   \
--accelerate                                   \
--name=RHEL6.3_BASE                            \
--ram=2048                                     \
--vcpus=1                                      \
--network bridge:br0,model=virtio              \
--sound                                        \
--os-type=linux                                \
--keymap=ja                                    \
--os-variant=virtio26                          \
--extra-args='console=tty0 console=ttyS0,115200n8' \
--location=/mnt/rhel-server-6.3-x86_64-dvd.iso \
--disk path=/mnt/rhel-server-6.3-x86_64-dvd.iso,device=cdrom \
--disk path=/opt/virt/kvm/RHLE63_BASE.img,format=qcow2,cache=writeback \
--cpu core2duo

あと、コンフィグに余計なものが入っていますので気になる場合はvirsh edit ドメイン名で削除してしまいましょう。

$ sudo virsh edit IMAGE01

 <disk type='file' device='cdrom'>
   <driver name='qemu' type='raw'/>
   <source file='/mnt/rhel-server-6.3-x86_64-dvd.iso'/>
   <target dev='hdc' bus='ide'/>
   <readonly/>
   <address type='drive' controller='0' bus='1' unit='0'/>
 </disk>
 :wq

その他OSの場合

基本的にロケーションさえ変更すればインストールできます。
以下のURLは全部64bitなので32bitの場合は変更してください。
OS名 URL  
CentOS5.8 http://ftp.riken.jp/Linux/centos/5.8/os/x86_64/
CentOS6.3 http://ftp.riken.jp/Linux/centos/6.3/os/x86_64/
Scientfic Linux 6.3 http://ftp.riken.go.jp/Linux/scientific/6.3/x86_64/os/
Fedora16 http://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/16/Fedora/x86_64/os/ –extra-args=’console=tty0 console=ttyS0,115200n8 serial’ と最後にserialを付与する必要
Fedora17 http://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/17/Fedora/x86_64/os/
Ubuntu11.10 http://ftp.riken.jp/Linux/ubuntu/dists/oneiric/main/installer-amd64/
Ubuntu12.04 http://ftp.riken.jp/Linux/ubuntu/dists/precise/main/installer-amd64/

virshコマンド

コマンド 概要
virsh list 起動中の仮想マシンを一覧表示
virsh list –all 停止中の仮想マシンを含めて一覧表示
virsh start vm01 仮想マシンを起動
virsh start vm01 –console 仮想マシンを起動(コンソール接続)
virsh suspend vm01 仮想マシンを一時停止
virsh resume vm01 仮想マシンを再開
virsh shutdown vm01 仮想マシンをシャットダウン
virsh destroy vm01 仮想マシンを強制停止
virsh autostart vm01 仮想マシンをホスト起動時に起動
virsh autostart –disable vm01 仮想マシンをホスト起動時に起動しない
virsh save VirtualMachine /path/filename 仮想マシンの現在の状態を保存する(仮想マシンは停止し、状態がファイルに保存される。 ハイバネーションのようなもの。 デフォルトでは、AppArmor で任意の場所には保存できないように設定されている。
virsh restore /path/filename 仮想マシンの状態を復元する
virsh console vm01 仮想マシンのコンソールへ接続
virsh create /etc/libvirt/qemu/CentOS6.0xml 仮想マシンを登録する イメージとXMLを違うPCに移動した場合などに使用します。
virsh define /etc/libvirt/qemu/[仮想マシン名].xml 仮想マシンの管理への登録
virsh undefine [仮想マシン名] 仮想マシンの管理からの削除
virt-clone –original rhel60vm01 –name vm01clone 仮想マシンをクローン
–file /var/lib/libvirt/images/vm01.img –nonsparse  
virsh vncdisplay vm01 仮想マシンに接続する際に使用する VNC のディスプレイ番号を調べる
virsh edit vm01 仮想マシンのコンフィグを修正する
virsh attach-disk –type cdrom vm01 /path/to/filename.iso hdc 仮想マシンの CD-ROM を入れ替える
virsh dominfo vm01 仮想マシンの情報を表示する
virsh vcpuinfo vm01 仮想マシンの CPU 情報を表示する
virsh snapshot-create vm01 仮想マシンのスナップショットを作成
virsh snapshot-delete vm01 1317861582 仮想マシンのスナップショットを削除
virsh snapshot-dumpxml vm01 1317862115 仮想マシンのスナップショットのXMLをダンプ
virsh snapshot-list m01 仮想マシンのスナップショットリストを表示
virsh snapshot-revert vm01 1317861582 仮想マシンをスナップショットの状態に復元
virsh nodeinfo ホストマシンの情報を表示する
virsh pool-list プール一覧を表示する
virsh vol-list default ストレージファイルパスを表示する(pool-listコマンドで確認した後)
virsh vol-delete /var/lib/libvirt/images/vm.img イメージの削除

その他

rawからqcow2へ変換

$ sudo qemu-img convert -f raw -O qcow2 orig.img out.img

qcow2らrawへ変換

$ sudo qemu-img convert -f qcow2 -O qcow2 orig.img out.img

qcow2のディスクサイズを削減

ディスクサイズが大きくなった場合は一度別のイメージに書き出せばコンパクトになる可能性があります。

$ sudo qemu-img convert -f qcow2 -O qcow2 orig.img out.img
$ sudo mv qcow2 out.img orig.img

仮想マシンの状態確認

virt-topというパッケージをインストールするとCPU利用率やネットワークの転送量を確認できます。

$ sudo apt-get install virt-top

ゲストイメージの操作

操作方法によらずゲストは停止しておかないとイメージが壊れる恐れがあります。
guestfishをインストールするかqcow2の場合だとqemu-nbdを利用する方法があります。
qemu-nbdの場合はフォーマットを気にする必要があるのとguestfishの場合は操作方法に慣れる必要があります。

guestfishによるゲストの操作

パッケージのインストールが必要です。
ゲストファイルシステムにアクセスできますが稼働中の仮想マシンにアクセスするとファイルシステムを壊す恐れがあります。
$ sudo apt-get install guestfish -y
ゲストファイルシステムにアクセスできますが稼働中の仮想マシンにアクセスするとファイルシステムを壊す恐れがあります。
絶対に安全を期するのであればrwオプションでなくroオプションを使いましょう。
root権限が絶対に必要という訳ではありません。root権限が必要なファイルアクセスのみrootで操作する必要があります。
ドメイン名でアクセスする場合(libvirtが必要)は-dオプションを利用します。
$ sudo guestfish --rw -a [イメージファイル] -i
後は多少勝手は違いますがシェルのイメージで操作可能です。
vi、mkdir、ls、ll、cat など普通のシェルで使えるコマンドも使えます。
ユーザの作成方法とかがわかりませんでしたけど。
ホストからのコピーは copi-in 、ゲストからのコピーは copy-out コマンドで行えます。
スクリプトによる操作も可能です。
新規書き込みはwrite、write-appendは追加書き込みのコマンドです。
改行が入らないみたいなので \n としています。。
# vi guest_setting.sh
   #!/bin/bash -
   guestfish -a /tmp/test.img -i <<'EOF'
   write-append /etc/hosts "192.168.10.50 stack01\n"
   write-append /etc/hosts "192.168.10.51 stack02\n"
   copy-in /tmp/test.txt /tmp
   EOF
# chmod 755 guest_setting.sh
# ./guest_setting.sh

libguestfs-toolsによるゲストの操作

パッケージのインストールが必要です。
$ sudo apt-get install libguestfs-tools -y
以下のコマンドがインストールされます。
virt-alignment-scan
virt-edit
virt-ls
virt-sysprep
virt-cat
virt-filesystems
virt-make-fs
virt-tar
virt-tar-in
virt-convert
virt-inspector
virt-tar-out
virt-copy-in
virt-install
virt-rescue
virt-win-reg
virt-copy-out
virt-list-filesystems
virt-resize
virt-df
virt-list-partitions
virt-sparsify

ゲストイメージのhostsの確認

# virt-cat -a /tmp/test.img /etc/hosts

ゲストイメージのhostsの修正

# virt-edit -a /tmp/test.img /etc/hosts

qemu-nbdによるゲストの操作

モジュールの読み込みと必要なパッケージのインストール
chrootすればゲストOSをそのまま触っているのと何らかわりはないので一番楽かもしれません。
$ sudo modprobe nbd
$ sudo apt-get install kpartx -y

QCOW2の仮想イメージをマウント

$ sudo qemu-nbd -c /dev/nbd0 `pwd`/scientific6.3_x86_64.qcow2

$ sudo vgscan
$ sudo kpartx -av /dev/nbd0

予めマウントするイメージのボリュームグループ名を確認しておきましょう。

スキャンして増加しているボリュームグループ名を確認してマウントします。

イメージをアンマウント

$ sudo umount /mnt
$ sudo vgchange -an VolGroup00
$ sudo kpartx -dv /dev/nbd0
$ sudo qemu-nbd -d /dev/nbd0

スナップショット

virshでもスナップショットを取得できますがスナップショットの名前を自由に設定できません。
また仮想マシンの削除などもスナップショットを全て削除しないとドメインを削除できません。
ただし、virshだとマシンの停止をかくにんしてくれますがqemu-imgだとしれくれません。
qemu-imgだとスナップショット名を自由に設定できます。
ストレージはqcow2方式でしかKVMはスナップショットを使用することが出来ません。
また仮想マシンは停止している状態でないとイメージを壊す恐れがあります。

スナップショットの作成

snapshot1という名前で作成する場合です。

$ susdo qemu-img snapshot -c snapshot1 /root/virt/CentOS6.0.img

イメージに対するスナップショットを確認

$ sudo qemu-img snapshot -l /root/virt/CentOS6.0.img

作成したスナップショットに戻す

$ qemu-img snapshot -a snapshot1 /root/virt/CentOS6.0.img

作成したスナップショットを削除する

$ sudo qemu-img snapshot -d snapshot1 /root/virt/CentOS6.0.img