首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Xen:将基于LVM的机器从Xen开放资源迁移到Xen云平台

Xen:将基于LVM的机器从Xen开放资源迁移到Xen云平台
EN

Unix & Linux用户
提问于 2013-02-26 08:48:14
回答 2查看 3.1K关注 0票数 3

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

我们希望将这些VM迁移到XCP主机上,我们已经找到了一个脚本来完成它(http://www.xen.org/files/xva/xva.py)。但是这个脚本假设配置文件中列出的磁盘是“虚拟磁盘”,也就是它们自己的分区表和其他东西。很明显,情况并非如此,而且也不起作用。

你建议怎么做?有自制的方法吗?最后,我们可能不得不用旧的tar文件覆盖新的VM,但我希望这是我们最后的选择。

我想,也许我们可以通过使用与kpartx相反的东西来创建这个脚本所期望的磁盘:而不是为每个分区将一个虚拟磁盘拆分成设备,而是将多个分区(或者在我们的例子中是LVM卷)捆绑到一个虚拟磁盘中。但我不知道这种事。

提前感谢!

EN

回答 2

Unix & Linux用户

发布于 2013-02-26 09:54:36

我们就是这样做的:

假设我们的VM名为"anansi“(我目前正在阅读Neil的一本书;我让您猜猜哪个:-)。它安装在两个LVM卷中,/dev/vg0 0/anansi-root(根文件系统,5GB)和/dev/vg0 0/anansi-交换(512 5GB)。

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

代码语言:javascript
运行
复制
lvcreate -n anansiVHD -L 6GB vg0

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

代码语言:javascript
运行
复制
cfdisk /dev/vg0/anansiVHD

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

代码语言:javascript
运行
复制
kpartx -av /dev/vg0/anansiVHD

我们对它们进行了格式化(在本例中使用ext3,因为它是原始VM的格式)。您将看不到/dev/vg0 0中的新设备,因为LVM不知道它们。您必须使用/dev/mapper/任何东西来访问它们,如下所示:

代码语言:javascript
运行
复制
mkfs.ext3 /dev/mapper/vg0-anansiVHD1
mkswap /dev/mapper/vg0-anansiVHD2

然后,我们挂载根分区:

代码语言:javascript
运行
复制
mkdir /tmp/anansiVHD_root
mount /dev/mapper/vg0-anansiVHD1 /tmp/anansiVHD_root

当我们想要迁移的VM正在运行时,我们使用快照复制它的内容:

代码语言:javascript
运行
复制
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)

我们清理:

代码语言:javascript
运行
复制
umount /tmp/anansiVHD_root
umount /tmp/anansi-snap
lvremove -f /dev/vg0/anansi-snap
kpartx -d /dev/vg0/anansiVHD

我们必须更改VM的配置文件("anansi.cfg")以反映对虚拟磁盘的更改。这意味着要改变这句话:

代码语言:javascript
运行
复制
disk    = [ 'phy:/dev/vg0/anansi-root,xvda1,w', 'phy:/dev/vg0/anansi-swap,xvda2,w' ]

对此:

代码语言:javascript
运行
复制
disk    = [ 'phy:/dev/vg0/anansiVHD,xvda,w' ]

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

代码语言:javascript
运行
复制
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,所以它将无法工作。

所以我们做了这个:

代码语言:javascript
运行
复制
xe vm-param-set PV-bootloader="" uuid=0ab93325-bdb3-e5c9-e7ab-2173b612b02c

使用新VM的uuid,我们从"xe vm-list“中获得。

票数 3
EN

Unix & Linux用户

发布于 2013-03-06 21:21:49

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

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

vi /tmp/tmpmigrateVHD_root/etc/fstab

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

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

  • 公司代码:2345:respawn:/sbin/agetty xvc0 9600 vt100-nav
  • #1:2345:再生:/sbin/mingetty tty1
  • #2:2345:再生:/sbin/mingetty tty2
  • #3:2345:再生:/sbin/mingetty tty3
  • #4:2345:再生:/sbin/mingetty tty4
  • #5:2345:再生:/sbin/mingetty tty5
  • #6:2345:再生:/sbin/mingetty tty6
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/66142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档