首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

当 VMware 发生故障时 如何诊断 VMware 系统问题(1)

当 VMware 发生故障时 如何诊断 VMware 系统问题(1)

VMware ESX 服务器允许在一台服务器上以虚拟机的形式运行多个类似的或完全不同的操作系统实例,因此合并应用程序的工作负荷就简单而迅速。但是即使采用了最好的、最综合的方案,系统还是可能崩溃。
为了帮助进行故障排除,在 VMware ESX 服务器崩溃时,您可以以多种方法,根据崩溃的现象对问题进行分类。最常见的方法是分类归入到四维矩阵中,矩阵的一个轴上是 服务器虚拟机,另外一个轴上是 网络存储
此外,还有一个经常出现问题的地方是管理用户界面(Management User Interface,MUI),它不时地会遇到问题。
当崩溃发生时,诊断的第一步是搜集诊断数据 —— 收集完诊断数据之后,您就可以分析数据来找出崩溃的原因了。接下来的几节向您展示了如何搜集数据,到哪里查找信息,以及如何解释信息。
搜集诊断数据要搜集的第一部分关键数据是由 /usr/bin/vm-support 脚本产生的输出文件。这个文件放在当前目录中,并被命名为 esx-XXXX-XX-XX.XXXX.tgz(其中 X 是日期/进程标识符信息,例如 esx-2005-01-04.27059.tgz)。
VMware 会定期更新 /usr/bin/vm-support 脚本。为了搜集最精确的信息,请下载并安装最新版本。此外,如果您正遇到 VirtualCenter 的问题,那么还需要搜集 VirtualCenter 日志(对这个问题的诊断不在本文的范围内)。所有的最新版本请参阅 。
搜集完这些信息之后,您就可以将 vm-support 输出文件(为二进制模式)传输给适当的支持人员来诊断。要在一个基于 Linux 的系统上提取这个文件,请执行下面的命令:tar zxvf esx-XXXX-XX-XX.XXXX.tgz。
诊断系统概述让我们从系统的高度来看一下系统中的硬件是如何配置和分配的。您可以使用命令行工具来查看,或者查看 /usr/bin/vm-support 文件的输出。
/usr/bin/vm-support 的输出是一个使用 gzip 压缩过的 tar 文件,展开以后包含以下目录:
清单 1. vm-support 输出的布局
1
2
3
4
5
6
7
etc/
proc/
root/
tmp/
usr/
var/
根据 .vmx 配置文件的位置的不同,还可能包含 ‘home’ 或 ‘vpx’。




要全面了解 ESX 服务器的布局,可以从 tmp 目录开始。系统 PCI 总线设备的信息在 tmp/lspci.1.*.txt 文件中。运行 /sbin/lspci 命令您可获得同样的输出。清单 2 展示了一个输出清单的例子。
清单 2. lspci 的输出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# /sbin/lspci
00:00.0 Host bridge: ServerWorks: Unknown device 0014 (rev 33)
00:00.1 Host bridge: ServerWorks: Unknown device 0014
00:00.2 Host bridge: ServerWorks: Unknown device 0014
00:01.0 VGA compatible controller: ATI Technologies Inc Radeon VE QY
00:0f.0 ISA bridge: ServerWorks: Unknown device 0203 (rev a0)
00:0f.1 IDE interface: ServerWorks: Unknown device 0213 (rev a0)
00:0f.2 USB Controller: ServerWorks: Unknown device 0221 (rev 05)
00:0f.3 Host bridge: ServerWorks: Unknown device 0227
00:10.0 Host bridge: ServerWorks: Unknown device 0101 (rev 05)
00:10.2 Host bridge: ServerWorks: Unknown device 0101 (rev 05)
01:01.0 Ethernet controller: Intel Corporation 8254NXX
    Gigabit Ethernet Controller (rev 04)
01:02.0 Ethernet controller: Intel Corporation 8254NXX
       Gigabit Ethernet Controller (rev 04)
02:01.0 Ethernet controller: Intel Corporation 8254NXX
        Gigabit Ethernet Controller (rev 03)
02:01.1 Ethernet controller: Intel Corporation 8254NXX
        Gigabit Ethernet Controller (rev 03)
02:03.0 Fiber Channel: QLogic Corp QLA231x/2340 (rev 02)
02:03.1 Fiber Channel: QLogic Corp QLA231x/2340 (rev 02)




