将 Linux 计算机从 XenServer 转换为 Hyper-V

将 Linux 计算机从 XenServer 转换为 Hyper-V

我正在将我的 XenServer VM 上的最后几个转换为 Hyper-V。

其中大部分都是 Windows 机器,我使用 Windows Backup 进行了备份和恢复。对于一些 Windows 机器,我使用 XenServer 导出过程创建 XVA 文件,然后将其转换为可在 Hyper-V 中使用的 VHD。

两种方法都可以完美运行,但是当我尝试对一些 Linux 机器进行导出和转换时,效果并不好。

我创建了 XVA,使用 Xenconvert 转换并创建了 VHD,但当我将它们连接到 Hyper-V VM 时,我只看到一个闪烁的光标。经过一番研究,我认为这是因为 HDD 的命名方式不同。例如,原始机器将/dev/显示xvda, xvda1.....,但在 Hyper-V 中,我相信这些将是sda, sda1......

这是我有点迷茫的地方……我将其中一台机器启动到改装机器上的启动菜单,并查看了菜单和参数选项,但我看不到对 的引用xvda。那么,要么是我上面的假设是错误的,要么是我在错误的地方寻找的,或者两者兼而有之?

任何帮助都将不胜感激,即使建议以完全不同的方式来做。

编辑1:(添加启动菜单信息)
如果我选择启动菜单上的第一项并按下,e则会出现以下内容

root (hd0,0)  
kernel /vmlinuz-2.6.32-573.12.1.e16.x86_64 ro root=dev/mapper/VolGroup-lv_root rd_NOLUKS LANG=en_US.UTF-8 rd_NO_MD console=hvc0 KEYTABLE=us rd_LVM_LV=VolGroup/lv_swap SYSFONT=latacyrheb-sun16 rhgb crashkernel=auto quiet rd_LVM_LV=VolGroup/lv_root rd_NO_DM
initrd /initramfs-2.6.32-573.12.1.e16.x86_64.img

编辑2:(Linux 版本和 fstab)

Linux版本是Centos 6.7

