使用 dd 在线迁移 xen 虚拟机
经过:
厂里有两台在旧的 xen 宿主机上面的虚拟机要迁移到新的 xen 宿主机
旧的 xen 虚拟机的存储使用的是 物理分区,新的 xen 虚拟机使用的是 LVM 逻辑卷
google 了一圈,关于 xen 的迁移大部分都是基于 img 文件格式的,场景不一样,差评啊!
上面的文章使用 xm migrate
命令进行迁移的两种方式:
- 静态迁移,虚拟机休需要眠掉,会影响在线业务
- 动态迁移,进行迁移的宿主机的环境要做一些配置,还要用到共享存储
有些高端,又搜了一圈,在 xen 的邮件列表中,有位兄台提到用 dd 醍醐灌顶。。。
http://lists.xen.org/archives/html/xen-users/2013-01/msg00264.html
那就把原来的物理分区 dd 打包一份,然后再 dd 到要迁移的宿主机上面。
当前虚拟机的磁盘是在 物理分区 : /dev/cciss/c0d0p8
# parted /dev/cciss/c0d0p8 print
Model: Unknown (unknown)
Disk /dev/cciss/c0d0p8: 197GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 32.3kB 132MB 132MB primary ext3 boot
2 132MB 4326MB 4195MB primary ext3
3 4326MB 6473MB 2147MB primary linux-swap
4 6473MB 197GB 191GB extended
5 6473MB 17.0GB 10.5GB logical ext3
6 17.0GB 21.2GB 4195MB logical ext3
7 21.2GB 25.4GB 4195MB logical ext3
8 25.4GB 29.5GB 4195MB logical ext3
9 29.5GB 197GB 167GB logical ext3
dd
的时候用管道给 gzip
压缩了一下,有些耗时
# time dd if=/dev/cciss/c0d0p8 |gzip > /media/vm6.img
384772752+0 records in
384772752+0 records out
197003649024 bytes (197 GB) copied, 6417.23 seconds, 30.7 MB/s
real 106m57.278s
user 103m13.547s
sys 6m22.712s
dd
完后,再把当前 vm 的配置信息导出一下:virsh dumpxml vm6 > vm6.xml
把 dd
好的文件和 vm 的配置文件 scp
到目的宿主机上,由于新的宿主机使用的是 逻辑卷
创建的逻辑卷大小 (197GiB) 比原来的磁盘分区 (197GB) 大了点,没有小
# lvcreate -L 197GB -n vm_disk3 vg
Logical volume "vm_disk3" created
然后把镜像文件解压 dd 灌进新创建的 LV 貌似也比较耗时:
# time gzip -dc vm6.img | dd of=/dev/vg/vm_disk3
384772752+0 records in
384772752+0 records out
197003649024 bytes (197 GB) copied, 6170.47 seconds, 31.9 MB/s
real 102m50.593s
user 12m42.816s
sys 13m36.711s
这篇文章的评论中,有位兄台提到 dd 时指定 bs 写入速度会快些,下次有机会测试一下
修改 vm6.xml
中定义的虚拟机的磁盘路径:
<disk type='block' device='disk'>
<driver name='phy'/>
<source dev='/dev/vg/vm_disk3'/>
<target dev='xvda' bus='xen'/>
</disk>
然后 virsh define vm6.xml
定义新的 VM
虚拟机中的一些配置文件还需要修改一下:
/boot/grub/menu.lst
/etc/fstab
这 2 个文件中可能会用磁盘 UUID
来 mount 文件系统,迁移之后,虚拟机分区的 UUID
变了:
原系统
# dumpe2fs -h /dev/xvda1|grep -i uuid
Filesystem UUID: f9c79e8b-2945-4f37-b8b7-ef14538a9397
迁移后系统
# dumpe2fs -h /dev/xvda1|grep -i uuid
Filesystem UUID: 9a906e6e-f13e-48ad-b2be-9b5e91364eac
还有就是 IP 地址和 mac 地址,mac 地址在刚才 define 之前没有改,复用原来的 IP 地址的配置文件在虚拟机内部,需要挂载虚拟机的文件系统,使用 kpartx
来搞:
# parted /dev/vg/vm_disk1 print
Model: Linux device-mapper (dm)
Disk /dev/mapper/vg-vm_disk1: 212GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 32.3kB 132MB 132MB primary ext3 boot
2 132MB 4326MB 4195MB primary ext3
3 4326MB 6473MB 2147MB primary linux-swap
4 6473MB 197GB 191GB extended
5 6473MB 17.0GB 10.5GB logical ext3
6 17.0GB 21.2GB 4195MB logical ext3
7 21.2GB 25.4GB 4195MB logical ext3
8 25.4GB 29.5GB 4195MB logical ext3
9 29.5GB 197GB 167GB logical ext3
使用 kpartx
来创建虚拟机的磁盘映射关系
# kpartx -av /dev/vg/vm_disk1
add map vm_disk1p1 : 0 256977 linear /dev/vg/vm_disk1 63
add map vm_disk1p2 : 0 8193150 linear /dev/vg/vm_disk1 257040
add map vm_disk1p3 : 0 4192965 linear /dev/vg/vm_disk1 8450190
add map vm_disk1p5 : 0 20482812 linear /dev/vg/vm_disk1 12643218
add map vm_disk1p6 : 0 8193087 linear /dev/vg/vm_disk1 33126093
add map vm_disk1p7 : 0 8193087 linear /dev/vg/vm_disk1 41319243
add map vm_disk1p8 : 0 8193087 linear /dev/vg/vm_disk1 49512393
add map vm_disk1p9 : 0 327051207 linear /dev/vg/vm_disk1 57705543
挂载修改配置:
# mount /dev/mapper/vm_disk1p2 /media ## 根分区
# vim /media/etc/sysconfig/network-scripts/ifcfg-eth0
卸载文件系统,移除映射关系:
# umount /media/
# kpartx -dv /dev/vg/vm_disk1
del devmap : vm_disk1p1
del devmap : vm_disk1p2
del devmap : vm_disk1p3
del devmap : vm_disk1p5
del devmap : vm_disk1p6
del devmap : vm_disk1p7
del devmap : vm_disk1p8
del devmap : vm_disk1p9
现在就可以启动 vm 了:
# virsh start vm6
Domain vm6 started
结果:
正常开机,磁盘自检,挂载,网络等配置等都正常,没有比较明显的后遗症 OVER …
起因:
要迁移的 vm 是因为厂里的应用运维不想搞业务迁移,说上面的应用太老,服务配置麻烦,还有很多坑, 所以不想迁移业务,闹着要整体迁移虚拟机,好吧,只好我来填坑喽 。。。
感言:
木桶原理啊:那些边缘业务,没人维护,没人关心,一旦发生变化,就成了短板,变成了需要花精力和时间来维护的坑
本文标题 | 使用 dd 在线迁移 xen 虚拟机 |
---|---|
原始链接 | https://lvii.github.io/system/2013-09-09-migrate-xen-vm-by-dd/ |