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}' 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] 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] 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 vim-cmd vmsvc/power.shutdown [vmid] vim-cmd vmsvc/power.off [vmid] 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 vim-cmd vmsvc/power.reboot [vmid] vim-cmd vmsvc/power.reset [vmid] 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] 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
📈 列出当前运行的虚拟机 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 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] 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 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 esxcli hardware cpu list esxcli hardware memory get 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 esxcli storage nfs list esxcli storage vmfs extent list esxcli storage core adapter rescan --adapter=[adapter-name]
⚠️ 六、注意事项 🔴 重要警告
权限要求 : 需要SSH登录ESXi主机并具有管理员权限
1 2 3 4 5 esxcli system ssh set --enabled=true esxcli system ssh set --enabled=true --start-auto=true
操作风险 : 强制关机可能导致数据丢失
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)"
备份重要 : 关键操作前建议创建快照
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 2 3 export HISTFILE=~/.esh_historyexport HISTSIZE=1000
测试环境 : 在生产环境操作前先在测试环境验证
1 2 vim-cmd vmsvc/clone [vmid] [new-vmid] [new-name]
维护窗口 : 在业务低峰期执行维护操作
1 2 esxcli system stats load get
监控验证 : 操作后验证虚拟机状态
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 vim-cmd vmsvc/getallvms | grep -i "[vm-name]" findvm () { vim-cmd vmsvc/getallvms | grep -i "$1 " } 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 echo "VMID,Name,PowerState,CPU,Memory" > vm_report.csvvim-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." 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." 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 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 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] vim-cmd vmsvc/reconfigure [vmid] numCPUs=[new-cpu-count] 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 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,然后再执行电源操作。对于生产环境的重要虚拟机,务必在操作前创建快照备份。