/etc/fstab 的副本(我尝试将 UUID 更改为新磁盘的 UUID,但似乎不起作用 /etc/fstab 的副本

答案1

编辑答案: 我一直在思考你的问题,我认为 rsync 或 dd 备份/恢复可能是你最好的选择。如果你使用的是动态增长的 vhdd,那么 rsync 可能是你最好的选择,如果你使用的是静态定义的磁盘,那么 dd 可能是你最好的选择。

选项1: 首先,您必须创建 samba 或 cfs 共享,或通过其他方式连接物理驱动器以备份数据。连接备份目标后,您必须运行 rsync 或 dd 命令来备份驱动器。

Rsync 示例(使用 Arch): https://wiki.archlinux.org/index.php/full_system_backup_with_rsync

DD示例: http://www.thegeekstuff.com/2010/10/dd-command-examples/

我很确定如果您想创建一个可移植文件,您可以将 rsync 导入 gzip。

然后,您必须在新的 hyper-v 机器上安装 Centos。然后,您必须执行恢复备份映像的任务(这将根据您用于创建它的命令而有所不同)。

选项 2: 或者,您可以先创建新的 CentOS VM,然后将另一个导出的 VHD 文件安装到 Hyper-V 下的同一虚拟机。由于您将两个驱动器安装到同一台机器上,因此您可以在此时完成迁移过程。安装备份驱动器并将引导加载程序迁移到该驱动器后,您可以卸载替换 VM 驱动器。然后,您可以重新使用同一驱动器来迁移其他机器(对需要迁移的每台 VM 重复此操作)。如果您有多台机器,您可以尝试编写此过程的脚本,或者您可能能够找到现有的备份脚本。

选项 3: 使用 hyper-V 创建新的 VHD/VHDX 文件,然后将其附加并安装到您想要复制的 Xenserver 客户机,然后通过这种方式直接进行备份。

我知道有很多麻烦需要克服,但有三个可靠的选项可能不需要太多麻烦就可以完成。我对 Linux 还算是新手,但我以前用 DD 移动高清图像相当容易,我不明白为什么它在这里不能很好地工作。

原始答案:

如果您使用的是 LVM,那么 HDD 不应该导致问题,转换后 HD 链接应该完好无损,但我不是专家。我在 Hyper-V 下使用 Linux 方面有相当多的经验,但没有将 XenServer 机器转换为 Hyper-V。话虽如此,您看到的错误对我来说可能是 Linux 内核的问题。知道您使用的是哪个 Linux 发行版会很有帮助。

XenServer 有两种 VM 类型:

HVM VM - 这些 VM 等同于 Hyper-V VM,无需进行任何更改。这些 VM 可以通过常规方式转换为 Hyper-V 计算机(复制 VHD 或使用 Microsoft 推荐的 System Center 2012 虚拟机管理器 (VMM))。

PV VM - 这些是“半虚拟化”VM,没有完整的启动内核。它们与 VM 的操作系统绑定,并共享一些引导加载程序来引导机器。您需要将 VM 中的 PV 内核 (kernel-xen) 替换为 pae 内核 (kernel-pae)。

我不知道你使用的是什么 Linux 发行版,这可能会对实际解决方案产生一些影响,但是,假设虚拟机是 PV 虚拟机,以下链接有关于在 Linux 机器上安装 PV 内核的说明,所以你需要做相反的事按照这些说明进行操作,以适应您的 Linux 发行版。然后导出过程应该可以正常工作:

http://itproctology.blogspot.ca/2009/06/pv-enabling-hvm-from-vmware-on.html

此答案假设您在 Xenserver vms 上使用 PV 内核,并假设这是导致启动失败的问题。它还假设您已经尝试使用 System Center 2012 Virtual Machine Manager (VMM) 来转换 vms(根据 Microsoft 最佳实践,步骤显示在以下链接中):

https://technet.microsoft.com/en-ca/library/gg610672.aspx

最后说明:

  • 我可能会尝试禁用安全启动并看看是否有区别。
  • 确保遵循 Microsoft 的 Linux VM 最佳实践(取决于您使用的发行版)。这些可以在以下链接中找到,您可以尝试对 VM 进行这些更改在进行出口流程之前(请务必先备份您的虚拟机):

Hyper-V 下的通用 Linux VM 最佳实践: https://technet.microsoft.com/en-ca/library/dn720239.aspx

Hyper-V 下特定发行版的 Linux VM 最佳实践: https://technet.microsoft.com/en-ca/library/dn531030.aspx

最后,这是我的虚拟机的 Linux 内核参数(Ubuntu/Debian)(在 /etc/default/grub 中,确保之后运行 sudo update-grub):

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash video=hyperv_fb:1366x768 elevator=noop numa=off"

仅当在 VM 上安装了 hyper-v 集成工具(特定于发行版)后,video=hyperv_fb 选项才会起作用。

答案2

我知道这个答案来得晚了,但我想分享一下我是如何解决这个问题的。我还在寻找将 CentOS7 VM 从 XenServer 6.5 迁移到 Hyper-V 2016 的答案。我尝试了从 Starwind 到导出为 XVA 设备并使用 XenConvert 2.3.1 进行转换的所有方法,但都无济于事。

解决方案实际上非常简单,并且第一次就成功了:下载此 ISO -https://sourceforge.net/projects/boot-repair-cd/

我采取的高级步骤:

  1. 将 XEN VM 导出为 OVA(或使用任何工具(如 Starwind)转换 .xva XEN 设备)
  2. 在 Hyper-V 中创建新 VM 并附加之前导出的 VHD
  3. 将上面链接中的 ISO 安装到新的 Hyper-V VM 的 DVD/CDROM 驱动器中,并从中启动。
  4. 按照提示操作(注意!!!确保虚拟机已连接网卡,该网卡可连接到提供 DHCP 和互联网访问权限的外部网络)
  5. 选择自动修复(注意!在重新安装 GRUB 的步骤中,您可能需要修改 yum 命令,在我的例子中,我必须使用 - “yum eras grub*” 而不是 “yum eras grub*-common”
  6. 重新启动并享受在 Hyper-V 上运行的 Linux VM :)

答案3

您的 xen 配置中引用了 xvda。

例如:

# Created Mon Oct 12 08:38:43 CEST 2015

name='clone0'

kernel='/etc/xen/vm-kernels/vmlinuz-3.2.0-4-amd64'
ramdisk='/etc/xen/vm-kernels/initrd.img-3.2.0-4-amd64'

memory=256

# Networking
nics   = 1
vif = [ 'bridge=xenbr0' ]
disk  = [ 'phy:/dev/vg0/clone0.root,xvda1,w', # there you can rename device name
          'phy:/dev/vg0/clone0.swap,xvda2,w'  # in you VM
        ]

root   = '/dev/xvda1 ro'  #this tell boot device 

on_reboot = 'restart'
on_crash = 'restart'

vcpus = 1

相关内容