Dan*_*sta 25 virtualization storage virtual-machines libvirt kvm-virtualization
我正在尝试将基于文件的磁盘热添加到正在运行的 KVM 虚拟服务器。我使用命令从头开始创建了一个新磁盘
dd of=/home/cloud/vps_59/test.img bs=1 seek=5G count=0
Run Code Online (Sandbox Code Playgroud)
我希望通过在 virsh shell 中执行此操作来将其热添加到来宾中:
virsh # attach-disk vps_59 /home/cloud/vps_59/test.img \
vdd --driver=file --subdriver=raw
Run Code Online (Sandbox Code Playgroud)
然后域的 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>
Run Code Online (Sandbox Code Playgroud)
如您所见,驱动程序名称错误,应该是driver name='qemu'
现有vda
磁盘。我已经尝试过,--drive=qemu
但它表示它不受支持。
其次,一旦我重新启动运行 Ubuntu 10.04.4 LTS 的虚拟机,我只会“看到”新添加的驱动器。如何使驱动器“热插拔”?我希望虚拟机无需重新启动即可立即“看到”新驱动器。
ger*_*ijk 32
我想首先说明您应该避免使用virsh attach-disk
其有限数量的选项。相反,我建议在单独的临时 XML 文件中或使用 virt-manager GUI 应用程序(对于后者,跳过第一步)指定您喜欢的确切磁盘格式。
创建磁盘定义一个临时文件像下面这一个。
调整属性以适合您的情况
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/path/to/disk-image.img'/>
<target dev='vdb' bus='virtio'/>
</disk>
Run Code Online (Sandbox Code Playgroud)
提示:查看您当前的 XML 域配置并<disk>
从那里复制一个部分。
virsh dumpxml <domainname>
Run Code Online (Sandbox Code Playgroud)现在,在将磁盘添加到当前域之前,请确保在来宾中加载了所需的热插拔内核模块。
一些 Linux 发行版,比如最近的 CentOS/RHEL/Fedora,在内核中内置了这个。在这种情况下,请检查CONFIG_HOTPLUG_PCI_ACPI
. 如果是y
,那么您已准备就绪,可以跳过此步骤。
modprobe acpiphp
modprobe pci_hotplug
Run Code Online (Sandbox Code Playgroud)
/etc/modules
如果您希望默认情况下在启动时加载这两个模块,请考虑添加这两个模块。
使用以下命令将磁盘添加到正在运行的 VM
virsh attach-device <domain name> /path/to/disk.xml
Run Code Online (Sandbox Code Playgroud)
或者,添加--persistent
选项以让 Libvirt 更新域 XML 定义“持久”。
最后,在客户机内部检查磁盘是否确实是热插拔的。内核应该被触发,可以通过以下方式检查dmesg
:
[ 321.946440] virtio-pci 0000:00:06.0: using default PCI settings
[...]
[ 321.952782] vdb: vdb1 vdb2
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我vdb
在分区表中添加了一个磁盘和两个分区。