清单 2 给出了机器中所有的 PCI 控制器的一个列表。左边的一列告诉您总线、插槽和插件的功能。例如,规范说明为 02:01.0 的以太网控制器,告诉您这个插件是在 #02 总线的 #01 插槽中,其功能是 #0 。因为还有另一个有着相同的总线和插槽编号(而功能不同)的以太网控制器,所以这是一个两口的控制器。
既然我们已经知道机器中都有什么了,那么我们需要看一下这些资源中哪些分配给了控制台,哪些分配给了虚拟机。为此,可以看一下 tmp/vmkchdev.*.txt 文件,或者使用 /usr/sbin/vmkchdev 命令,该命令的输出如清单 3 所示。
清单 3. vmkchdev 的输出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# /usr/sbin/vmkchdev -L
000:00.0 1166:0014 0000:0000 console
PCI device 1166:0014 (ServerWorks)
000:00.1 1166:0014 0000:0000 console
PCI device 1166:0014 (ServerWorks)
000:00.2 1166:0014 0000:0000 console
PCI device 1166:0014 (ServerWorks)
000:01.0 1002:5159 8086:34b1 console
PCI device 1002:5159 (ATI Technologies Inc)
000:15.0 1166:0203 8086:34b1 console
PCI device 1166:0203 (ServerWorks)
000:15.1 1166:0213 8086:34b1 console
PCI device 1166:0213 (ServerWorks)
000:15.2 1166:0221 8086:34b1 console
PCI device 1166:0221 (ServerWorks)
000:15.3 1166:0227 8086:34b1 console
PCI device 1166:0227 (ServerWorks)
000:16.0 1166:0101 0000:0000 console
PCI device 1166:0101 (ServerWorks)
000:16.2 1166:0101 0000:0000 console
PCI device 1166:0101 (ServerWorks)
001:01.0 8086:1028 8086:34b1 vmkernel vmnic3
PCI device 8086:1028 (Intel Corporation)
001:02.0 8086:1028 8086:34b1 vmkernel vmnic0
PCI device 8086:1028 (Intel Corporation)
002:01.0 8086:107b 8086:34b1 vmkernel vmnic1
PCI device 8086:107b (Intel Corporation)
002:01.1 8086:107b 8086:34b1 vmkernel vmnic2
PCI device 8086:107b (Intel Corporation)
002:03.0 1077:2312 1014:027d vmkernel vmhba0
PCI device 1077:2312 (Q Logic)
002:03.1 1077:2312 1014:027d vmkernel vmhba1
PCI device 1077:2312 (Q Logic)




这个输出告诉您哪些设备被分配给 vmkernel,而哪些设备归控制台所有。写着 console 的条目被分配给了控制台 OS;其他所有的设备都被分配给了虚拟机。
您可以把左边一列的设备与 lspci 的输出相匹配。您也可以在 etc/vmware/hwconfig 文件中找到一些同样的信息。hwconfig 文件也会告诉您哪些设备是在控制台与虚拟机之间共享的。
知道机器中有哪些插件以及这些插件如何分配之后,您需要确保加载了正确的驱动程序。在 tmp/modules.*.txt 文件中,您可以看到控制台 OS 正在使用哪些驱动程序(参见清单 4)。使用 /sbin/lsmod 命令可以获得同样的输出结果。
清单 4. lsmod 的输出
1
2
3
4
5
6
7
8
9
10
11
12
# /sbin/lsmod
Module                  Size  Used by    Tainted: PF
vmxnet_console         13212   1
vmnixmod              177056   3  [vmxnet_console]
e1000                  68456   0  (unused)
usb-storage            20028   0
mousedev                3936   0  (unused)
keybdev                 1696   0  (unused)
hid                    17728   0  (unused)
input                   3488   0  [mousedev keybdev hid]
usb-ohci               17600   0  (unused)
usbcore                50112   1  [usb-storage hid usb-ohci]




在 /etc/modules.conf 文件中,可以找到加载在控制台 OS 中的模块的参数设置。
还需要确保也为虚拟机加载了正确的模块。该信息保存在 tmp/vmkmod.*.txt 文件中(参见清单 5)。用 /usr/sbin/vmkload 命令也可以找到该信息。
清单 5. vmkload_mod 的输出
1
2
3
4
5
6
7
# /usr/sbin/vmkload_mod -l
Name        R/O Addr    Length      R/W Addr    Length      ID Loaded
vmklinux    0x4de000    0xf000      0x12438f8   0x53000     1  Yes
nfshaper    0x4ed000    0x1000      0x129b160   0x1000      2  Yes
e1000       0x4ee000    0xf000      0x129c168   0x6000      3  Yes
qla2300_604 0x4fd000    0x19000     0x12fe008   0x22000     4  Yes
bond        0x516000    0x2000      0x1574b80   0x2000      5  Yes




要看到哪些选项被传递给虚拟机的模块,需要查看 tmp/vmkpcidivy.vmkmod.*.txt 文件(参见清单 6)。
清单 6. vmkpcidivy.vmkmod.*.txt 文件的内容
1
2
3
4
vmklinux linux
nfshaper.o nfshaper
e1000.o nic
qla2300_604.o fc qlloop_down_time=90 qlport_down_retry=10




基于所连接的存储类型的不同,可能需要不同的光纤存储参数。您需要确保已经设置了存储供应商所推荐的正确设置。
要看到给定模块的可用选项,可以再次使用 /usr/sbin/vmkload_mod命令(参见清单 7)。
清单 7. vmklost_mod 的输出结果
1
2
3
4
# vmkload_mod -s mptscsi
Using /usr/lib/vmware/vmkmod/mptscsi.o
mptscsih string
PortIo int, description "[0]=Use mmap, 1=Use port io"

返回列表