LoginSignup
60
60

More than 5 years have passed since last update.

逆引きKVM(Kernel-based Virtual Machine)

Last updated at Posted at 2014-01-04

この記事はKVM(Kernel-based Virtual Machine)の逆引きTipsです。 CentOS 6.3のKVMを基にしています。

KVMのインストール

CentOS 6.3 64bitを最小構成でインストールする

SELinuxを切る

# setenforce 0
# vi /etc/sysconfig/selinux
---
SELINUX=disabled
---

Firewallを切る

# /etc/init.d/iptables stop
# chkconfig iptables off

ネットワークインターフェースをブリッジにする

# vi /etc/sysconfig/network-scripts/ifcfg-eth0
---
DEVICE=eth0
ONBOOT=yes
BRIDGE=br0
---

# vi /etc/sysconfig/network-scripts/ifcfg-br0
---
DEVICE=br0
ONBOOT=yes
TYPE=Bridge
IPADDR=192.168.1.2
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
---

# /etc/init.d/network restart
# ifconfig eth0 0.0.0.0 promisc up

kvmをyumで入れる

# yum -y groupinstall "Virtualization" "Virtualization Client" "Virtualization Platform" "Virtualization Tools" "X Window System"

virt-manager用に日本語fontを入れる

# yum -y install "vlgothic-p-fonts"

mDNS クライアントの作成失敗のエラー回避のためavahiを入れる

# yum -y install avahi
# /etc/init.d/messagebus restart
# /etc/init.d/avahi-daemon restart
# chkconfig messagebus on
# chkconfig avahi-daemon on
# /etc/init.d/libvirtd start

libvirtdの起動

# /etc/init.d/libvirtd start
# chkconfig libvirtd on

KVMの管理

ssh経由でGUI(virt-manager)でKVMを管理する

Linux付属の仮想マシンマネージャ(virt-manager)を利用します。
virt-managerはX11のGUIアプリなので、リモートから画面を見るためには、画面を転送する必要があります。
そこでsshのX11 Forwadingという機能で、画面をローカル端末に転送して、そこで操作します。

手順

サーバ側でsshdの設定でX11Forwarding yesとして、X11フォワーディングを有効にします。

クライアントOSにX11サーバをインストールします

  • Windowsであればxmingがお勧め
  • MacOS XであればXQuartzなどがあります(2016/3追記:原因は定かではありませんが、私の環境だとXQuartzではVirtManagerから入力できない問題がありました。古いバージョンであるX11.appを使ったところ、うまくいきました)

sshクライアントで、X11のフォワーディングを有効にして接続します

  • puttyならば「メニュー」→「接続」→「SSH」→「X11」→「X11フォワーディングを有効にする」をチェック。その後接続
  • teratermならば「設定」→「SSH転送」→「リモートの(X)アプリケーションをローカルのXサーバに表示する」をチェックして、設定を保存。再度teratermを立ち上げる必要あり。その後SSH接続
  • OpenSSHであれば ssh -X root@(KVMホスト)と-Xオプションをつけて接続

ログインしたら「virt-manager」とコマンドを打てば、仮想マシンマネージャが起動します。

# virt-manager

snap.png

個別の仮想マシンの画面だけを見たいときは

# virt-viewer 仮想マシン名

注意

仮想マシンのコンソールにアクセスしたときに alt+ctrlが効かなくてマウスを出せなくなるので、

ユーザのホームディレクトリに .Xmodmapを作成して、下の設定する必要があります

# vi ~/.Xmodmap
---
clear Mod1
keycode 66 = Alt_L
keycode 69 = Alt_R
add Mod1 = Alt_L
add Mod1 = Alt_R
---

コンソールからvirshでKVMを管理する

コンソールでKVMを管理する場合、Linux付属のvirshコマンドを使います

起動中の仮想マシン一覧表示

# virsh list

全ての仮想マシン一覧表示

# virsh list --all

仮想マシンの情報

# virsh dominfo (仮想マシン名)

仮想マシンの起動

# virsh start (仮想マシン名)

仮想マシンの停止

# virsh shutdown (仮想マシン名)

仮想マシンの強制停止(電源OFF)

# virsh destroy (仮想マシン名)

仮想マシンの一時停止

# virsh suspend (仮想マシン名)

仮想マシンの一時停止の再開

# virsh resume (仮想マシン名)

仮想マシンの保存(メモリをファイルに書き出す)

# virsh save (仮想マシン名) (保存ファイル名)

保存した仮想マシンの復元(ファイルからメモリに戻す)

# virsh restore (保存ファイル名)

仮想マシンの構成変更(メモリ量変更など)

仮想マシン停止
/etc/libvirt/qemu/(仮想マシン名).xml を変更
変更を反映
# virsh define /etc/libvirt/qemu/(仮想マシン名).xml
起動

仮想マシンのコンソールログインする設定

通常の仮想マシンでは、コンソールにログインできない。
仮想マシンのOS起動オプションでシリアルコンソールを開けてあげると、ホストOSからvirsh consoleで接続できるようになる。

仮想マシンがCentOS 5,6の場合

grubの設定ファイル変更(CentOS 5系&6系共に実施が必要)

# vi /etc/grub.conf
---
serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1 # この行を追加
terminal --timeout=5 serial console # この行を追加
title CentOS (2.6.18-128.4.1.el5)
       root (hd0,0)
       kernel /vmlinuz (中略) console=tty0 console=ttyS0,115200n8 # console以降を追加
       initrd /initrd-2.6.18-128.4.1.el5.img
---

