VMware から KVM への移行にあたって
CentOS5のconvertはCentOS6より手間がかかったので記録
- Host OSはCentOS6
- Host OSはLVMを使用していない
- Guest OSがCentOS5.6 (kernel-2.6.18-274)
- Guest OSでLVMを使用している
- image形式はrawなのでそのまま使う
- MACは手動で割当
VMwareからのイメージの取得手順は省きます。
必要なのはimagefile.vmdk
imagefile.vmx はVMware用の構成ファイルなのでKVMでは使わない。
HOST OSの作成方法も省きます。
イメージのマウント
# losetup -f (空きloopback deviceを確認)
/dev/loop0
# mv imagefile.vmdk imagefile.img
# losetup /dev/loop0 imagefile.img
# losetup -a
/dev/loop0: [0803]:15 (/DATA/imagefile.img)
# kpartx -a /dev/loop0 && vgchange -ay && lvscan
# ls -l /dev/mapper/
total 0
crw-rw---- 1 root root 10, 58 Jul 9 16:16 control
lrwxrwxrwx 1 root root 7 Jul 10 11:07 loop0p1 -> ../dm-0
lrwxrwxrwx 1 root root 7 Jul 10 11:07 loop0p2 -> ../dm-1
lrwxrwxrwx 1 root root 7 Jul 10 11:07 VolGroup00 -> ../dm-2
lrwxrwxrwx 1 root root 7 Jul 10 11:07 VolGroup01 -> ../dm-3
# fdisk -l (サイズあたりで中身を判断)
Disk /dev/mapper/loop0p1: 106 MB, 106896384 bytes
255 heads, 63 sectors/track, 12 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/mapper/loop0p2: 53.6 GB, 53579473920 bytes
255 heads, 63 sectors/track, 6514 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/mapper/VolGroup00: 47.3 GB, 47311749120 bytes
255 heads, 63 sectors/track, 5751 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/mapper/VolGroup01: 6241 MB, 6241124352 bytes
255 heads, 63 sectors/track, 758 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x30307800
# mount /dev/mapper/VolGroup00 /mnt
# mount /dev/mapper/loop0p1 /mnt/boot
# mount --bind /dev /mnt/dev
# mount --bind /sys /mnt/sys
# mount --bind /proc /mnt/proc
確認
# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/VolGroup00
44755372 15522320 26922908 37% /mnt
/dev/mapper/loop0p1 101086 23562 72305 25% /mnt/boot
# mount
/dev/mapper/VolGroup00-LogVol00 on /mnt type ext3 (rw)
/dev/mapper/loop2p1 on /mnt/boot type ext3 (rw)
/dev on /mnt/dev type none (rw,bind)
/sys on /mnt/sys type none (rw,bind)
/proc on /mnt/proc type none (rw,bind)
各ファイル編集
# vi /mnt/etc/sysconfig/network-scripts/ifcfg-eth0 MACアドレスやらIPアドレスやら修正
# vi /mnt/etc/sysconfig/network-scripts/ifcfg-eth1 MACアドレスやらIPアドレスやら修正
# vi /mnt/etc/sysconfig/network GateWayやら修正
その他のconf等も変える必要があれば変更
KVM Console用設定
起動後に $ virsh conxole imagename
でログインしたいので
http://aikotobaha.blogspot.jp/2010/08/rhel-kvm-2.html もやる
# vi /mnt/boot/grub/grub.conf
---------
hiddenmenu
serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1 [追記]
title Red Hat Enterprise Linux Server (2.6.18-194.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-194.el5 ro root=/dev/VolGroup00/LogVol00 console=ttyS0,115200n8 [追記]
---------
# vi /mnt/etc/inittab
---------
# Run gettys in standard runlevels
S0:12345:respawn:/sbin/agetty ttyS0 115200 [追記]
---------
virtIO用にkernel 再コンパイル
# cp -fp /mnt/etc/modprobe.conf /mnt/etc/.modprobe.conf.org
# sed -i '4i alias scsi_hostadapter1 virtio_blk' /mnt/etc/modprobe.conf
# chroot /mnt
# export _KERNEL=`ls -1 /boot/*img | sed -e's|/boot/initrd-||' -e 's|.img||'`
# echo $_KERNEL
2.6.XX-XXX.el5
# cp -ip /boot/initrd-${_KERNEL}.img /boot/initrd-${_KERNEL}.img.org
# mkinitrd --with=virtio_pci --with=virtio_blk -v -f /boot/initrd-${_KERNEL}.img ${_KERNEL}
# exit
アンマウント
# umount /mnt/boot /mnt/sys /mnt/dev /mnt/proc
# umount /mnt
# vgchange -an && kpartx -d /dev/loop0 && losetup -d /dev/loop0 && losetup -f
KVM用設定ファイルの編集
# uuidgen
# vi /etc/libvirt/qemu/imagefile.xml 適当なコピーから改変。☆部分
---------
<domain type='kvm'>
<name>imagefilename</name> ☆
<uuid>uuidgen で作成したもの</uuid> ☆
<memory unit='KiB'>2097152</memory> ☆
<vcpu placement='static'>4</vcpu> ☆
<os>
<type arch='x86_64' machine='rhel5.5.0'>hvm</type>
<boot dev='hd'/>
</os>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='none'/>
<source file='/path/imagefilename.img'/> ☆
<target dev='vda' bus='virtio'/> ☆
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</disk>
<controller type='usb' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
</controller>
<controller type='ide' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
<interface type='bridge'>
<mac address='MAC_eth0'/> ☆
<source bridge='br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<interface type='bridge'>
<mac address='MAC_eth1'/> ☆
<source bridge='br1'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</interface>
<serial type='pty'>
<target port='0'/>
</serial>
</devices>
</domain>
---------
# virsh define /etc/libvirt/qemu/imagefile.xml
# virsh list --all
# virsh start
うまくいけばこれで完成。
MACアドレスをudevで認識できず
ifcfg-eth[01]がリネームされてネットワークが起動しないことがある。
/etc/sysconfig/network-scripts/ifcfg-eth0
↓ 勝手にリネーム
/mnt/etc/sysconfig/network-scripts/ifcfg-eth0.bak
そんなときは、もう一度リネームして再起動すると直る。
Host# virsh console imagefile
Connected to domain pd1-azfront
Escape character is ^]
imagefile login: Guest OS に ログイン
Guest# cd /mnt/etc/sysconfig/network-scripts/
Guest# mv ifcfg-eth0.bak ifcfg-eth0
Guest# shutdown -h now
ctl+]でぬける
Host# virsh list --all
Id Name State
----------------------------------------------------
- imagefile shut off
Host# virsh start imagefile