Wie aktivieren Sie per Hotplug neue CPU und RAM in einer virtuellen Maschine?

Wie aktivieren Sie per Hotplug neue CPU und RAM in einer virtuellen Maschine?

Ich verwende Ubuntu in einer virtuellen Maschine und möchte CPU und RAM hinzufügen, ohne das Gerät neu zu starten. Wie kann ich diese neue virtuelle Hardware per Hotplug anschließen?

Antwort1

Diese können durch die Verwendung des /sysDateisystems mit Root-Anmeldeinformationen aktiviert werden.

Für die CPU ändern Sie das 0in 1die entsprechende Datei des Musters: /sys/devices/system/cpu/cpu*/online.

Beim RAM ermitteln Sie den Zustand in den Dateien /sys/devices/system/memory/memory*/stateund ändern den Inhalt von offline auf online.

Das folgende Skript schaltet die gesamte CPU und den gesamten RAM für Sie online.

#!/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

Antwort2

Anstatt die Kernel-Parameter zu bedienen, können Sie Hotplug-CPU oder -Speicher automatisch aktivieren, indem Sie Udev-Regeln verwenden:

/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"

Getestet auf CentOS 6/7, Ubuntu 14.

Debian 7 ist aus unbekanntem Grund abgestürzt.Weitere Tests wären erforderlich.

Antwort3

Anstatt ein Skript zu erstellen und aufzubewahren, können Sie diesen einzeiligen Befehl ausführen (es kann auch ein Skript sein, wenn Sie möchten). Ich habe gerade eines für den Speicher eingegeben (man kann dies auch einfach in CPU ändern):

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

verwandte Informationen