如何在虚拟机中热插拔启用新的CPU和RAM

我在虚拟机中运行Ubuntu,我想在不重启设备的情况下添加CPU和RAM。 如何热插拔这个新的虚拟硬件?

这些可以通过使用root凭据使用/sys文件系统来启用。

对于CPU,将0更改为1到适当的模式文件: /sys/devices/system/cpu/cpu*/online

对于RAM,您可以在files /sys/devices/system/memory/memory*/state ,并将内容从offline更改为online。

下面的脚本将为您在线转换所有CPU和RAM。

 #!/bin/bash # Based on script by William Lam - http://engineering.ucsb.edu/~duonglt/vmware/ # Bring CPUs online for CPU_DIR in /sys/devices/system/cpu/cpu[0-9]* do CPU=${CPU_DIR##*/} echo "Found cpu: '${CPU_DIR}' ..." CPU_STATE_FILE="${CPU_DIR}/online" if [ -f "${CPU_STATE_FILE}" ]; then if grep -qx 1 "${CPU_STATE_FILE}"; then echo -e "\t${CPU} already online" else echo -e "\t${CPU} is new cpu, onlining cpu ..." echo 1 > "${CPU_STATE_FILE}" fi else echo -e "\t${CPU} already configured prior to hot-add" fi done # Bring all new Memory online for RAM in $(grep line /sys/devices/system/memory/*/state) do echo "Found ram: ${RAM} ..." if [[ "${RAM}" == *":offline" ]]; then echo "Bringing online" echo $RAM | sed "s/:offline$//"|sed "s/^/echo online > /"|source /dev/stdin else echo "Already online" fi done 

您可以使用udev规则自动启用热插拔CPU或内存,而不是操作内核参数:

/etc/udev/rules.d/94-hotplug-cpu-mem.rules

 ACTION=="add", SUBSYSTEM=="cpu", ATTR{online}=="0", ATTR{online}="1" ACTION=="add", SUBSYSTEM=="memory", ATTR{state}=="offline", ATTR{state}="online" 

在CentOS 6/7上测试,Ubuntu 14。

Debian 7因未知原因而坠毁。 需要进一步测试。