Featured image of post ESXi 虚拟机管理命令大全 ⚡

ESXi 虚拟机管理命令大全 ⚡

ESXi 虚拟机管理命令大全 ⚡ 🖥️ 掌握ESXi命令行管理,轻松掌控虚拟机生命周

ESXi 虚拟机管理命令大全 ⚡

ESXi 虚拟机管理

🖥️ 掌握ESXi命令行管理,轻松掌控虚拟机生命周期


目录 📚


🔍 一、虚拟机信息查询

📋 获取所有虚拟机列表

用途: 显示ESXi主机上所有虚拟机的详细信息

1
2
3
4
5
6
7
8
# 获取完整虚拟机列表
vim-cmd vmsvc/getallvms

# 格式化输出(更易读)
vim-cmd vmsvc/getallvms | awk '{printf "%-4s %-30s %-20s %-15s %-10s\n", $1, $2, $3, $4, $5}'

# 仅显示虚拟机ID和名称
vim-cmd vmsvc/getallvms | awk '{print $1 " " $2}' | grep -v "Vmid"

输出说明:

  • vmid: 虚拟机唯一标识符
  • name: 虚拟机名称
  • file: 配置文件路径
  • guest OS: 客户机操作系统
  • version: 虚拟机硬件版本

📝 查看虚拟机详细信息

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 查看特定虚拟机配置
vim-cmd vmsvc/get.config [vmid]

# 查看虚拟机运行时信息
vim-cmd vmsvc/get.summary [vmid]

# 查看虚拟机资源分配
vim-cmd vmsvc/get.resourceconfig [vmid]

# 查看虚拟机客户机信息(需要VMware Tools)
vim-cmd vmsvc/get.guest [vmid]

⚡ 二、电源管理操作

🔌 开启虚拟机

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 开启指定虚拟机
vim-cmd vmsvc/power.on [vmid]

# 示例:开启vmid为20的虚拟机
vim-cmd vmsvc/power.on 20

# 批量开启所有已关闭的虚拟机
for vmid in $(vim-cmd vmsvc/getallvms | awk '{if($1 != "Vmid" && $0 !~ /\[/){print $1}}'); do
    state=$(vim-cmd vmsvc/power.getstate $vmid | grep -o "Powered off")
    if [ "$state" = "Powered off" ]; then
        echo "Starting VM ID: $vmid"
        vim-cmd vmsvc/power.on $vmid
    fi
done

🔴 关闭虚拟机

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 正常关机(需要VMware Tools)
vim-cmd vmsvc/power.shutdown [vmid]

# 强制关机(立即断电)
vim-cmd vmsvc/power.off [vmid]

# 示例:正常关闭vmid为20的虚拟机
vim-cmd vmsvc/power.shutdown 20

# 强制关闭所有虚拟机(紧急情况使用)
for vmid in $(vim-cmd vmsvc/getallvms | awk '{if($1 != "Vmid") print $1}'); do
    echo "强制关闭虚拟机: $vmid"
    vim-cmd vmsvc/power.off $vmid
done

🔄 重启虚拟机

1
2
3
4
5
6
7
8
# 正常重启(需要VMware Tools)
vim-cmd vmsvc/power.reboot [vmid]

# 强制重启
vim-cmd vmsvc/power.reset [vmid]

# 示例:重启vmid为20的虚拟机
vim-cmd vmsvc/power.reboot 20

⏯️ 暂停与恢复

1
2
3
4
5
6
7
8
# 暂停虚拟机
vim-cmd vmsvc/power.suspend [vmid]

# 从暂停状态恢复
vim-cmd vmsvc/power.resume [vmid]

# 检查虚拟机是否支持暂停
vim-cmd vmsvc/get.capability [vmid] | grep suspend

📊 三、状态监控与诊断

🔍 获取虚拟机电源状态

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 查看虚拟机当前状态
vim-cmd vmsvc/power.getstate [vmid]

# 示例:查看vmid为20的虚拟机状态
vim-cmd vmsvc/power.getstate 20

