将 Xen DomU 复制到另一台机器后,Windows 中的所有网络配置都会丢失

将 Xen DomU 复制到另一台机器后,Windows 中的所有网络配置都会丢失

背景

我们公司在单台服务器上安装了大约 40 个 Xen 域,由一套专有程序安装和管理。大多数虚拟服务器由我们的客户管理,我们无法访问客户系统。大约有 10 个域是 Windows 完全虚拟化服务器,并使用半虚拟化 NIC。所有服务器都使用静态网络配置。

我们决定放弃专有解决方案,将所有域移至另一台纯 Debian 和 Xen 的服务器。我们希望所有客户机的迁移都无需客户干预,也不会更改客户数据。我们不需要实时迁移。

事情变得更加复杂的是,当前的 Dom0 是 Centos 5.8,带有相当老版本的 Xen (3.4),并使用 xend toolstack (xm) 进行管理。新服务器是 Debian Jessie,带有 Xen 4.4 和 libxenlight (xl),旧 xend 不受支持。我在两台服务器上都安装了 libvirt,但由于存在差异,因此无法复制所有配置。DomU 的配置未存储在旧服务器上的文件中 - 管理套件使用其他方式来定义和管理客户机。

我有一个脚本,可以暂停旧域,将虚拟文件系统(它是 LVM2 的逻辑卷)复制到新机器,将配置转换为 libvirt XML 格式,定义新域并启动它。它适用于 Linux 客户机,但当我启动 Windows 客户机时,它没有配置网络。

旧域的配置: (格式为 SXP,由 生成xm list -l urflowgow78eq3。标识符都是不透明的哈希值 - 这是我们想要摆脱它的原因之一)

(domain
    (domid 124)
    (on_crash restart)
    (uuid 909320a0-2770-2461-8c21-ef07fe9caf55)
    (bootloader_args )
    (vcpus 1)
    (name urflowgow78eq3)
    (on_poweroff destroy)
    (on_reboot restart)
    (cpus (()))
    (bootloader )
    (maxmem 1128)
    (memory 1128)
    (shadow_memory 10)
    (features )
    (on_xend_start ignore)
    (on_xend_stop ignore)
    (start_time 1439655183.09)
    (cpu_time 53747.3287688)
    (online_vcpus 1)
    (image
        (hvm
            (kernel )
            (videoram 4)
            (hpet 0)
            (stdvga 0)
            (loader /usr/lib/xen/boot/hvmloader)
            (vncunused 1)
            (xen_platform_pci 1)
            (boot c)
            (rtc_timeoffset -21610)
            (vncpasswd XXXXXX)
            (pci ())
            (pae 1)
            (vpt_align 1)
            (hap 1)
            (viridian 1)
            (acpi 1)
            (localtime 0)
            (timer_mode 2)
            (vnc 1)
            (nographic 0)
            (guest_os_type default)
            (pci_msitranslate 1)
            (apic 1)
            (monitor 0)
            (usbdevice tablet)
            (device_model /usr/lib64/xen/bin/qemu-dm)
            (pci_power_mgmt 0)
            (usb 0)
            (xauthority /root/.Xauthority)
            (isa 0)
            (notes (SUSPEND_CANCEL 1))
        )
    )
    (status 2)
    (state -b----)
    (store_mfn 1044476)
    (device
        (vif
            (bridge lk92o857at1h25)
            (uuid 979030f6-b3b6-fe7c-31d2-4a6c8d98f8c7)
            (script /etc/xen/scripts/vif-bridge)
            (ip 1.2.3.4)
            (rate '6250000,50000')
            (mac 00:16:3e:c6:49:dc)
            (vifname s7s8j3onwrxw38)
            (type ioemu)
            (backend 0)
        )
    )
    (device
        (vbd
            (uuid dde5f71d-d3e5-8e7f-81f2-25b9d3330a20)
            (bootable 1)
            (dev hda:disk)
            (uname phy:/dev/q1jn2lg6voj8fj/yqr9r37ugfhx75)
            (mode w)
            (backend 0)
            (bootable 1)
            (VDI )
        )
    )
    (device
        (vfb
            (vncpasswd XXXXX)
            (vncunused 1)
            (vnc 1)
            (uuid 14058e82-f5cf-b646-bee9-273db560bd3b)
            (location 0.0.0.0:5911)
        )
    )
    (device
        (console
            (protocol vt100)
            (location 3)
            (uuid 9a055df5-5bd5-804e-9493-394040ed4099)
        )
    )
)

新域的配置:(libvirt XML 格式。所有相关设备、LV 等都已创建。据我所知,网络配置完全相同。)

<domain type='xen'>
  <name>Windows</name>
  <uuid>02a81bea-1020-d2fe-7f31-5625a1a6fecd</uuid>
  <memory unit='KiB'>1155072</memory>
  <currentMemory unit='KiB'>1155072</currentMemory>
  <vcpu placement='static'>1</vcpu>
  <os>
    <type arch='x86_64' machine='xenfv'>hvm</type>
    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <disk type='block' device='disk'>
      <driver name='phy'/>
      <source dev='/dev/XXX_vg0/Windows_lv1'/>
      <target dev='hda' bus='ide'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <controller type='ide' index='0'/>
    <interface type='bridge'>
      <mac address='00:16:3e:c6:49:dc'/>
      <source bridge='xenbr0'/>
      <ip address='1.2.3.4'/>
      <script path='/etc/xen/scripts/vif-bridge'/>
      <target dev='s7s8j3onwrxw38'/>
      <model type='netfront'/>
    </interface>
    <input type='tablet' bus='usb'/>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes'/>
    <video>
      <model type='cirrus' vram='9216' heads='1'/>
    </video>
  </devices>
</domain>

问题

迁移的 Windows 客户机中有一个标记为“Xen Net Device Driver #2”的 NIC,其默认设置(自动配置地址)而不是静态地址。在设备管理器中,有两个 NIC:一个标记为“未连接到计算机”,另一个正在工作。两个 NIC 都具有完全相同的驱动程序。

自动配置的 NIC 确实可以工作(通过从 Dom0 中的正确 MAC 捕获 DHCP 请求确认),但配置错误。因此,启动后,新客户机没有 Internet 连接。

我认为断开连接的接口是迁移前使用的接口,并且配置了正确的 IP 地址等。(我无法确认,因为我不知道如何查看非活动接口的配置。)创建新的连接接口是因为 Windows 认为它​​是一个新的 NIC,类似于Citrix Xen VM 失去网络连接但就我而言,它并没有从模拟转变为半虚拟化。

我的问题

  • Windows 如何判断有新的网络接口?
  • 我可以在 Xen 的配置中更改哪些内容以使 Windows 不创建新的 NIC 并重用旧的网络配置?

相关内容