Shell脚本如何调整虚拟机资源配置

wen 实用脚本 1

本文目录导读:

Shell脚本如何调整虚拟机资源配置

  1. 针对 KVM/QEMU + libvirt(最常用)
  2. 针对虚拟机中运行的Docker容器
  3. 针对 VirtualBox
  4. 针对 VMware (ESXi/vCenter)
  5. 通用自动化脚本模板
  6. 重要注意事项

在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-cmdvmware-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

重要注意事项

  1. 需要root权限:大多数调整需要sudo或root执行
  2. 动态调整限制:某些资源(如内存)需要虚拟机支持热插拔
  3. 操作系统内部调整:磁盘扩容后,需在虚拟机内执行:
    # Linux guest
    sudo fdisk -l /dev/sda
    sudo resize2fs /dev/sdaX
  4. 配置文件直接修改:KVM配置文件位置 /etc/libvirt/qemu/{vm-name}.xml
  5. 批量调整:可以使用循环批量调整多个虚拟机

选择哪种方法取决于你的虚拟化平台(KVM、VirtualBox、VMware等)以及是否需要保持虚拟机在线,对于生产环境,建议先测试脚本功能。

抱歉,评论功能暂时关闭!