# 批量检查所有虚拟机状态
for vmid in $(vim-cmd vmsvc/getallvms | awk '{if($1 != "Vmid") print $1}'); do
    echo -n "VM $vmid: "
    vim-cmd vmsvc/power.getstate $vmid | grep -o "Powered on\|Powered off\|Suspended"
done

# 可能的返回状态:
# - Powered on    🟢 已开机
# - Powered off   🔴 已关机
# - Suspended     ⏸️  已暂停

📈 列出当前运行的虚拟机

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 显示所有运行中的虚拟机
esxcli vm process list

# 详细格式显示
esxcli vm process list | grep -E "^(World|Process|Name|UUID)"

# 统计运行中的虚拟机数量
esxcli vm process list | grep "World ID" | wc -l

# 显示虚拟机资源使用情况
esxcli vm process list | awk '/Name:/ {name=$2} /CPU:/ {cpu=$2} /Mem:/ {mem=$2} /World ID:/ {print "VM:", name, "CPU:", cpu, "Memory:", mem}'

🖥️ 资源使用监控

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 查看CPU使用情况
esxtop

# 查看内存使用情况
esxcli hardware memory get

# 查看存储性能
esxcli storage core device stats get

# 查看网络统计信息
esxcli network nic stats get

# 查看虚拟机资源限制
esxcli vm process list | grep -E "(World ID|CPU|Memory)"

🔧 四、高级管理命令

🔄 虚拟机快照管理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 创建快照
vim-cmd vmsvc/snapshot.create [vmid] "Snapshot Name" "Description" includeMemory suppressPowerOff

# 列出快照
vim-cmd vmsvc/snapshot.get [vmid]

# 恢复到快照
vim-cmd vmsvc/snapshot.revert [vmid] snapshotId suppressPowerOff

# 删除快照
vim-cmd vmsvc/snapshot.remove [vmid] snapshotId

# 删除所有快照
vim-cmd vmsvc/snapshot.removeall [vmid]

# 示例:创建名为"Backup"的快照
vim-cmd vmsvc/snapshot.create 123 "Backup" "Pre-update snapshot" 0 0

📁 文件操作

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 查看虚拟机文件
ls -la /vmfs/volumes/

# 查找特定虚拟机文件
find /vmfs/volumes -name "*.vmx" | grep [vm-name]

# 检查虚拟机磁盘文件
vmkfstools -i [source.vmdk] [destination.vmdk]

# 扩展虚拟磁盘
vmkfstools -X [new-size]G [disk.vmdk]

# 克隆虚拟机磁盘
vmkfstools -i source.vmdk destination.vmdk -d thin

# 检查磁盘一致性
vmkfstools -e [disk.vmdk]

🌐 网络管理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 查看虚拟交换机
esxcli network vswitch standard list

# 查看端口组
esxcli network vswitch standard portgroup list

# 查看虚拟机网络适配器
esxcli network vm list

# 查看网络统计信息
esxcli network nic stats get

# 查看VMkernel网络接口
esxcli network ip interface list

# 配置虚拟机网络
esxcli network vm portgroup set -p "Portgroup Name" -v [vmid]

🛠️ 五、配置与维护

⚙️ ESXi主机配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# 查看主机信息
esxcli system version get

# 查看主机时间
esxcli system time get

# 查看主机状态
esxcli system status get

# 查看主机硬件信息
esxcli hardware platform get

# 查看CPU信息
esxcli hardware cpu list

# 查看内存信息
esxcli hardware memory get

# 查看PCI设备
esxcli hardware pci list

🔧 服务管理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 列出所有服务
esxcli system service list

# 启动服务
esxcli system service start --service=[service-name]

# 停止服务
esxcli system service stop --service=[service-name]

# 重启管理代理(常用故障排除)
/etc/init.d/hostd restart
/etc/init.d/vpxa restart

# 查看服务状态
esxcli system service status --service=[service-name]

# 设置服务开机自启
esxcli system service set --service=[service-name] --enabled=true

💾 存储管理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 查看存储适配器
esxcli storage core adapter list

# 查看存储设备
esxcli storage core device list

# 查看数据存储
esxcli storage filesystem list

# 查看NFS存储
esxcli storage nfs list

# 查看VMFS数据存储
esxcli storage vmfs extent list

