Compartir a través de

为 VMware 无代理迁移做好准备

本文概述了使用 Azure Migrate:服务器迁移工具通过无代理迁移方法将 VMware 虚拟机迁移到 Azure 时执行的更改。

谨慎

本文引用了 CentOS,这是一个处于生命周期结束 (EOL) 状态的 Linux 发行版。 请相应地考虑您的使用方式和计划。 有关详细信息,请参阅 CentOS 生命周期结束指南

将本地 VM 迁移到Azure之前,可能需要进行一些更改才能使 VM 准备好Azure。 这些更改对于确保迁移的 VM 可以在Azure成功启动,并可以建立与 Azure VM 的连接非常重要。 Azure Migrate会自动为 Linux 和 Windows 的以下操作系统版本处理这些配置更改。 此过程称为“混合”

注释

如果无代理迁移支持操作系统的主要版本,则会自动支持所有次要版本和内核。

支持混合的操作系统版本

  • Windows Server 2008 或更高版本
  • Red Hat Enterprise Linux 10.x、9.5、9.x、8.x、7.9、7.8、7.7、7.6、7.5、7.4、7.3、7.2、7.1、7.0、6.x
  • CentOS Stream
  • SUSE Linux Enterprise Server 15 SP6、15 SP5、15 SP4、15 SP3、15 SP2、15 SP1、15 SP0、12、11 SP4、11 SP3
  • Ubuntu 22.04、21.04、20.04、19.04、19.10、18.04LTS、16.04LTS、14.04LTS
  • Kali Linux(2016、2017、2018、2019、2020、2021、2022)
  • Debian 13, 12, 11, 10, 9, 8, 7
  • Oracle Linux 10、9、8、7.7-CI、7.7、6
  • Alma Linux 10.x、8.x、9.x
  • Rocky Linux 10.x、8.x、9.x

还可以使用本文手动准备用于迁移到上面未列出的操作系统版本的Azure的 VM。 概括地说,这些更改包括:

  • 验证是否存在所需的驱动程序
  • 启用串行控制台
  • 配置网络设置
  • 安装 VM 来宾代理

混合过程

在迁移之前,必须对 VM 配置进行一些更改,以确保迁移的 VM 在Azure上正常运行。 Azure Migrate通过 冻结过程处理这些配置更改。 水化过程仅针对上面给定的受支持操作系统的 Azure 版本执行。 在迁移之前,可能需要为上面未列出的其他操作系统版本手动执行所需的更改。 如果在没有进行所需更改的情况下迁移 VM,VM 可能无法启动,或者你可能无法连接到迁移后的 VM。 下图显示了 Azure Migrate 执行水合过程。

保湿步骤

当用户触发 Test MigrateMigrate时,Azure Migrate执行冻结过程来准备要迁移到Azure的本地 VM。 若要设置冻结过程,Azure Migrate创建临时Azure VM,并附加源 VM 的磁盘以执行更改,使源 VM 准备好Azure。 临时Azure VM 是在创建最终迁移 VM 之前在迁移过程中创建的中间 VM。 将使用市场中的一个 OS 映像(Windows/Linux)创建与源系统类似 OS 类型的临时 VM。 如果本地 VM 正在运行Windows,本地 VM 的操作系统磁盘将作为数据磁盘附加到临时 VM 来执行更改。 如果是 Linux 服务器,附加到本地 VM 的所有磁盘都将作为数据磁盘附加到临时Azure VM。

Azure Migrate将创建网络接口、新的虚拟网络、子网和网络安全组(NSG)来托管临时 VM。 这些资源在客户的订阅中创建。 如果存在冲突的策略阻止创建网络项目,Azure Migrate将尝试在虚拟网络和子网中创建作为复制目标设置选项一部分提供的虚拟网络和子网中的临时Azure VM。

创建虚拟机后,Azure Migrate将使用 Azure 虚拟机 REST API 在临时 VM 上调用 Custom 脚本扩展。 自定义脚本扩展实用工具将执行一个准备脚本,其中包含附加到临时Azure VM 的本地 VM 磁盘上Azure就绪情况所需的配置。 准备脚本是从Azure Migrate拥有的存储帐户下载的。 虚拟网络的网络安全组规则将配置为允许临时Azure VM 访问用于调用脚本的Azure Migrate存储帐户。

迁移步骤

注释

冻结 VM 磁盘不支持客户管理的密钥 (CMK)。 平台管理的密钥 (PMK) 是默认选项。

