本文目录导读:

在Shell脚本中调整虚拟机资源配置,通常是通过修改虚拟机管理工具(如KVM/libvirt、VirtualBox、VMware等)的配置文件或使用命令行工具实现。
以下是几种主流虚拟化环境下的Shell脚本调整方法:
针对 KVM/QEMU + libvirt(最常用)
使用 virsh 命令行工具。
调整CPU核心数和内存
#!/bin/bash VM_NAME="your-vm-name" # 关闭虚拟机(必须) virsh shutdown $VM_NAME # 等待虚拟机完全关闭 sleep 5 # 设置CPU核心数为4 virsh setvcpus $VM_NAME 4 --maximum 4 --config virsh setvcpus $VM_NAME 4 --config # 设置内存为4096MB (4GB) virsh setmem $VM_NAME 4096MB --config virsh setmaxmem $VM_NAME 4096MB --config # 启动虚拟机 virsh start $VM_NAME
调整磁盘大小
#!/bin/bash VM_NAME="your-vm-name" DISK_PATH="/var/lib/libvirt/images/your-vm.qcow2" # 关闭虚拟机 virsh shutdown $VM_NAME sleep 5 # 扩展磁盘空间(增加20GB) qemu-img resize $DISK_PATH +20G # 启动虚拟机 virsh start $VM_NAME # 注意:操作系统内部还需要用 fdisk/resize2fs 扩展分区
针对虚拟机中运行的Docker容器
如果是在虚拟机内部调整Docker容器的资源限制:
#!/bin/bash CONTAINER_NAME="my-container" # 更新运行中容器的CPU限制(1.5个CPU) docker update --cpus 1.5 $CONTAINER_NAME # 更新内存限制(512MB) docker update --memory 512m $CONTAINER_NAME # 更新内存+swap限制(1GB) docker update --memory 512m --memory-swap 1g $CONTAINER_NAME
针对 VirtualBox
使用 VBoxManage 命令行工具:
#!/bin/bash VM_NAME="YourVMName" # 关闭虚拟机 VBoxManage controlvm "$VM_NAME" poweroff # 调整内存为4096MB VBoxManage modifyvm "$VM_NAME" --memory 4096 # 调整CPU核心数为4 VBoxManage modifyvm "$VM_NAME" --cpus 4 # 调整显存为64MB VBoxManage modifyvm "$VM_NAME" --vram 64 # 启动虚拟机 VBoxManage startvm "$VM_NAME" --type headless
针对 VMware (ESXi/vCenter)
使用 vim-cmd 或 vmware-vim-cmd:
#!/bin/bash
VM_NAME="YourVM"
# 获取虚拟机ID
VM_ID=$(vim-cmd vmsvc/getallvms | grep "$VM_NAME" | awk '{print $1}')
# 调整CPU和内存(内存单位:MB)
vim-cmd vmsvc/setconfig $VM_ID vCpu.numCpus=4
vim-cmd vmsvc/setconfig $VM_ID memory.size=8192
# 热添加(如果支持,无需重启)
vMotion或DRS场景下可热调整资源
通用自动化脚本模板
一个更完整的脚本示例,支持选择资源类型和指定值:
#!/bin/bash
adjust_vm_resources() {
local vm_name=$1
local cpu_cores=${2:-2}
local memory_mb=${3:-2048}
echo "正在调整虚拟机 '$vm_name' 的资源..."
echo "CPU: $cpu_cores 核心"
echo "内存: ${memory_mb}MB"
# 检查虚拟机状态
state=$(virsh domstate "$vm_name" 2>/dev/null)
if [ $? -ne 0 ]; then
echo "错误: 虚拟机 '$vm_name' 不存在"
exit 1
fi
if [ "$state" = "running" ]; then
echo "正在关闭虚拟机..."
virsh shutdown "$vm_name"
sleep 10
# 强制关闭如果没停止
virsh destroy "$vm_name" 2>/dev/null
fi
# 设置资源
virsh setmaxmem "$vm_name" ${memory_mb}MB --config
virsh setmem "$vm_name" ${memory_mb}MB --config
virsh setvcpus "$vm_name" "$cpu_cores" --config
echo "资源调整完成,正在启动虚拟机..."
virsh start "$vm_name"
echo "虚拟机 '$vm_name' 已成功调整配置并启动"
}
# 使用示例
adjust_vm_resources "my-test-vm" 4 8192
重要注意事项
- 需要root权限:大多数调整需要sudo或root执行
- 动态调整限制:某些资源(如内存)需要虚拟机支持热插拔
- 操作系统内部调整:磁盘扩容后,需在虚拟机内执行:
# Linux guest sudo fdisk -l /dev/sda sudo resize2fs /dev/sdaX
- 配置文件直接修改:KVM配置文件位置
/etc/libvirt/qemu/{vm-name}.xml - 批量调整:可以使用循环批量调整多个虚拟机
选择哪种方法取决于你的虚拟化平台(KVM、VirtualBox、VMware等)以及是否需要保持虚拟机在线,对于生产环境,建议先测试脚本功能。