# 重新扫描存储适配器
esxcli storage core adapter rescan --adapter=[adapter-name]

⚠️ 六、注意事项

🔴 重要警告

  1. 权限要求: 需要SSH登录ESXi主机并具有管理员权限

    1
    2
    3
    4
    5
    
    # 启用ESXi SSH(临时)
    esxcli system ssh set --enabled=true
    
    # 设置SSH开机自启
    esxcli system ssh set --enabled=true --start-auto=true
    
  2. 操作风险: 强制关机可能导致数据丢失

    1
    2
    3
    4
    5
    6
    7
    8
    
    # 优先使用正常关机
    vim-cmd vmsvc/power.shutdown [vmid]
    
    # 仅在必要时使用强制关机
    vim-cmd vmsvc/power.off [vmid]
    
    # 检查虚拟机是否有未保存数据
    vim-cmd vmsvc/get.summary [vmid] | grep -E "(guestHeartbeatStatus|guestState)"
    
  3. 备份重要: 关键操作前建议创建快照

    1
    2
    3
    4
    5
    
    # 创建保护性快照
    vim-cmd vmsvc/snapshot.create [vmid] "Pre-Maintenance" "Snapshot before maintenance" 0 0
    
    # 设置快照保留策略
    vim-cmd vmsvc/snapshot.setoption [vmid] 90 7
    

✅ 最佳实践

  1. 记录操作: 记录所有命令行操作

    1
    2
    3
    
    # 启用ESXi Shell命令历史记录
    export HISTFILE=~/.esh_history
    export HISTSIZE=1000
    
  2. 测试环境: 在生产环境操作前先在测试环境验证

    1
    2
    
    # 创建测试虚拟机克隆
    vim-cmd vmsvc/clone [vmid] [new-vmid] [new-name]
    
  3. 维护窗口: 在业务低峰期执行维护操作

    1
    2
    
    # 检查当前负载
    esxcli system stats load get
    
  4. 监控验证: 操作后验证虚拟机状态

    1
    2
    3
    
    # 操作后验证
    vim-cmd vmsvc/power.getstate [vmid]
    esxcli vm process list | grep [vmid]
    

💡 七、实用技巧

🎯 快速查找虚拟机ID

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 根据虚拟机名称查找vmid
vim-cmd vmsvc/getallvms | grep -i "[vm-name]"

# 创建查找函数(添加到~/.profile)
findvm() {
    vim-cmd vmsvc/getallvms | grep -i "$1"
}

# 根据IP地址查找虚拟机
findvmbyip() {
    for vmid in $(vim-cmd vmsvc/getallvms | awk '{if($1 != "Vmid") print $1}'); do
        ip=$(vim-cmd vmsvc/get.guest $vmid | grep ipAddress | sed -n '1p' | cut -d '"' -f 2)
        if [ "$ip" = "$1" ]; then
            echo "VMID: $vmid"
            vim-cmd vmsvc/get.summary $vmid | grep "name"
        fi
    done
}

📊 资源使用报告

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 生成虚拟机资源报告
echo "VM Resource Usage Report - $(date)"
echo "==================================="
vim-cmd vmsvc/getallvms | awk 'NR>1 {print $1}' | while read vmid; do
    echo "VMID: $vmid"
    vim-cmd vmsvc/get.summary $vmid | grep -E "(memory|cpu|powerState)"
    echo "---"
done

# 导出为CSV格式
echo "VMID,Name,PowerState,CPU,Memory" > vm_report.csv
vim-cmd vmsvc/getallvms | awk 'NR>1 {print $1}' | while read vmid; do
    name=$(vim-cmd vmsvc/get.summary $vmid | grep "name" | cut -d '"' -f 2)
    power=$(vim-cmd vmsvc/power.getstate $vmid | grep -o "Powered on\|Powered off\|Suspended")
    cpu=$(vim-cmd vmsvc/get.summary $vmid | grep "cpu" | cut -d '"' -f 2)
    memory=$(vim-cmd vmsvc/get.summary $vmid | grep "memory" | cut -d '"' -f 2)
    echo "$vmid,$name,$power,$cpu,$memory" >> vm_report.csv
done

