记录一下,今天早上遇到一个关于存储管理的严重问题——在 ESXi 主机上取消挂载、分离和取消掩码存储设备后,执行重新扫描操作时,任务无法完成并最终超时。查了一下 VMware KB 429293,原来这是由于 hostd 进程在等待内核响应时发生死锁导致的。在这里分享先:
故障现象还原
1. 重新扫描任务超时
在 vSphere Client 中执行存储重新扫描操作时,任务会在 30 分钟后显示为“超时”状态。
2. 主机日志信息
在 /var/log/hostd.log 文件中,会看到任务创建的日志,但没有任务完成的日志:
YYYY-MM-DDThh:mm:ss.xxxZ In(166) Hostd[2099685]: [Originator@6876 sub=Vimsvc.TaskManager opID=2d87b187-85-3732 sid=52d20413 user=vpxuser:VSPHERE.LOCAL\Administrator] Task Created : haTask-ha-host-vim.host.StorageSystem.rescanAllHba-168675585
核心原因分析
根据 KB 429293 的解释,问题的根本原因是:
hostd 进程死锁
当执行存储设备查询时,hostd 进程会等待内核响应。如果内核在处理该查询时出现问题,hostd 进程会进入死锁状态,导致任务无法完成或终止。
解决方法
1. 避免死锁的操作顺序
# 建议的操作顺序
1. 重新扫描存储(在取消掩码前)
2. 分离存储设备
3. 取消掩码
4. 再次重新扫描存储
# 如果不按此顺序,可能会导致死锁
2. 重启 ESXi 主机(彻底解决)
# 彻底解决死锁问题,需要重启 ESXi 主机
# 在 vSphere Client 中:
# 导航到 ESXi 主机 > 右键点击 > 选择“重启”
# 或者使用 ESXi Shell 命令:
reboot
3. 尝试重启管理代理(临时解决方案)
# 尝试重启管理代理(可能部分解决问题,但可能失败)
# 在 ESXi Shell 中:
/etc/init.d/hostd restart
/etc/init.d/vpxa restart
# 或者使用
service-control --stop --all
service-control --start --all
操作步骤
1. 备份与准备
# 拍摄 ESXi 主机的快照(如果是 vCenter 管理的主机)
Get-VMHost -Name | Get-VM | New-Snapshot -Name "Before_Storage_Rescan_Fix" -Description "Backup before storage rescan fix"
2. 检查当前系统状态
# 检查存储设备状态
esxcli storage core device list
# 检查任务状态
esxcli system task list
# 检查 hostd 进程状态
ps | grep hostd
3. 分离存储设备
# 列出所有存储设备
esxcli storage core device list
# 分离特定的存储设备
esxcli storage core device set -d -s false
4. 取消掩码存储设备
# 列出当前的存储掩码
esxcli storage core claimrule list
# 删除对应的存储掩码规则
esxcli storage core claimrule remove -r
# 更新存储系统
esxcli storage core claimrule load
esxcli storage core claimrule run
5. 重新扫描存储
# 执行存储重新扫描
esxcli storage core adapter rescan --all
预防措施
1. 按照正确的操作顺序
# 执行存储操作时,遵循正确的顺序:
# 重新扫描 → 分离 → 取消掩码 → 重新扫描
2. 监控存储操作
# 在执行存储操作时,监控任务状态
Get-Task | Where-Object {$_.State -eq "Running"}
# 监控系统资源使用情况
esxcli system process list | Sort-Object -Property CPUPercent -Descending
3. 定期维护存储系统
# 定期检查存储系统的健康状态
esxcli storage core device list | Select-Object Device, Size, Vendor, Model, Status
# 检查存储适配器状态
esxcli storage core adapter list
故障排查
1. 任务无法取消
# 如果重新扫描任务无法取消
# 使用 ESXi Shell 列出并终止任务
esxcli system task list
esxcli system task cancel -t
2. 管理代理无法启动
# 如果管理代理无法启动
# 检查系统资源
top | head -20
# 检查日志文件
tail -f /var/log/hostd.log
tail -f /var/log/vmkernel.log
记住,存储管理操作直接影响到虚拟机的可用性和数据安全,因此在执行此类操作时需要格外谨慎。如果遇到无法解决的问题,及时联系 VMware 支持寻求帮助。
Reference: VMware KB 429293







