13.4. 将存储附加到虚拟机
要将存储添加到虚拟机(VM),您可以将存储资源附加到虚拟机作为虚拟磁盘。与物理存储设备类似,虚拟磁盘与它们所附加的虚拟机无关,并可移动到其他虚拟机。
您可以使用多种类型的存储资源向虚拟机添加虚拟磁盘。
13.4.1. 使用命令行将基于文件的虚拟磁盘附加到虚拟机 复制链接链接已复制到粘贴板!
要为虚拟机提供本地存储,最简单的选项通常是附加带有 .qcow2 或 .raw 格式的基于文件的虚拟磁盘。
要在命令行中这样做,您可以使用以下方法之一:
在由
libvirt管理的基于目录的存储池中创建基于文件的存储卷。这需要多个步骤,但提供更好的与 hypervisor 集成。请注意,在 RHEL 10 主机上创建第一个虚拟机时,会自动创建默认的基于目录的存储卷。此存储池的名称基于保存磁盘镜像的目录名称。例如,默认情况下,在
libvirt的系统会话中,磁盘镜像保存在/var/lib/libvirt/images/目录中,存储池名为images。使用
qemu-img命令,将虚拟磁盘创建为主机文件系统上的文件。这是一个更快的方法,但不提供与libvirt的集成。因此,在创建后,使用
qemu-img创建的虚拟磁盘更为困难。
在命令行中创建新虚拟机时,也可以创建并附加基于文件的虚拟磁盘。要做到这一点,请在 virt-install 工具中使用- disk 选项。具体步骤请参阅创建虚拟机。
流程
可选:如果要将虚拟磁盘创建为存储卷,但您不想在主机上使用
默认镜像存储池或另一个现有存储池,请创建和设置新的目录的存储池。配置目录类型存储池。例如,要创建一个名为
guest_images_dir的存储池,它使用/guest_images目录:# virsh pool-define-as guest_images_dir dir --target "/guest_images" Pool guest_images_dir defined根据您之前定义的配置,为存储池创建目标路径。
# virsh pool-build guest_images_dir Pool guest_images_dir built启动存储池。
# virsh pool-start guest_images_dir Pool guest_images_dir started可选:将存储池设置为在主机引导时启动。
# virsh pool-autostart guest_images_dir Pool guest_images_dir marked as autostarted可选:验证存储池是否处于
running状态。检查报告的大小是否与预期一样,以及是否正确配置了自动启动。# virsh pool-info guest_images_dir Name: guest_images_dir UUID: c7466869-e82a-a66c-2187-dc9d6f0877d0 State: running Persistent: yes Autostart: yes Capacity: 458.39 GB Allocation: 197.91 MB Available: 458.20 GB
创建基于文件的虚拟磁盘。要做到这一点,请使用以下方法之一:
要快速创建不是由
libvirt管理的基于文件的虚拟机磁盘,请使用qemu-img工具。例如,以下命令会创建一个名为 test-image 的
qcow2磁盘镜像,大小为 30GB:# qemu-img create -f qcow2 test-image 30G Formatting 'test-image', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=32212254720 lazy_refcounts=off refcount_bits=16要创建由
libvirt管理的基于文件的虚拟机磁盘,请根据基于目录的现有存储池将磁盘定义为存储卷。例如,以下命令创建一个名为
vm-disk1的 20 GBqcow2卷,并基于guest_images_dir存储池:# virsh vol-create-as --pool guest_images_dir --name vm-disk1 --capacity 20GB --format qcow2 Vol vm-disk1 created
找到您创建的虚拟磁盘:
-
对于使用
qemu-img创建的虚拟机磁盘,这通常是您的当前目录。 对于存储卷,检查卷所属的存储池:
# virsh vol-list --pool guest_images_dir --details Name Path Type Capacity Allocation -------------------------------------------------------------------------- vm-disk1 /guest-images/vm-disk1 file 20.00 GiB 196.00 KiB
-
对于使用
找到在要附加磁盘的虚拟机中使用哪些目标设备:
# virsh domblklist --details <vm-name> Type Device Target Source ---------------------------------------------------------------- file disk *vda /home/VirtualMachines/vm-name.qcow2 file cdrom vdb -- 可选:检查磁盘的一致性,以避免出现数据崩溃或磁盘碎片的问题。具体步骤请参阅 检查虚拟磁盘的一致性。
使用
virsh attach-disk命令将磁盘附加到虚拟机。提供虚拟机中没有使用的目标设备。例如,以下命令将之前创建的
test-disk1作为vdc设备附加到testguest1虚拟机:# virsh attach-disk testguest1 /guest-images/vm-disk1 vdc --persistent
验证
检查您附加磁盘的虚拟机 XML 配置,以查看配置是否正确。
# virsh dumpxml testguest1 ... <disk type='file' device='disk'> <driver name='qemu' type='qcow2' discard='unmap'/> <source file='/guest-images/vm-disk1' index='1'/> <backingStore/> <target dev='vdc' bus='virtio'/> <alias name='virtio-disk2'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> ...- 在虚拟机的客户机操作系统中,确认磁盘映像已作为未格式化和未分配的磁盘提供。