Xen虚拟机的故障解除 1 了解Xen 配置文件
Xen的配置文件包含下面的标准变量。这些文件里的配置项必须用引号(")括起来。这些配置文件位于 /etc/xen 目录里。 如表1 。
表1 Xen 虚拟化系统配置文件
2 了解Xen日志文件
所有红帽虚拟化系统的日志文件都是标准的 ASCII 文件,可以很容易地用基于 ASCII 的编辑器存取。 红帽虚拟化系统的主要配置目录是 /etc/xen/。这个目录包含了 xend 守护进程和其他的虚拟机配置文件。网络脚本文件也存放在此处(在 /scripts 目录)。 所有你用于故障解除目的的日志文件都存放在 /var/log/xen 目录。 你也应该知道所有虚拟机的基于文件的磁盘映像都缺省存放在 /var/lib/xen 目录里。 红帽虚拟化系统的 /proc 文件系统信息位于 /proc/xen/ 目录。
虚拟化系统以 xend 守护进程和 qemu-dm 进程为特征,这两个工具都把多个日志文件写入到 /var/log/xen/ 目录:
xend.log 是包含 xend 守护进程收集的所有数据的日志文件,不管这数据是普通的系统事件,还是操作者执行的动作。所有虚拟机的操作(如创建、关闭、销毁等等)都在此出现。 xend.log 通常是你跟踪事件或性能问题的第一个着手点。它包含错误信息的详细条目和条件。 xend.log 文件包含了于你运行 xm log 命令相同的基本信息。它位于 /var/log/ 目录里。
xend-debug.log 是包含 xend 和虚拟化子系统(如 framebuffer、Python 脚本等等)的事件错误记录的日志文件。 xend-debug.log ,对于系统管理员也是非常有用的,因为它包含了比 xend.log 更为详细的信息。
xen-hotplug-log 是包含热插拔事件的数据的日志文件。如果设备或网络脚本没有被启动,事件将记录在这里。
qemu-dm.[PID].log 是 qemu-dm 进程为每个完全虚拟化客户机创建的日志文件。当使用日志文件时,你必须用 ps 命令并挑选出 qemu-dm 的信息来获取 qemu-dm 的进程号。注意你必须用实际的 qemu-dm 进程的 PID 来代替 [PID]。
如果在使用虚拟机管理者时你遇到任何错误,你可以在 /.virt-manager 目录下的 virt-manager.log 文件里寻找生成的数据。注意每次你启动虚拟机管理者,它都会覆盖现有的日志文件内容。当出现系统错误后,在重启虚拟机管理者前,请确保备份好 virt-manager.log 文件。
3故障解除工具
系统管理员程序、网络工具和高级调试工具(关于如何使用这些工具来配置红帽虚拟化服务的更多信息,请参考相关的配置文档)。你可以使用这些标准的系统管理员工具和日志来协助故障解除:
xentop
xm dmesg
xm log
vmstat
iostat
lsof
你可以使用这些标准的系统管理员工具和日志来协助故障解除:
XenOprofile
systemTap
crash
sysrq
sysrq t
sysrq w
你可以使用这些网络工具来协助故障解除:
ifconfig
tcpdump
brtctl ( 是一个在虚拟化 Linux 内核里检查和配置以太网桥配置的网络工具。在执行这些示例命令时,你必须拥有根用户权限)
4 SELinux
在xen实施 SELinux 必须考虑的事情。当你部署系统修订和增加设备时,你必须相应地更新 SELinux 策略。要为客户机配置 LVM 卷,你必须为不同的底层块设备和卷组修改 SELinux 上下文。
# semanage fcontext -a -t xen_image _t -f -b /dev/sda2
# restorecon /dev/sda2
布尔值参数 xend_disable_trans 使 xend 在重启后进入 unconfined 模式。禁止对单个进程的保护比在整个系统里应用要更好。我们建议你不要把目录重新标记为将在其他地方使用的 xen_image_t。
5 了解翻译错误信息
如果你接收到下面的错误:
failed domain creation due to memory shortage, unable to balloon domain0
如果没有足够的可用内存,域将不能运行。Domain0 没有足够的空间来容纳新创建的客户机。你可以检查 xend.log 里关于这个错误的内容:
[2007-12-21] 20:33:31 xend 3198] DEBUG (balloon:133) Balloon: 558432 Kib free; 0 to scrub; need 1048576; retries: 20
[2007-12-21] 20:33:31 xend. XendDomainInfo 3198] ERROR (XendDomainInfo: 202
Domain construction failed
通过 xm list Domain0 命令,你可以检查 domain0 所使用的内存数量。如果 domain0 已经没有可用内存,你可以用 "xm mem-set Domain-0 NewMemSize" 来设置新的内存容量。
你接收到下面的错误:
wrong kernel image: non-PAE kernel on a PAE
这个信息表示你试图在监控程序里运行不被支持的客户机内核映像。当你试图在 RHEL 5.0 监控程序里引导 non-PAE 半虚拟化客户机内核时,将产生这个问题。红帽虚拟化系统只支持带有 PAE 的客户机内核和 64 位的体系结构。
键入这个命令:
[root@smith]# xm create -c va base
Using config file "va-base"
Error: (22, 'invalid argument')
[2007-12-14 14:55:46 xend.XendDomainInfo 3874] ERRORs
(XendDomainInfo:202) Domain construction failed
Traceback (most recent call last)
File "/usr/lib/python2.4/site-packages/xen/xend/XendDomainInfo.py", line 195 in create vm.initDomain()
File " /usr/lib/python2.4/site-packages/xen/xend/XendDomainInfo.py", line 1363 in initDomain raise VmError(str(exn))
VmError: (22, 'Invalid argument')
[2007-12-14 14:55:46 xend.XendDomainInfo 3874] DEBUG (XenDomainInfo: 1449]
XendDlomainInfo.destroy: domin=1
[2007-12-14 14:55:46 xend.XendDomainInfo 3874] DEBUG (XenDomainInfo: 1457]
XendDlomainInfo.destroy
omain(1)
如果你需要运行 32 位/非 PAE 内核,你将需要把客户机作为完全虚拟化的虚拟机运行。对于半虚拟化的客户机,如果你需要运行 32 位的 PAE 客户机,你必须具有 32 位的 PAE 监控程序。对于半虚拟化的客户机,如果你要运行 64 位的 PAE 客户机,你必须具有 64 位的 PAE 监控程序。对于完全虚拟化的客户机,你必须用 64 位的监控程序运行 64 位客户机。RHEL 5 i686 里的 32 位 PAE 监控程序只支持运行 32 位的并行虚拟化和 32 位的完全虚拟化的客户机操作系统。64 位监控程序只支持 64 位的并行虚拟化客户机。
当你把完全虚拟化的 HVM 客户机移动到 RHEL 5.0 系统里时,就会出现这个问题。你的客户机不能够引导且在控制台可以看到一个错误信息。检查配置文件里的 PAE 条目,确保 pae=1。你应该使用 32 位的版本。
你接收到下面的错误:
Unable to open a connection to the Xen hypervisor or daemon
当 virt-manager 程序不能启动时,会出现这个问题。当 /etc/hosts 配置文件里没有 localhost 条目时会产生这个错误。请确认配置文件里是否启用了 localhost 条目。下面是一个错误的 localhost 条目示例:
# Do not remove the following line, or various programs
# that require network functionality will fail.
localhost.localdomain localhost
下面是一个正确的 localhost 条目示例:
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
localhost.localdomain. localhost
你会接收到下面的错误(在 xen-xend.log file 文件里):
Bridge xenbr1 does not exist!
当客户的网桥没有正确配置时会产生这个问题,它会迫使 Xen hotplug 脚本超时。如果你在主机之间移动配置文件,你必须确保你更新了这些配置文件,如进行网络拓扑结构和配置的修改。当你试图启动含有不正确或不存在的 Xen 网桥配置的客户机时,你将接收到如下的错误:
[root@trumble virt]# xm create r5b2-mySQL01
Using config file " r5b2-mySQL01"
Going to boot Red Hat Enterprise Linux Server (2.6.18.-1.2747 .el5xen)
kernel: /vmlinuz-2.6.18-12747.el5xen
initrd: /initrd-2.6.18-1.2747.el5xen.img
Error: Device 0 (vif) could not be connected. Hotplug scripts not working.
另外,xend.log 里会有下面的错误:
[2007-11-14 15:07:08 xend 3875] DEBUG (DevController:143) Waiting for devices vif
[2007-11-14 15:07:08 xend 3875] DEBUG (DevController:149) Waiting for 0
[2007-11-14 15:07:08 xend 3875] DEBUG (DevController:464) hotplugStatusCallback
/local/domain/0/backend/vif/2/0/hotplug-status
[2007-11-14 15:08:09 xend.XendDomainInfo 3875] DEBUG (XendDomainInfo:1449) XendDomainInfo.destroy: domid=2
[2007-11-14 15:08:09 xend.XendDomainInfo 3875] DEBUG (XendDomainInfo:1457) XendDomainInfo.destroyDomain(2)
[2007-11-14 15:07:08 xend 3875] DEBUG (DevController:464) hotplugStatusCallback
/local/domain/0/backend/vif/2/0/hotplug-status
要解决这个问题,你必须编辑你的客户机配置文件,并修改 vif 条目。找到配置文件里的 vif 条目,假定你把 xenbr0 作为缺省网桥,正确的设置应该如下所示:
# vif = ['mac=00:16:3e:49:1d:11, bridge=xenbr0',]
你接收到这些 python 错误:
[root@python xen]# xm shutdown win2k3xen12
[root@python xen]# xm create win2k3xen12
Using config file "win2k3xen12".
/usr/lib64/python2.4/site-packages/xenxm/opts.py:520: Deprecation Warning:
Non ASCII character '\xc0' in file win2k3xen12 on line 1, but no encoding
declared; see
for details
execfile (defconfig, globs, locs,)
Error: invalid syntax 9win2k3xen12, line1)
当遇到无效的(或不正确的)配置文件时,Python 生成这些错误。要解决这个问题,你必须更正不正确的配置文件,或者生成一个新的文件。