三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

ESXi维护模式失败排查:虚拟机迁移与存储空间管理实战

ESXi维护模式失败排查:虚拟机迁移与存储空间管理实战

1. 项目概述:当ESXi宿主机“罢工”时,虚拟机为何原地不动?

在虚拟化运维的日常里,把一台ESXi宿主机置入维护模式,就像给一台正在运转的机器做计划性停机检修。标准流程下,vSphere会通过vMotion自动将这台主机上的虚拟机(VM)迁移到集群内的其他健康主机上,实现业务零中断。但很多运维兄弟都踩过同一个坑:点击“进入维护模式”后,进度条卡住,系统提示无法迁移虚拟机,或者虚拟机干脆纹丝不动,导致维护窗口无法开启。这不仅仅是界面上的一个红色警告,它背后往往指向了存储配置、资源预留或集群策略的深层次问题。如果强行关机,就意味着业务中断,这在生产环境是绝对要避免的。

更棘手的是,有时为了给宿主机本地或共享存储腾出空间,我们需要清理文件,却发现根本分不清哪个数据存储(Datastore)对应物理上的哪块盘或哪个LUN,也不敢贸然删除。本次分享,我就结合多次实战踩坑和填坑的经验,系统梳理一下当ESXi宿主机进入维护模式失败时,如何一步步排查并解决问题,同时教会你如何清晰辨别宿主机本地存储和共享存储池,以及安全清理存储空间的方法。这些操作不是孤立的,它们环环相扣,是保障vSphere集群高可用性和可维护性的基本功。

2. 核心问题根因分析与排查思路

当宿主机无法进入维护模式,虚拟机迁移失败时,我们不能只盯着那个错误提示看。必须像侦探一样,从vSphere架构的几个关键层面进行系统性排查。根本原因通常逃不出下面这几个范畴。

2.1 存储关联性锁定:虚拟机被“钉”在了原地

这是最常见的原因之一。虚拟机的配置文件(.vmx)和虚拟磁盘文件(.vmdk)都存放在数据存储中。如果整个集群里,只有你试图进入维护模式的这台宿主机,连接了虚拟机所在的那个特定的数据存储,那么vMotion就无能为力了。

  • 为什么无法迁移?vMotion(无论是计算资源的vMotion还是存储vMotion)都需要源主机和目标主机都能访问到虚拟机的存储文件。如果目标主机根本看不到这个存储,迁移自然无从谈起。这常见于以下几种情况:

    1. 使用了宿主机本地存储:在安装ESXi时,如果顺手把虚拟机存在了本地硬盘上(例如,在快速测试或小型环境中),那么这个数据存储就只有这一台主机能访问。
    2. 共享存储配置错误或单点故障:虽然使用了SAN(如iSCSI、FCP)或NAS(如NFS)作为共享存储,但可能由于网络分区、HBA卡驱动问题、存储阵列的多路径配置错误,导致集群中其他主机暂时或永久地丢失了对该LUN或NFS共享的访问权限。此时,从vCenter视角看,只有当前主机能看到这个存储。
    3. 存储DRS(SDRS)未启用或配置不当:如果存储池配置了SDRS,但处于手动模式或空间严重不均衡,也可能影响自动化迁移决策。
  • 如何排查?

    1. 在vSphere Client中,浏览到有问题的虚拟机,查看其“摘要”选项卡,确认“存储”一栏显示的数据存储名称。
    2. 右键点击该数据存储,选择“所有vCenter操作” -> “浏览文件”,确认虚拟机文件确实位于此。
    3. 在vCenter的“存储”视图中,找到这个数据存储,查看“主机”选项卡。这里会列出所有挂载了该数据存储的ESXi主机。如果列表里只有你操作的那一台主机,那么存储关联性问题就坐实了。

2.2 资源不足:目标主机“接不住”