在混合过程中执行的更改

准备脚本根据要迁移的源 VM 的 OS 类型执行以下更改。 你还可以将此部分作为指南,针对不支持混合的操作系统版本手动准备要迁移的 VM。

对Windows服务器上执行的更改

  1. 查找和准备Windows操作系统的磁盘卷

    在执行相关配置更改之前,准备脚本将验证是否选择了正确的 OS 磁盘进行迁移。 准备脚本将查看系统可见的所有附加卷,并在 SYSTEM 注册表配置单元文件路径中查找源 OS 卷。

    此步骤将执行以下操作:

    • 在附加到临时 VM 的 OS 磁盘上装载每个分区。

    • 装载分区后查找 \Windows\System32\Config\System 注册表文件。

    • 如果找不到这些文件,则卸载该分区,并继续搜索正确的分区。

    • 如果这些文件不在任何分区上,则可能表示选择了错误的 OS 磁盘,或者 OS 磁盘已损坏。 Azure Migrate迁移过程失败,并出现相应的错误。

    注释

    如果手动准备服务器进行迁移,则此步骤不相关。

  2. 进行启动和连接相关更改

    检测到源 OS 卷文件后,准备脚本会将 SYSTEM 注册表配置单元加载到临时Azure VM 的注册表编辑器中,并执行以下更改以确保 VM 启动和连接。 如果 OS 版本不支持混合,则需要手动配置这些设置。

    1. 验证是否存在所需的驱动程序

      确保所需的驱动程序已安装并设置为在引导启动时加载。 这些Windows驱动程序允许服务器与硬件和其他连接的设备通信。

      • IntelIde.sys
      • Atapi
      • Storflt
      • Storvsc
      • VMbus
    2. 将存储区域网络 (SAN) 策略设置为“全部联机”

      这可确保Azure VM 中的Windows卷使用与本地 VM 相同的驱动器号分配。 默认情况下,Azure VM 分配驱动器 D:用作临时存储。 这种驱动器分配会导致所有其他附加存储驱动器分配递增一个字母。 若要防止此自动分配,并确保 Azure 为其临时磁盘卷分配下一个可用的驱动器号,请将存储区域网络 (SAN) 策略设置为“全部联机”。

      若要手动配置此设置,请执行以下操作:

      • 在本地服务器上,使用提升的权限打开命令提示符并输入 diskpart

        手动配置

      • 输入 SAN。 如果未保留来宾操作系统的驱动器号,则会返回 Offline All 或 Offline Shared。

      • 在 DISKPART 提示符下,输入 SAN Policy=OnlineAll。 此设置可确保将磁盘联机,并确保可以读取和写入这两个磁盘。

        管理员命令提示符 diskpart 联机策略

  3. 设置 DHCP 启动类型

    准备脚本还会将 DHCP 服务启动类型设置为自动。 这将使迁移后的 VM 能够获取 IP 地址并在迁移后建立连接。 请确保配置了 DHCP 服务,并且其状态为“正在运行”。

    设置 DHCP 启动类型

    若要手动编辑 DHCP 启动设置,请在 Windows PowerShell 中运行以下示例:

    Get-Service -Name Dhcp
    Where-Object StartType -ne Automatic
    Set-Service -StartupType Automatic
    
  4. 禁用 VMware 工具

    如果“VMware 工具”服务启动类型存在,则将其禁用,因为Azure中 VM 不需要它们。

    注释

    若要连接到 Windows Server 2003 VM,必须在 Azure VM 上安装 Hyper-V Integration Services。 默认情况下,Windows Server 2003 计算机未安装此软件。 请参阅 本文 以安装和准备迁移。

  5. 安装Windows Azure来宾代理

    Azure Migrate将尝试安装Microsoft虚拟机代理(VM 代理),这是一个安全的轻型进程,用于管理虚拟机(VM)与Azure Fabric控制器的交互。 VM 代理在启用和执行Azure虚拟机扩展方面具有主要角色,用于启用 VM 的部署后配置,例如安装和配置软件。 Azure Migrate自动在 Windows Server 2008 R2 及更高版本上安装 Windows VM 代理。

    可以使用Windows安装程序包手动安装Windows VM 代理。 若要手动安装 Windows VM 代理,卸载 VM 代理安装程序。 还可以在 GitHub Windows IaaS VM 代理版本中搜索特定版本。 Windows Server 2008(64 位)及更高版本支持 VM 代理。

    若要检查是否已成功安装 Azure VM 代理,请转到 Task Manager,选择 Details 选项卡,并查找进程名称 WindowsAzureGuestAgent.exe。 存在该进程表示 VM 代理已安装。 还可以使用 PowerShell 检测 VM 代理。

    成功安装 Azure VM 代理

    执行上述更改后,系统分区将被卸载。 VM 现在已准备好进行迁移。 了解更多关于 Windows 服务器的更改。

