Как вы горячее подключение включить новый процессор и оперативную память на виртуальной машине
Я использую Ubuntu на виртуальной машине, и я хотел бы добавить процессор и оперативную память без перезагрузки устройства. Как я могу подключить это новое виртуальное оборудование?
2 ответа
Они могут быть включены с помощью /sys
файловая система с использованием корневых учетных данных.
Для процессора вы меняете 0
к 1
в соответствующий файл шаблона: /sys/devices/system/cpu/cpu*/online
,
Для оперативной памяти вы найдете состояние в файлах /sys/devices/system/memory/memory*/state
и измените содержимое с оффлайн на онлайн.
Сценарий ниже переведет все процессоры и оперативную память в оперативный режим для вас.
#!/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:
/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 по неизвестной причине. Требуется дальнейшее тестирование.
Вместо того, чтобы создавать и хранить скрипт, вы можете запустить эту однострочную команду (это может быть также скрипт, если хотите). Я только что набрал один для памяти (можно легко изменить это на CPU):
grep line /sys/devices/system/memory/*/state |grep offline |awk -F '\/' '{print $6}' |while read xx; do echo online >/sys/devices/system/memory/$xx/state ; done