即使存储是共享的,迁移也可能因为目标主机资源不足而失败。vSphere HA/DRS集群并不是无限资源的魔法盒。

  • 计算资源(CPU/内存)不足:目标主机可能没有足够的空闲CPU周期或物理内存来容纳迁入的虚拟机。特别是当虚拟机配置了较大的内存预留(Memory Reservation)时,目标主机必须有对应的、未分配的物理内存来满足这个预留,否则迁移会被阻止。

  • 网络资源瓶颈:vMotion需要专用的千兆甚至万兆网络。如果vMotion网络带宽不足、配置错误(如MTU不一致导致巨型帧问题)、或者发生拥塞,迁移过程可能会超时失败。

  • 许可证限制:某些高级vMotion功能(如跨vCenter vMotion、长距离vMotion)需要企业版Plus许可证。如果许可证不支持,相应的迁移操作会被禁止。

  • 如何排查?

    1. 检查目标主机的“性能”选项卡,观察CPU和内存的使用率。确保有足够的余量。
    2. 检查虚拟机的内存设置。如果设置了100%的内存预留,迁移时对目标主机的空闲内存要求会非常苛刻。
    3. 在集群设置中,检查DRS的自动化级别和迁移阈值。过于保守的设置可能不会触发自动迁移。
    4. 使用ESXi命令行(SSH或DCUI)在源和目标主机上执行esxtop,查看网络接口(按n键)的吞吐量,排查vMotion网络是否健康。

2.3 虚拟机自身状态与配置枷锁

虚拟机本身的某些特性和状态也会阻止迁移。

  • 连接的设备:虚拟机如果连接了仅存在于源主机上的设备,如CD/DVD驱动器映射了宿主机的本地ISO文件、连接了物理USB设备、或者配置了PCI直通(Passthrough)设备,那么它就无法迁移。因为这些设备无法被目标主机识别和接管。

  • 快照与后台任务:虚拟机正在创建、合并或删除快照时,其磁盘文件处于锁定状态,此时无法迁移。同样,进行存储复制、备份等后台操作时也可能导致锁定。

  • 虚拟机兼容性问题:虚拟机的硬件版本可能过高,超过了目标主机ESXi版本的支持范围。

  • 如何排查?

    1. 检查虚拟机的“设置”,重点关注CD/DVD驱动器、软驱、USB控制器等是否连接了主机设备。
    2. 查看虚拟机的“任务与事件”,确认是否有正在进行的快照或备份任务。
    3. 比较源主机和目标主机的ESXi版本,以及虚拟机的硬件版本。

注意:排查时应遵循从易到难、从外到内的原则。首先通过vSphere Client的UI界面检查明显的告警和配置,然后逐步深入到命令行和日志分析。每次操作前,尤其是在生产环境,务必在变更窗口进行,并做好备份和回退方案。

3. 实战解决方案:一步步让宿主机进入维护模式

定位到问题根因后,我们就可以“对症下药”了。下面是一套从标准操作到强制手段的递进式解决方案。

3.1 标准迁移流程与手动干预

首先,尝试最规范的方式。

  1. 确保前提条件:确认vSphere HA和DRS功能已在集群中启用并正确配置。共享存储可被集群内所有主机访问。vMotion网络互通且带宽充足。
  2. 发起进入维护模式:在vSphere Client中,右键点击目标宿主机,选择“进入维护模式”。此时,vCenter会尝试自动迁移所有虚拟机。
  3. 处理迁移错误:如果迁移某个虚拟机失败,vCenter会弹出具体错误信息。根据错误信息(如“目标资源不足”、“存储不可访问”),参照上一章的排查方法定位问题。
    • 如果是存储关联性问题:对于存放在本地存储的虚拟机,唯一的办法是使用“冷迁移”或“存储vMotion”将其先迁移到共享存储上。右键点击虚拟机 -> 迁移 -> 选择“更改存储”,将其移动到集群共享的数据存储中。完成后再对宿主机进行操作。
    • 如果是资源不足:可以尝试手动将部分其他虚拟机迁移到其他主机,为目标主机腾出资源;或者临时调整虚拟机的资源预留(特别是内存预留),降低迁移门槛。
    • 如果是设备冲突:断开虚拟机连接的宿主CD/DVD驱动器、USB设备等。对于PCI直通设备,通常需要关闭虚拟机,移除直通配置,迁移后再重新添加。