在 Linux 服务器上执行的更改

  1. 发现和装载 Linux OS 分区

    在执行相关配置更改之前,准备脚本将验证是否选择了正确的 OS 磁盘进行迁移。 脚本将收集有关所有分区、其 UUID 和装入点的信息。 脚本将在所有这些可见分区中查找 /boot 和 /root 分区。

    此步骤将执行以下操作:

    • 发现 /root 分区:
      • 装载每个可见分区并查找 etc/fstab。
      • 如果找不到 fstab 文件,则卸载该分区,并继续搜索正确的分区。
      • 如果找到 fstab 文件,则读取 fstab 内容以识别根设备,并将其装载为基本装入点。
    • 发现 /boot 和其他系统分区:
      • 使用 fstab 内容确定 /boot 是否是单独的分区。 如果是单独的分区,则从 fstab 内容获取启动分区设备名称,或查找具有启动标志的分区。
      • 该脚本将继续发现和装载 /boot,并在“/mnt/azure_sms_root”上装载其他必要的分区,以生成 chroot 越狱所需的根文件系统树。 其他必要的分区包括:/boot/grub/menu.lst、/boot/grub/grub.conf、/boot/grub2/grub.cfg、/boot/grub/grub.cfg、/boot/efi(用于 UEFI 引导)、/var、/lib、/etc、/usr 等。
  2. 检测 OS 版本

    一旦发现根分区,脚本就会使用以下文件来确定 Linux 操作系统的分发版和版本。

    • RHEL:etc/redhat-release
    • OL:etc/oracle-release
    • SLES:etc/SuSE-release
    • Ubuntu:etc/lsb-release
    • Debian:etc/debian_version
  3. Install Hyper-V Linux Integration Services 并重新生成内核映像

    下一步是检查内核映像并重新生成 Linux init 映像,以便它包含初始 ramdisk 上所需的Hyper-V驱动程序(hv_vmbus、hv_storvsc、hv_netvsc)。 重新生成 init 映像可确保 VM 在Azure启动。

    Azure在Hyper-V虚拟化管理程序上运行。 因此,Linux 要求某些内核模块在Azure中运行。 若要准备 Linux 映像,你需要重新生成 initrd,使初始 ramdisk 上至少包含 hv_vmbus 和 hv_storvsc 内核模块。 重新生成 initrd 或 initramfs 映像的机制可能会因分发而有所不同。 查阅分发的文档或相应过程的支持。 以下示例演示了如何使用 mkinitrd 实用工具重新生成 initrd:

    1. 查找系统上安装的内核列表 (/lib/modules)

    2. 对于每个模块,检查是否已包含Hyper-V驱动程序。

    3. 如果缺少这些驱动程序中的任何一个,请添加所需的驱动程序,并为相应的内核版本重新生成映像。

      注释

      此步骤可能不适用于 Ubuntu 和 Debian VM,因为默认情况下Hyper-V驱动程序是内置的。 了解有关更改的详细信息。

      重新生成 initrd 的演示示例

      • 备份现有 initrd 映像

        cd /boot
        sudo cp initrd-`uname -r`.img  initrd-`uname -r`.img.bak
        
      • 使用 hv_vmbus 和 hv_storvsc 内核模块重新生成 initrd:

          sudo mkinitrd --preload=hv_storvsc --preload=hv_vmbus -v -f initrd-`uname -r`.img `uname -r`
        

    默认情况下,大多数最新版本的 Linux 分发版已包含此服务。 如果不包含,请使用上述步骤为所有版本(以上所示版本除外)手动安装此映像。

  4. 启用Azure串行控制台日志记录

    然后,脚本将进行更改以启用Azure串行控制台日志记录。 启用控制台日志记录有助于排查Azure VM 上的问题。 了解更多关于 Linux 的 Azure 串行控制台 适用于 Linux 的 Azure 串行控制台 - 虚拟机 | Azure

    修改 GRUB 或 GRUB2 中的内核引导行并包含以下参数,以便将所有控制台消息发送到第一个串行端口。 这些消息可以帮助 Azure 支持调试任何问题。

     console=ttyS0,115200n8 earlyprintk=ttyS0,115200 rootdelay=300
    

    我们还建议删除以下参数(如果存在)。

    rhgb quiet crashkernel=auto
    

    有关特定更改,请参阅本文

  5. 为建立连接进行的网络更改

    根据 OS 版本,脚本将执行所需的网络更改,以连接到迁移后的 VM。 更改包括:

    1. 移动(或删除)udev 规则,以避免产生以太网接口的静态规则。 在Azure克隆虚拟机时,这些规则会导致问题。

      RedHat 服务器的演示示例

         sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
         sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
      
    2. 必要时删除网络管理器。 网络管理器可能会干扰几个操作系统版本的 Azure Linux 代理。 建议对运行 RedHat 和 Ubuntu 分发版的服务器进行这些更改。

    3. 运行以下命令卸载此包:

      RedHat 服务器的演示示例

         sudo rpm -e --nodeps NetworkManager
      
    4. 备份现有 NIC 设置,并使用 DHCP 设置创建 eth0 NIC 配置文件。 为此,脚本将创建或编辑 /etc/sysconfig/network-scripts/ifcfg-eth0 文件,并添加以下文本:

      RedHat 服务器的演示示例

         DEVICE=eth0
         ONBOOT=yes
         BOOTPROTO=dhcp
         TYPE=Ethernet
         USERCTL=no
         PEERDNS=yes
         IPV6INIT=no
         PERSISTENT_DHCLIENT=yes
         NM_CONTROLLED=yes
      
    5. 按下面所示重置 etc/sysconfig/network 文件:

      RedHat 服务器的演示示例

         NETWORKING=yes
         HOSTNAME=localhost.localdomain
      
  6. Fstab 验证

    Azure Migrate将验证 fstab 文件的条目,并根据需要将 fstab 条目替换为永久性卷标识符(UUID)。 此操作可确保无论附加到哪个系统,驱动器/分区名称都保持不变。

    • 如果设备名称是标准设备名称(比如 /dev/sdb1),则:
      • 如果它是根分区或启动分区,则将其替换为 UUID。
      • 如果该分区作为标准分区与根分区或启动分区共存于同一磁盘上,则将其替换为 UUID。
    • 如果设备名称为 UUID/LABEL/LV,则不会进行任何更改。
    • 如果是网络设备(nfs、cifs、smbfs 等),则脚本将注释条目。 若要访问它,可以取消对相应代码的注释,然后重新启动 Azure VM。
  7. 安装 Linux 上的 Azure 来宾代理程序

    Azure Migrate将尝试安装 Microsoft Azure Linux 代理(waagent),这是一个安全的轻型进程,用于管理 Linux 和FreeBSD 预配和 VM 与 Azure Fabric 控制器交互。 详细了解 通过 Linux 代理为 Linux 和 FreeBSD IaaS 部署启用的功能。

    查看安装 Linux VM 代理 所需的包 列表。 Azure Migrate 在使用 VMware 无代理方法时,会自动为 RHEL 10.x、9.x、8.x/7.x/6.x,Ubuntu 14.04/16.04/18.04/19.04/19.10/20.04,SUSE 15 SP0/15 SP1/12,Debian 13/12/11/10/9/8/7 和 Oracle 10/9/8/7/6 安装 Linux VM 代理。 按照以下说明手动安装其他 OS 版本的 Linux 代理

    可以使用此命令来验证 Azure Linux 代理的服务状态,以确保其正在运行。 服务名称可能是 walinuxagent 或 waagent。 完成混合更改后,脚本将卸载所有已装载的分区,停用卷组,然后刷新设备。

    sudo vgchange -an <vg-name>
    sudo lockdev -flushbufs <disk-device-name>
    

    详细了解 Linux 服务器的更改。

清理临时 VM

执行必要的更改后,Azure Migrate将启动临时 VM 并释放附加的 OS 磁盘(和数据磁盘)。 这标志着混合过程的结束。

此后,将克隆修改后的 OS 磁盘和包含复制数据的数据磁盘。 在目标区域、虚拟网络和子网中创建一个新的虚拟机,并将克隆的磁盘附加到该虚拟机。 这标志着迁移过程的完成。

了解详细信息