🎯 八、批量操作脚本

🔄 批量电源管理

 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
#!/bin/bash
# 批量启动所有已关闭的虚拟机
echo "Starting all powered-off VMs..."
for vmid in $(vim-cmd vmsvc/getallvms | awk '{if($1 != "Vmid" && $0 !~ /\[/){print $1}}'); do
    state=$(vim-cmd vmsvc/power.getstate $vmid | grep -o "Powered off")
    if [ "$state" = "Powered off" ]; then
        echo "Starting VM ID: $vmid"
        vim-cmd vmsvc/power.on $vmid
        sleep 2
    fi
done
echo "Done."

#!/bin/bash
# 批量正常关闭所有虚拟机
echo "Shutting down all VMs gracefully..."
for vmid in $(vim-cmd vmsvc/getallvms | awk '{if($1 != "Vmid") print $1}'); do
    state=$(vim-cmd vmsvc/power.getstate $vmid | grep -o "Powered on")
    if [ "$state" = "Powered on" ]; then
        echo "Shutting down VM ID: $vmid"
        vim-cmd vmsvc/power.shutdown $vmid
        sleep 5
    fi
done
echo "Done."

📸 批量快照管理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash
# 为所有运行中的虚拟机创建快照
SNAPSHOT_NAME="Pre-Maintenance-$(date +%Y%m%d)"
echo "Creating snapshot '$SNAPSHOT_NAME' for all running VMs..."
for vmid in $(vim-cmd vmsvc/getallvms | awk '{if($1 != "Vmid") print $1}'); do
    state=$(vim-cmd vmsvc/power.getstate $vmid | grep -o "Powered on")
    if [ "$state" = "Powered on" ]; then
        echo "Creating snapshot for VM ID: $vmid"
        vim-cmd vmsvc/snapshot.create $vmid "$SNAPSHOT_NAME" "Automated snapshot before maintenance" 0 0
        sleep 1
    fi
done
echo "Done."

#!/bin/bash
# 删除所有虚拟机的所有快照
echo "Removing all snapshots from all VMs..."
for vmid in $(vim-cmd vmsvc/getallvms | awk '{if($1 != "Vmid") print $1}'); do
    echo "Removing snapshots from VM ID: $vmid"
    vim-cmd vmsvc/snapshot.removeall $vmid
    sleep 1
done
echo "Done."

🚀 九、性能优化

⚡ 性能监控命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 查看CPU就绪时间
esxcli perf metric get --metric-id=cpu.ready.summation

# 查看内存交换
esxcli perf metric get --metric-id=mem.swapped.summation

# 查看存储延迟
esxcli perf metric get --metric-id=disk.totalLatency.average

# 查看网络丢包率
esxcli perf metric get --metric-id=net.droppedRx.summation

# 查看内存 ballooning
esxcli perf metric get --metric-id=mem.vmmemctl.average

🛠️ 性能优化技巧

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 调整虚拟机内存分配
vim-cmd vmsvc/reconfigure [vmid] mem=[new-memory-size]

# 调整虚拟机CPU数量
vim-cmd vmsvc/reconfigure [vmid] numCPUs=[new-cpu-count]

# 启用CPU热添加
vim-cmd vmsvc/reconfigure [vmid] cpuHotAddEnabled=true

# 启用内存热添加
vim-cmd vmsvc/reconfigure [vmid] memoryHotAddEnabled=true

# 调整虚拟机资源份额
vim-cmd vmsvc/reconfigure [vmid] cpuShares=[shares] memShares=[shares]

📈 资源使用分析

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 分析CPU使用情况
esxcli system stats load get

# 分析内存使用情况
esxcli system stats memory get

# 分析存储性能
esxcli storage core device stats get

# 分析网络性能
esxcli network nic stats get

# 生成性能报告
esxcli system stats list | grep -E "(cpu|mem|net|disk)"

💡 专业提示: 在使用ESXi命令行管理虚拟机时,建议先使用 vim-cmd vmsvc/getallvms 确认正确的虚拟机ID,然后再执行电源操作。对于生产环境的重要虚拟机,务必在操作前创建快照备份。

最后更新于 2025-09-28