3.2 应对“顽固”虚拟机的强制措施

当标准流程走不通,或者时间紧迫时,可以考虑以下强制措施。这些操作具有中断业务的风险,务必谨慎评估。

  1. 关闭虚拟机电源:如果虚拟机承载的业务允许短暂中断,这是最直接的方法。右键点击虚拟机 -> 电源 -> 关闭客户机(需安装VMware Tools)或直接关闭电源。虚拟机电源关闭后,它就不再占用计算资源,宿主机通常可以顺利进入维护模式。维护完成后,再在其他主机上启动虚拟机。
  2. 使用“强制进入维护模式”:在右键点击宿主机的菜单中,存在一个“进入维护模式…”的选项,点击后弹出的对话框底部,有一个“将关闭电源的虚拟机移动到其他主机(如果可能)”的复选框。不要勾选这个。然后,下方会出现一个“强制进入维护模式”的按钮(或复选框)。
    • 作用:这个选项会忽略所有迁移错误,直接让宿主机进入维护模式。但所有运行中的虚拟机将被强制关闭电源,就像拔掉电源一样(Hard Shutdown)。这是最后的手段。
    • 风险:未保存的数据会丢失,可能对操作系统和应用程序造成损害。绝对不要对运行数据库、交易系统等关键业务的虚拟机使用此方法,除非已做好完全备份和业务中断准备。
  3. 通过命令行操作:对于无法通过UI连接的情况(如vCenter Server故障),可以通过SSH连接到ESXi主机执行命令。
    • 查看主机当前模式:vim-cmd /hostsvc/hostsummary | grep inMaintenanceMode
    • 强制进入维护模式:vim-cmd /hostsvc/maintenance_mode_enter
    • 退出维护模式:vim-cmd /hostsvc/maintenance_mode_exit
    • 使用命令行同样需要面对虚拟机迁移问题,其本质与UI操作一致。

3.3 事后补救与集群配置优化

问题解决后,更重要的是复盘和优化,避免下次再踩坑。

  1. 存储策略标准化:制定并强制执行虚拟机存储策略:所有生产虚拟机必须放置在共享存储(SAN/NFS)上,杜绝使用本地存储。可以利用vSphere的存储策略(Storage Policy)来自动化执行此规则。
  2. 合理配置资源预留:评估虚拟机的真实内存需求,避免设置过高的内存预留(如100%)。除非有极端性能要求,否则通常可以设置为0,让ESXi的内存管理技术(如透明页共享、气球驱动、内存压缩)更高效地工作。
  3. 规范设备连接:建立操作规范,要求运维人员在非必要时断开虚拟机的宿主设备连接。对于必须使用USB或CD-ROM的场景,考虑使用虚拟化方案(如将ISO上传至数据存储)替代物理连接。
  4. 启用并调优DRS:确保集群DRS已启用,并设置为“全自动”或根据业务敏感度调整迁移阈值。定期检查集群的资源均衡情况。

4. 存储空间管理:辨别、查看与安全清理

存储空间不足是另一个导致运维动作失败的常见原因,无论是vMotion需要临时空间,还是虚拟机快照增长。管理存储的第一步是清楚地知道“你在操作的是什么”。

4.1 清晰辨别宿主机本地存储与共享存储池

