13.4.5. 使用命令行将基于 LVM 的存储附加到虚拟机
要为虚拟机(VM)提供本地存储,您可以使用基于 LVM 的存储卷。这种类型的磁盘镜像基于 LVM 卷组,并使用 .qcow2 或 .raw 格式。
要使用命令行将基于 LVM 的存储附加到虚拟机,请使用以下方法之一:
-
在创建新虚拟机时,使用
Create virtual machine对话框中的Storage选项创建并附加新磁盘。具体步骤请参阅 使用 web 控制台创建虚拟机。 - 对于现有虚拟机,创建基于 LVM 的存储卷并将其附加到虚拟机。具体步骤请查看以下步骤。
注意事项
请注意,基于 LVM 的存储卷有一些限制:
- 基于 LVM 的存储池不能为 LVM 提供完整的灵活性。
-
基于 LVM 的存储池是卷组。您可以使用
virsh工具创建卷组,但使用这种方法,您在创建的卷组中只能有一个设备。要创建具有多个设备的卷组,请使用 LVM 工具,请参阅 如何在 Linux 中 使用 LVM 创建卷组。 -
基于 LVM 的存储池需要一个完整磁盘分区。如果您使用
virsh命令激活一个新分区或设备,分区将被格式化,所有数据都被清除。在这些过程中,如果您使用主机的现有卷组,则不会删除任何内容。
先决条件
确定您的管理程序支持基于 LVM 的存储池:
# virsh pool-capabilities | grep "'logical' supported='yes'"如果命令显示任何输出结果,则支持基于 LVM 的池。
- 确保主机上存在 LVM 卷组。有关创建 LVM 卷组的步骤,请参阅 创建 LVM 卷组。
- 在创建存储池前,备份所选存储设备上的任何数据。将磁盘分区专用于存储池将重新格式化并擦除当前存储在磁盘设备上的所有数据。
流程
如果还没有新的基于 LVM 的存储池,请创建和设置新的存储池。
定义 LVM 类型的存储池。例如,以下命令定义了一个名为
guest_images_lvm的存储池,它使用lvm_vg卷组,并挂载到/dev/lvm_vg目录上:# virsh pool-define-as guest_images_lvm logical --source-dev /dev/sdb --target /dev/lvm_vg Pool guest_images_lvm defined根据您之前定义的配置创建存储池。
# virsh pool-build guest_images_lvm Pool guest_images_lvm built可选:验证是否已创建池。
# virsh pool-list --all Name State Autostart ------------------------------------------- default active yes guest_images_lvm inactive no启动存储池。
# virsh pool-start guest_images_lvm Pool guest_images_lvm started注意virsh pool-start命令只用于持久存储池。临时存储池创建时会自动启动。可选:打开自动启动。
默认情况下,使用
virsh定义的存储池不会被设置为在每次虚拟化服务启动时自动启动。使用virsh pool-autostart命令将存储池配置为 autostart。# virsh pool-autostart guest_images_lvm Pool guest_images_lvm marked as autostarted
创建基于 LVM 的存储卷。例如,以下命令创建一个名为
vm-disk1的 20 GBqcow2卷,并基于guest_images_lvm存储池:# virsh vol-create-as --pool guest_images_lvm --name vm-disk1 --capacity 20GB --format qcow2 Vol vm-disk1 created将存储卷作为虚拟磁盘附加到虚拟机。
找到您创建的存储卷。要做到这一点,检查卷所属的存储池:
# virsh vol-list --pool guest_images_lvm --details Name Path Type Capacity Allocation ----------------------------------------------------------------------------- vm-disk1 /dev/guest_images_lvm/vm-disk1 block 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命令将磁盘附加到虚拟机。提供虚拟机中没有使用的目标设备。例如,以下命令将之前创建的
vm-disk1作为vdc设备附加到testguest1虚拟机:# virsh attach-disk testguest1 /dev/guest_images_lvm/vm-disk1 vdc --persistent
验证
检查您附加磁盘的虚拟机 XML 配置,以查看配置是否正确。
# virsh dumpxml testguest1 ... <disk type="block" device="disk"> <driver name="qemu" type="raw"/> <source dev="/dev/guest_images_lvm/vm-disk1" index="3"/> <backingStore/> <target dev="vdc" bus="virtio"/> <alias name="virtio-disk2"/> <address type="pci" domain="0x0000" bus="0x07" slot="0x00" function="0x0"/> </disk> ...- 在虚拟机的客户机操作系统中,确认磁盘映像已作为未格式化和未分配的磁盘提供。