Я пытаюсь в горячем режиме добавить файловый диск к работающему виртуальному серверу KVM. Я создал новый диск с нуля с помощью команды
dd of=/home/cloud/vps_59/test.img bs=1 seek=5G count=0
и я надеялся, что он будет добавлен гостю в горячем режиме, выполнив это в оболочке virsh:
virsh # attach-disk vps_59 /home/cloud/vps_59/test.img \
vdd --driver=file --subdriver=raw
В этом случае XML-определение домена выглядит следующим образом:
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/home/cloud/vps_59/root.img'/>
<target dev='vda' bus='virtio'/>
</disk>
<disk type='file' device='disk'>
<driver name='file' type='raw'/>
<source file='/home/cloud/vps_59/test.img'/>
<target dev='vdd' bus='virtio'/>
</disk>
Как видите, имя драйвера становится неправильным, оно должно быть driver name='qemu'
как существующие vda
диск. Я пробовал с --drive=qemu
но в нем говорится, что он не поддерживается.
Во-вторых, я «вижу» только что добавленный диск после перезагрузки виртуальной машины под управлением Ubuntu 10.04.4 LTS. Как сделать так, чтобы накопитель был отключен от сети? Я хочу, чтобы виртуальная машина сразу же «увидела» новый диск без перезагрузки.
Я хотел бы начать с примечания, что вам следует избегать использования virsh attach-disk
с его ограниченным количеством опций. Вместо этого я бы предложил указать точный формат диска, который вы предпочитаете, в отдельном временном XML-файле или с помощью графического интерфейса пользователя virt-manager (для последнего пропустите первый шаг).
Создайте временный файл с определением диска лайк этот ниже.
настройте свойства в соответствии с вашей ситуацией
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/path/to/disk-image.img'/>
<target dev='vdb' bus='virtio'/>
</disk>
Совет: загляните в текущую конфигурацию домена XML и скопируйте <disk>
раздел оттуда.
virsh dumpxml <domainname>
Теперь, прежде чем добавлять диск в текущий домен, убедитесь, что в гостевой системе загружены необходимые модули ядра с возможностью горячей замены.
Некоторые дистрибутивы Linux, например недавние CentOS / RHEL / Fedora, имеют это встроенное ядро. В этом случае проверьте CONFIG_HOTPLUG_PCI_ACPI
. Если это y
, то все готово и этот шаг можно пропустить.
modprobe acpiphp
modprobe pci_hotplug
Рассмотрите возможность добавления этих двух модулей в /etc/modules
если вы хотите, чтобы они загружались при загрузке по умолчанию.
Добавьте диск к работающей виртуальной машине, используя
virsh attach-device <domain name> /path/to/disk.xml
При желании добавьте --persistent
параметр, позволяющий Libvirt обновлять определение XML домена «постоянное».
Наконец, проверьте внутри гостя, действительно ли диск был вставлен в «горячее» подключение. Ядро должно сработать, что можно проверить с помощью dmesg
:
[ 321.946440] virtio-pci 0000:00:06.0: using default PCI settings
[...]
[ 321.952782] vdb: vdb1 vdb2
В приведенном выше примере я добавил диск как vdb
с двумя разделами в таблице разделов.