在vSphere Client中,所有存储都以“数据存储”的形式呈现。如何区分它们?

  1. 通过vSphere Client界面辨别

    • 导航到“存储”视图。
    • 查看数据存储的“类型”列。通常显示为“VMFS”(一种块存储文件系统)或“NFS”(网络文件系统)。
    • 本地存储:通常是VMFS类型,并且在“路径”或“设备”信息中,可以看见类似t10.ATA_____...(本地SATA/SAS磁盘)或naa.600508b1001c...(本地RAID卡虚拟磁盘)的标识。关键点是,在数据存储的“主机”选项卡下,只有一台ESXi主机挂载了它。
    • 共享存储池:可能是VMFS(连接在SAN上)或NFS。在“设备”信息中,对于SAN存储,你会看到存储阵列提供的LUN标识(如naa.600a098038303...)。对于NFS,则显示服务器IP和共享路径。在“主机”选项卡下,会有多台ESXi主机同时挂载此数据存储。
  2. 通过ESXi Shell命令行精确查看: SSH登录到ESXi主机,使用以下命令可以获得更底层的信息。

    • 列出所有存储设备esxcli storage core device list这个命令会输出一长串设备列表,包括本地磁盘和SAN LUN。关注Is Local: true/false这一行,true代表是本地设备。
    • 列出所有数据存储及其详细信息esxcli storage filesystem list这里可以看到每个数据存储对应的设备(Mounted on列下面显示了挂载点,但更准确的信息需要结合上一个命令)。
    • 最实用的方法:结合使用。先esxcli storage core device list | grep -A5 -B5 “Is Local:”筛选出本地设备,记下其设备标识(如naa.xxx)。然后esxcli storage filesystem list查看每个数据存储对应的底层设备(DevNode列),对比一下,就能知道哪个数据存储建在哪个物理设备上了。

4.2 安全清理ESXi存储空间的步骤与禁忌

清理空间是为了释放容量,但绝不能误删正在使用的虚拟机文件。以下是安全操作指南。

  1. 空间分析:找到“元凶”

    • 在vSphere Client中,浏览数据存储,按“大小”排序,一眼就能看到占用空间最大的虚拟机文件夹。
    • 进入虚拟机文件夹,最大的文件通常是虚拟磁盘(.vmdk)和快照增量磁盘(-delta.vmdk-sesparse.vmdk)。快照文件是空间增长的常见原因。
    • 使用ESXi Shell的du -h命令可以深入分析文件夹大小。例如:cd /vmfs/volumes/your_datastore_name/ && du -h –max-depth=2 | sort -hr可以快速找出占用空间最大的顶层目录。
  2. 安全清理操作

    • 删除过期快照:这是最安全、最有效的释放空间方式。在vSphere Client中,右键点击虚拟机 -> 快照 -> 快照管理器。永远不要直接在数据存储浏览器中删除快照文件(-delta.vmdk),这会导致虚拟机损坏。必须通过快照管理器进行“删除”或“全部整合”操作。整合操作可能会在后台进行,需要时间。
    • 清理孤儿文件:有时虚拟机被删除后,可能会残留一些磁盘文件。在确认这些文件确实不再被任何虚拟机引用后(可以通过在数据中心级别搜索文件名来确认),可以在数据存储浏览器中安全删除。操作前务必做好备份或确认
    • 使用vmkfstools清理稀疏磁盘:对于精简配置(Thin Provisioned)的磁盘,删除文件后,ESXi不会自动回收物理空间。可以使用命令手动尝试回收:vmkfstools -K /vmfs/volumes/datastore/vm_folder/disk.vmdk。但请注意,此操作需要虚拟机电源已关闭,且底层存储支持(如某些高级SAN功能)。
    • 卸载并重新挂载数据存储:对于某些因元数据缓存导致空间显示不准确的问题,可以尝试将数据存储从所有主机卸载(确保没有虚拟机在运行),再重新挂载。此操作风险极高,需在严格规划的中断窗口进行。
  3. 绝对禁忌

    • 禁止直接删除正在运行的虚拟机的.vmdk.vmx.vmsd.nvram等核心文件。
    • 禁止在虚拟机运行时,手动删除或移动快照文件(-delta.vmdk)。
    • 禁止在未明确文件归属和用途的情况下,删除数据存储根目录或lost+found文件夹下的不明文件。
    • 清理共享存储前,务必通过vCenter在集群层面确认所有主机都已正确识别存储的最新状态,避免在存储阵列层面直接操作导致的数据不一致。

5. 高级场景与深度故障排查

当常规手段都失效,或者遇到更复杂的情况时,我们需要更深入的排查工具和方法。

5.1 深入日志分析定位迁移失败根源

