Xen:将基于 LVM 的计算机从 Xen Opensource 迁移到 Xen Cloud Platform

Xen:将基于 LVM 的计算机从 Xen Opensource 迁移到 Xen Cloud Platform

我们有几个基于 LVM 的虚拟机在 Xen 开源主机上运行。在我们的例子中,“基于 LVM”意味着根分区有一个 LVM 卷,交换分区有另一个卷。 VM 的内核和 initrd 位于这些卷之外,作为 Xen 主机中的文件。这些虚拟机是使用 xen-create-image 创建的,xen-create-image 是 Debian 的 xen-tools 套件的一部分。

我们想要将这些虚拟机迁移到 XCP 主机,并且我们找到了一个脚本来执行此操作(http://www.xen.org/files/xva/xva.py)。但此脚本假定配置文件中列出的磁盘是“虚拟磁盘”,即具有自己的分区表和其他内容。显然,情况并非如此,而且这是行不通的。

你会建议做什么?有自制方法吗?最后,我们可能不得不通过用旧虚拟机中的大 tar 文件覆盖新虚拟机来迁移虚拟机,但我希望这是我们最后的手段。

我想也许我们可以通过使用与 kpartx 相反的方式来创建一个像该脚本所期望的那样的磁盘:不要将虚拟磁盘拆分为每个分区的设备,而是将多个分区(或者在我们的例子中是 LVM 卷)捆绑在一起一个虚拟磁盘。但我不知道类似的事情。

提前致谢!

答案1

我们就是这样做的:

假设我们的虚拟机名为“anansi”(我目前正在阅读 Neil Gaiman 的一本书;我让你猜猜是哪一个:-))。它安装在两个 LVM 卷中:/dev/vg0/anansi-root(根文件系统,5GB)和 /dev/vg0/anansi-swap(512MB)。

首先我们为虚拟硬盘创建一个新的LVM卷:

lvcreate -n anansiVHD -L 6GB vg0

然后我们使用 cfdisk 在其上创建两个分区:

cfdisk /dev/vg0/anansiVHD

然后我们使用 kpartx 显示虚拟磁盘内的分区:

kpartx -av /dev/vg0/anansiVHD

我们对它们进行了格式化(在本例中使用 ext3,因为它是原始虚拟机所具有的)。您不会在 /dev/vg0 中看到新设备,因为 LVM 不知道它们。您必须使用 /dev/mapper/whatever 来访问它们,如下所示:

mkfs.ext3 /dev/mapper/vg0-anansiVHD1
mkswap /dev/mapper/vg0-anansiVHD2

然后我们挂载根分区:

mkdir /tmp/anansiVHD_root
mount /dev/mapper/vg0-anansiVHD1 /tmp/anansiVHD_root

当我们要迁移的虚拟机正在运行时,我们使用快照来复制其内容:

lvcreate -s -n anansi-snap -L 2G /dev/vg0/anansi-root
mkdir /tmp/anansi-snap
mount /dev/vg0/anansi-snap /tmp/anansi-snap
cd /tmp/anansi-snap
tar c . | (cd /tmp/anansiVHD_root ; tar xv)

我们清理:

umount /tmp/anansiVHD_root
umount /tmp/anansi-snap
lvremove -f /dev/vg0/anansi-snap
kpartx -d /dev/vg0/anansiVHD

我们必须更改虚拟机的配置文件(“anansi.cfg”)以反映对虚拟磁盘的更改。这意味着改变线路:

disk    = [ 'phy:/dev/vg0/anansi-root,xvda1,w', 'phy:/dev/vg0/anansi-swap,xvda2,w' ]

对此:

disk    = [ 'phy:/dev/vg0/anansiVHD,xvda,w' ]

然后我们使用之前链接的脚本来迁移机器:

xva.py -c anansi.cfg -s <the IP of our XCP host> --username=root --password=<root password>

之后,我们必须按照脚本的说明,将用于引导该 VM 的内核和 initrd 复制到 XCP 主机。最后一步是 ssh 进入 XCP 主机并更改该 VM 的引导加载程序:如果没有,XCP 将尝试使用 pygrub,并且由于这需要虚拟硬盘内的内核和 initrd,因此它将无法工作。

所以我们这样做了:

xe vm-param-set PV-bootloader="" uuid=0ab93325-bdb3-e5c9-e7ab-2173b612b02c

我们从“xe vm-list”获得了新虚拟机的 uuid。

答案2

vi /tmp/tmpmigrateVHD_root/boot/grub/grub.conf

  • root=/dev/sda1 console=tty0 --> root=/dev/xvda1 console=xvc0

/tmp/tmpmigrateVHD_root/etc/fstab

  • /dev/sda1 --> /dev/xvda1
  • /dev/sda2 --> /dev/xvda2

vi /tmp/tmpmigrateVHD_root/etc/inittab: (反向注释掉)

  • co:2345:respawn:/sbin/agetty xvc0 9600 vt100-nav
  • #1:2345:respawn:/sbin/mingetty tty1
  • #2:2345:respawn:/sbin/mingetty tty2
  • #3:2345:respawn:/sbin/mingetty tty3
  • #4:2345:respawn:/sbin/mingetty tty4
  • #5:2345:respawn:/sbin/mingetty tty5
  • #6:2345:respawn:/sbin/mingetty tty6

相关内容