コンソール端末を作成 (CentOS 5 系のみで必要)

# vi /etc/inittab
---
S0:12345:respawn:/sbin/agetty ttyS0 115200 # この行を追加
1:2345:respawn:/sbin/mingetty tty1
---

コンソールからrootでログインできるようにする。(CentOS 5 系のみで必要)

# vi /etc/securetty
---
ttyS0 #追記
---

仮想マシンがCentOS 7の場合

GRUB2からは、直接設定ファイル/boot/grub2/grub.cfgをいじるのではなく、/etc/default/grubを編集したのち、grub2-mkconfigコマンドにてGRUB2用の設定ファイルを生成するのが作法(こちらのブログが大変参考になりました)。

なのでまずは/etc/default/grubを編集し、

GRUB_CMDLINE_LINUXにconsole=tty0 console=ttyS0,115200n8rを追記する。

GRUB_TIMEOUT=5
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos_centos70-template/root rd.lvm.lv=centos_cenn
tos70-template/swap console=tty0 console=ttyS0,115200n8r"  #ここを追記
GRUB_DISABLE_RECOVERY="true"

上記の例では、GRUB_CMDLINE_LINUXからrhgbquietのオプションは消しています。これは起動時の出力を抑止するオプションですが、トラブルシューティングしにくくなるだけなので、消しています。

次に、grub2-mkconfigコマンドにてGRUB2用の設定ファイルを生成します

# grub2-mkconfig -o /boot/grub2/grub.cfg

これでゲストマシンを再起動すればオーケー。

ゲストマシンのコンソールに接続

# virsh console (ドメイン名)

※ 抜ける場合はctrl + ]
仮想マシンを起動&そのままコンソール接続

# virsh start (ドメイン名) --console

KVMの運用

仮想マシンのバックアップ

基本的には、以下の二つのファイルをバックアップしておけばOK

仮想マシン設定ファイル
    /etc/libvirt/qemu/(仮想マシン名).xml
仮想ディスクイメージファイル
    上記設定ファイルにイメージファイルの場所は書いてあります
    通常は /var/lib/libvirt/images/(仮想マシン名).img

仮想マシンのバックアップからのリストア

仮想ディスクイメージファイルを適切な場所(設定ファイルあるパス)に置く
    通常は /var/lib/libvirt/images/(仮想マシン名).img
仮想マシン設定ファイルを適切な場所に置く
    通常は /etc/libvirt/qemu/(仮想マシン名).xml
以下のコマンドで仮想マシン設定ファイルの読み込み

# virsh define (仮想マシン設定ファイル)

バックアップスクリプト

rubyのバックアップスクリプト作ったので、もしよかったら使ってください→KVMバックアップスクリプト

VMWareの仮想ディスクマシンをKVM用に変換

vmwareの仮想ディスクイメージ(vmdk)をkvmに変換するときは以下のコマンドを打つ。

qemu-img convert (vmdkファイル) -O raw (kvmイメージファイル)

KVMのTips

ファイルの配置

  • 仮想マシン情報定義ファイル : /etc/libvirt/qemu/xxx.xml
  • 仮想マシンイメージ : /var/lib/libvirt/images/xxx.[img|qcow2]

KVMのトラブルシューティング(CentOS6系)

mDNS クライアントの作成に失敗

/var/log/libvirt/libvirtd.logのエラーメッセージ

2012-07-17 15:47:49.240+0000: 15548: info : libvirt version: 0.9.10,
package: 21.el6_3.1 (CentOS BuildSystem ,]
2012-07-03-16:15:49, c6b8.bsys.dev.centos.org)
2012-07-17 15:47:49.240+0000: 15548: error : virNetServerMDNSStart:460
: 内部エラー mDNS クライアントの作成に失敗しました: Daemon not running

対応

# yum -y install avahi
# /etc/init.d/messagebus restart
# /etc/init.d/avahi-daemon restart
# /etc/init.d/libvirtd restart
# chkconfig messagebus on
# chkconfig avahi-daemon on
# chkconfig libvirtd on

参考

http://quags.net/archives/53

virt-managerの日本語fontが表示されない

fontが足りていない

対応

# yum install "vlgothic-p-fonts"

適切なエミュレーターを見つけられない

/var/log/libvirt/libvirtd.logのエラー

2012-07-24 01:43:07.595+0000: 2126: error : qemuCapsExtractVersion:1566 : 内部エラー x86_64 の適切なエミュレーターを見つけられません

対応

# ln -s /usr/libexec/qemu-kvm /usr/bin/qemu-system-x86_64
# /etc/init.d/libvirtd restart

KVMのカーネルモジュールが読み込まれない

KVM を利用できません。これは KVM パッケージがインストールされていない。また
は、KVM のカーネルモジュール (kvm.ko) が読み込まれていないことを意味します。
QEMU が使われるので動作が遅くなるでしょう。

warning: KVM is not available. This may mean the KVM package is not installed, or the KVM kernel modules are not loaded. Your virtual machines my perform poorly

一時的な対応はカーネルモジュールの読み込めばOK

# modprobe kvm
# modprobe kvm-intel

再起動後も設定を継続させる場合は、 /etc/rc.d/rc.sysinitに以下を記載

modprobe kvm
modprobe kvm-intel

仮想マシンがKVMの内部のネットワークから外に出れない

仮想マインのインターフェースがプロミスキャスになっていないことがある

対応

# ifconfig eth0 0.0.0.0 promisc up

virsh shutdownで仮想マシンが停止しない

acpidが入っていない可能性がある。インストールすればOK

# yum install acpid
60
60
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
60
60