背景
我们公司在单台服务器上安装了大约 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 并重用旧的网络配置?