vSphere的日志是宝藏。当迁移失败时,不要只看UI的错误提示,要去挖日志。

  1. 关键日志文件
    • vCenter Server 日志:位于vCenter Server Appliance的/var/log/vmware/vpxd目录下。vpxd.log记录了vCenter的所有操作,搜索虚拟机和主机的名称,以及错误代码。
    • ESXi 主机日志:通过SSH连接到ESXi主机,日志位于/var/log
      • vmkernel.log:核心日志,记录vMotion、存储操作等核心事件。搜索 “vMotion”、“DRS”、“Migrate” 等关键词。
      • hostd.log:主机管理服务日志,记录与vCenter的通信及任务执行情况。
  2. 日志分析技巧:使用greptail -f等命令。例如,在ESXi上实时跟踪vMotion相关日志:tail -f /var/log/vmkernel.log | grep -i vMotion。查找错误代码(如FAILED: xxx)并复制到VMware官方知识库(KB)搜索,通常能找到具体的解决方案。

5.2 网络与存储多路径配置核查

迁移,尤其是存储vMotion,极度依赖网络和存储路径的稳定性。

  1. vMotion网络
    • 物理检查:确认源和目标主机的vMotion网卡指示灯正常,网线连接正确。
    • 网络配置:在每台主机的“配置”->“网络”中,检查vMotion使用的VMkernel端口组。确保IP地址在同一子网,且网关、MTU(如果使用了巨型帧)设置一致。使用vmkping命令测试主机间vMotion网络的连通性和大包传输:vmkping -d -s 8972 目标主机vMotion IP(-s 8972 测试9000字节MTU)。
  2. 存储多路径
    • 在ESXi主机的“配置”->“存储”->“设备”中,选择对应的存储设备,查看“路径”选项卡。健康的SAN环境应该显示多条“活动”(Active)或“未使用”(Unused)的路径。如果所有路径都是“禁用”(Dead)或“不活动”(Inactive),说明存储网络有问题。
    • 使用命令esxcli storage nmp device list查看设备的多路径策略。常用的策略有MRU(最近使用)和RR(轮询)。配置不当可能导致路径切换失败。

5.3 资源池、DRS规则与亲和性/反亲和性规则冲突

vSphere集群的高级功能如果配置不当,会成为隐形的“路障”。

  1. 资源池(Resource Pool):如果虚拟机被放置在某个资源池中,而该资源池的“资源分配”设置了严格的CPU或内存限制,可能会限制迁移的灵活性。检查虚拟机所在资源池的配置。
  2. DRS规则
    • 虚拟机-主机亲和性规则:例如,“虚拟机A必须在主机组X上运行”。如果你试图将主机组X中的一台主机进入维护模式,而规则禁止虚拟机A离开该组,迁移就会失败。
    • 虚拟机-虚拟机反亲和性规则:例如,“虚拟机B和虚拟机C不能在同一台主机上运行”。如果目标主机上已经运行了虚拟机C,那么虚拟机B就无法迁入。
    • 排查方法:在集群的“配置”->“VM/Host规则”中,仔细检查所有已启用的规则。临时禁用有冲突的规则(在变更窗口进行),完成维护后再启用。

5.4 第三方备份或安全软件干扰

企业环境中常部署有第三方备份代理(如Veeam、Commvault的传输器)或安全防护软件。这些软件可能会在虚拟机内部或外部锁定磁盘文件,以防止数据在备份或扫描期间被更改,这同样会阻止vMotion。

  • 排查:检查迁移失败的时间点,是否与备份任务窗口重合。查看备份软件的作业日志。
  • 解决:调整备份策略,避免在计划维护时段进行备份。或与备份管理员协调,在维护前暂停相关备份作业。

处理ESXi维护模式迁移失败的问题,是一个综合性的排错过程,它考验的是对vSphere整体架构的理解。从存储、网络、计算资源到集群策略,任何一个环节的疏漏都可能导致操作失败。养成规范的操作习惯(如使用共享存储、合理设置资源)、建立清晰的资源台账(知道每份存储在哪里)、以及掌握日志分析和命令行工具,是成为一名成熟的虚拟化运维工程师的必经之路。每次解决一个这样的问题,都是对系统理解的一次深化。最后记住,在生产环境操作前,如果条件允许,在测试环境复现和验证你的解决方案,永远是成本最低、最保险的选择。

← 返回列表