错误号 21554591:在实时迁移期间,目标计算机上的 ldmd 服务可能会发生核心转储并重新启动。
如果要迁移的域的内存严重碎片化,分成许多内存段,而目标计算机的空闲内存布局不兼容,可能会发生此问题。如果在实时迁移之前使用内存 DR 从域中删除内存,更有可能发生此问题。
核心转储的堆栈跟踪如下所示:
restore_lgpg_mblk+0x398(17bbc88, 16c39c8, 80000000, 80000000, 0, 40000000) rgrp_restore_lgpg+0x39c(0, 0, 1733948, 1711598, 0, 20000000) mem_allocate_real+0x92c(0, 20000000, ffbff868, 13aec88, 80808080, 373cd8) affinity_bind_resources+0x9f4(17bbc88, ffbff948, 13aec88, 3a10c000, 3a10c000, 1010101) mem_bind_real+0x468(17bbc88, ffbff9d4, 13aec88, 3a10c000, 3a10c000, 1010101) mem_bind_real_check+0xf4(17bbc88, 12ee338, 13aec88, 0, 376468, ff29fd80) mig_tgt_bound_feasibility_check+0x168(164be08, ff000000, ff, 1, 0, 0) i_tgt_do_feasibility_check+0x168(164be08, 0, 12390, 1, f960d244, ffffff) sequence+0x4a4(0, ff000000, ff322a40, 1, f960d244, ffffff) main+0xb54(5, ffbffc64, ffbffc7c, f960a900, 0, ff320200) _start+0x108(0, 0, 0, 0, 0, 370b60)
发生此问题时,来宾域会继续运行。如果 ldmd 服务成功重新启动,则无需进一步恢复。
如果 ldmd 服务无法重新启动并由于错误 21569507 进入维护模式,则必须先对主机或适用的物理域执行关开机循环,然后才能重新启动 ldmd。
解决方法:停止并取消绑定来宾域,然后执行冷迁移。请勿使用内存 DR 从要迁移的来宾域中删除内存。
错误号 21289174:在 SPARC 系统上,Oracle VM Server for SPARC 域中某个正在运行的内核区域将阻止来宾域的实时迁移。将显示以下错误消息:
Guest suspension failed because Kernel Zones are active. Stop Kernel Zones and retry.
解决方法:请选择下列解决方法之一:
停止运行该内核区域。
# zoneadm -z zonename shutdown
暂停该内核区域。
# zoneadm -z zonename suspend
将内核区域实时迁移到其他系统,然后再迁移来宾域。
请参见Creating and Using Oracle Solaris Kernel Zones 中的第 3 章 Migrating an Oracle Solaris Kernel Zone。
错误号 20606773:在 SPARC T7/M7 系统服务器与较早平台之间执行跨 CPU 实时迁移时,要求源计算机和目标计算机至少运行 Oracle VM Server for SPARC 3.2 软件。
例如,在 SPARC T5 系统和 SPARC T7 系列服务器之间实时迁移时,要求 SPARC T5 系统至少运行 Oracle VM Server for SPARC 3.2 软件。
错误号 20453206:即使目标系统上的有效布局中有足够的内存,迁移操作仍可能失败。内存 DR 操作可能会增加来宾域迁移的难度。
解决方法:无。
错误号 17285751:迁移只分配有一个虚拟 CPU 的 Oracle Solaris 10 来宾域可能会导致在执行 pg_cmt_cpu_fini() 功能时来宾域中出现紧急情况。
解决方法:在执行实时迁移之前至少向来宾域分配两个虚拟 CPU。例如,使用 ldm add-vcpu number-of-virtual-CPUs domain-name 命令增大分配给来宾域的虚拟 CPU 的数目。
错误号 17027275:不允许将域从运行系统固件 8.3 的 SPARC T4 系统迁移到 SPARC T5、SPARC M5 或 SPARC M6 系统。虽然迁移会成功,但是后续的内存 DR 操作会导致出现紧急情况。
解决方法:将 SPARC T4 系统上的系统固件更新到版本 8.4。请参见来宾域在 lgrp_lineage_add(mutex_enter: bad mutex, lp=10351178) 处出现紧急情况的解决方法。
错误号 16864417:当尝试在 SPARC T5、SPARC M5 或 SPARC M6 计算机与 UltraSPARC T2 或 SPARC T3 计算机之间进行迁移时,ldm migrate -n 命令不会报告失败。
解决方法:无。
错误号 15819714:在极少情况下,ldm list -o status 命令在用于观察控制域上的迁移时报告虚假的完成百分比。
此问题不影响正在迁移的域,也不影响源或目标控制域上的 ldmd 守护进程。
解决方法:在参与迁移以观察进度的其他控制域上运行 ldm list -o status 命令。
错误号 15776123:将来宾域迁移到 SPARC T4 系统时,如果对该域运行 cputrack 命令,则迁移后目标计算机上的来宾域可能会出现紧急情况。
解决方法:在将来宾域迁移到 SPARC T4 系统期间,不要运行 cputrack 命令。
错误号 15775055:在具有不同 CPU 频率的两台计算机之间迁移域后,ldm list 命令报告的运行时间可能不正确。出现这种不正确结果是因为运行时间是相对于运行该域的计算机的 STICK 频率来计算的。如果源计算机和目标计算机的 STICK 频率不同,运行时间的度量就会显得不正确。
此问题仅适用于 UltraSPARC T2、UltraSPARC T2 Plus 和 SPARC T3 系统。
来宾域自身报告和显示的运行时间是正确的。此外,在来宾域中 Oracle Solaris OS 执行的任何记帐都是正确的。
错误号 15710957:如果高负载的来宾域具有混合 I/O 配置并且您尝试迁移该域,nxge 可能会出现紧急情况。
解决方法:将以下行添加到 primary 域和作为该域的混合 I/O 配置一部分的任何服务域中的 /etc/system 文件:
set vsw:vsw_hio_max_cleanup_retries = 0x200
错误号 15701865:如果尝试对依赖于目标计算机上的非活动域的域进行实时迁移,ldmd 守护进程将发生故障并具有分段故障,并且目标计算机上的域将重新启动。虽然仍可以执行迁移,但将不是实时迁移。
解决方法:尝试实时迁移之前,执行以下操作之一:
删除与要迁移的域的来宾依赖关系。
启动目标计算机上的主域。
错误号 15701853:在 DRM 策略生效时执行域迁移后,如果 DRM 策略过期或将其从迁移后的域中删除,DRM 将无法为该域恢复原始数量的虚拟 CPU。
解决方法:如果在 DRM 策略有效时迁移域,并且随后 DRM 策略过期或被删除,请重置虚拟 CPU 的数量。使用 ldm set-vcpu 命令在域中将虚拟 CPU 的数量设置为原始值。
错误号 15699763:如果域中包含重复的 MAC 地址,则无法迁移该域。通常,如果迁移由于此原因失败,失败消息会显示重复的 MAC 地址。但在极少数情况下,此失败消息可能不会报告重复的 MAC 地址。
# ldm migrate ldg2 system2 Target Password: Domain Migration of LDom ldg2 failed
解决方法:确保目标计算机上的 MAC 地址是唯一的。
错误号 15696986:如果在两个相同的系统中向“相反方向”同时发出两个 ldm migrate 命令,这两个命令可能会挂起,永不会完成。如果启动了从计算机 A 到计算机 B 的迁移,同时又启动了从计算机 B 到计算机 A 的迁移,就会出现相反方向操作。
即使迁移过程是使用 –n 选项启动的模拟运行,也会导致挂起。出现此问题时,所有其他 ldm 命令均可能挂起。
解决方法:无。
错误号 15655513:在迁移处于活动状态的域之后,迁移后的域中的 CPU 利用率可能会在短时间内显著提高。如果在迁移时,该域存在有效的动态资源管理 (Dynamic Resource Management, DRM) 策略,Logical Domains Manager 可能会开始添加 CPU。特别是,如果在添加策略时未指定 vcpu-max 和 attack 属性,则默认值 unlimited 会导致将目标计算机中所有未绑定的 CPU 添加到迁移后的域中。
恢复:没有必要执行恢复。当 CPU 利用率下降到低于 DRM 策略所指定的上限之后,Logical Domains Manager 会自动删除 CPU。
错误号 15527921:在迁移期间,会忽略显式指定的任何控制台组和端口,而且会为目标域创建一个具有默认属性的控制台。此控制台是通过使用目标域名称作为控制台组并使用控制域中第一个虚拟控制台集中器 (vcc) 设备上的任意可用端口创建的。如果与默认组名有冲突,迁移将失败。
恢复:要在迁移之后恢复显式控制台属性,请解除对目标域的绑定,然后使用 ldm set-vcons 命令手动设置所需的属性。
错误号 15523120:在某些情况下,迁移会失败,ldmd 会报告它无法绑定源域所需的内存。即使目标计算机上的可用内存总量大于源域正在使用的内存量,也会出现此情况。
出现这种故障的原因是,迁移正由源域使用的特定内存范围需要目标上也有一致的可用内存范围。如果对于源域中的任何内存范围没有找到此类一致的内存范围,迁移将无法继续。请参见Oracle VM Server for SPARC 3.3 管理指南 中的内存的迁移要求。
恢复:遇到这种情况时,可以修改目标计算机上的内存使用情况来迁移域。为此,请解除绑定目标上任何已绑定的或处于活动状态的逻辑域。
使用 ldm list-devices -a mem 命令可以查看可用的内存及其使用方式。您可能还需要减少指定给另一个域的内存量。
错误号 15513998:有时,在迁移域之后,无法连接到该域的控制台。
解决方法:重新启动 vntsd SMF 服务以允许连接到控制台:
# svcadm restart vntsd
系统固件版本 8.4、9.1 和 XCP2230 引入了对 EFI GPT 磁盘标签的支持。默认情况下,在至少运行 Oracle Solaris 11.1 OS 的系统上安装的虚拟磁盘均具有 EFI GPT 磁盘标签。在早期版本的固件(例如 9.0.x、8.3、7.x 或 XCP2221)上无法找到此磁盘标签。此情况使得无法对运行无 EFI GPT 支持的系统固件版本的系统执行实时迁移或冷迁移。请注意,在这种情况下执行冷迁移也会失败,这与先前的限制不同。
要确定虚拟磁盘是否具有 EFI GPT 磁盘标签,请对原始设备运行 devinfo -i 命令。以下示例用于显示虚拟磁盘的磁盘标签是 SMI VTOC 还是 EFI GPT。
SMI VTOC 磁盘标签。如果虚拟磁盘具有 SMI VTOC 磁盘标签,则无论固件是否支持 EFI,均可以对固件执行迁移。
以下示例指示设备具有 VTOC 标签,因为 devinfo -i 命令报告了特定于设备的信息。
# devinfo -i /dev/rdsk/c2d0s2 /dev/rdsk/c2d0s2 0 0 73728 512 2
EFI GPT 磁盘标签。如果虚拟磁盘具有 EFI GPT 磁盘标签,则只能对具有 EFI 支持的固件执行迁移。
以下示例指示设备具有 EFI GPT 磁盘标签,因为 devinfo -i 命令报告了一个错误。
# devinfo -i /dev/rdsk/c1d0s0 devinfo: /dev/rdsk/c1d0s0: This operation is not supported on EFI labeled devices