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"
# virsh pool-define-as guest_images_dir dir --target "/guest_images" Pool guest_images_dir defined
Copy to Clipboard Copied! 根据您之前定义的配置,为存储池创建目标路径。
virsh pool-build guest_images_dir
# virsh pool-build guest_images_dir Pool guest_images_dir built
Copy to Clipboard Copied! 启动存储池。
virsh pool-start guest_images_dir
# virsh pool-start guest_images_dir Pool guest_images_dir started
Copy to Clipboard Copied! 可选:将存储池设置为在主机引导时启动。
virsh pool-autostart guest_images_dir
# virsh pool-autostart guest_images_dir Pool guest_images_dir marked as autostarted
Copy to Clipboard Copied! 可选:验证存储池是否处于
running
状态。检查报告的大小是否与预期一样,以及是否正确配置了自动启动。virsh pool-info guest_images_dir
# 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
Copy to Clipboard Copied!
创建基于文件的虚拟磁盘。要做到这一点,请使用以下方法之一:
要快速创建不是由
libvirt
管理的基于文件的虚拟机磁盘,请使用qemu-img
工具。例如,以下命令会创建一个名为 test-image 的
qcow2
磁盘镜像,大小为 30GB:qemu-img create -f qcow2 test-image 30G
# 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
Copy to Clipboard Copied! 要创建由
libvirt
管理的基于文件的虚拟机磁盘,请根据基于目录的现有存储池将磁盘定义为存储卷。例如,以下命令创建一个名为
vm-disk1
的 20 GBqcow2
卷,并基于guest_images_dir
存储池:virsh vol-create-as --pool guest_images_dir --name vm-disk1 --capacity 20GB --format qcow2
# virsh vol-create-as --pool guest_images_dir --name vm-disk1 --capacity 20GB --format qcow2 Vol vm-disk1 created
Copy to Clipboard Copied!
找到您创建的虚拟磁盘:
-
对于使用
qemu-img
创建的虚拟机磁盘,这通常是您的当前目录。 对于存储卷,检查卷所属的存储池:
virsh vol-list --pool guest_images_dir --details
# 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
Copy to Clipboard Copied!
-
对于使用
找到在要附加磁盘的虚拟机中使用哪些目标设备:
virsh domblklist --details <vm-name> Type Device Target Source ---------------------------------------------------------------- file disk *vda /home/VirtualMachines/vm-name.qcow2
# virsh domblklist --details <vm-name> Type Device Target Source ---------------------------------------------------------------- file disk *vda /home/VirtualMachines/vm-name.qcow2 file cdrom vdb -
Copy to Clipboard Copied! - 可选:检查磁盘的一致性,以避免出现数据崩溃或磁盘碎片的问题。具体步骤请参阅 检查虚拟磁盘的一致性。
使用
virsh attach-disk
命令将磁盘附加到虚拟机。提供虚拟机中没有使用的目标设备。例如,以下命令将之前创建的
test-disk1
作为vdc
设备附加到testguest1
虚拟机:virsh attach-disk testguest1 /guest-images/vm-disk1 vdc --persistent
# virsh attach-disk testguest1 /guest-images/vm-disk1 vdc --persistent
Copy to Clipboard Copied!
验证
检查您附加磁盘的虚拟机 XML 配置,以查看配置是否正确。
virsh dumpxml testguest1
# 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> ...
Copy to Clipboard Copied! - 在虚拟机的客户机操作系统中,确认磁盘映像已作为未格式化和未分配的磁盘提供。
13.4.2. 使用 web 控制台将基于文件的虚拟磁盘附加到虚拟机
要为虚拟机提供本地存储,最简单的选项通常是附加带有 .qcow2
或 .raw
格式的基于文件的虚拟磁盘。
为此,请在由 libvirt
管理的基于目录的存储池中创建基于文件的存储卷。当在 RHEL 10 主机上创建第一个虚拟机时,会自动创建基于目录的默认存储卷。此存储池的名称基于保存磁盘镜像的目录名称。例如,默认情况下,在 libvirt
的系统
会话中,磁盘镜像保存在 /var/lib/libvirt/images/
目录中,存储池名为 images
。
在 web 控制台中创建新虚拟机时,也可以创建并附加基于文件的虚拟磁盘。为此,请在 Create virtual machine
对话框中使用 Storage
选项。具体步骤请参阅 使用 web 控制台创建虚拟机。
先决条件
已安装 RHEL 10 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
- Web 控制台 VM 插件 已安装在您的系统上。
流程
登录到 RHEL 10 web 控制台。
详情请参阅 登录到 web 控制台。
可选:如果您不想使用默认镜像存储池来创建新虚拟磁盘,请创建新的存储池。
-
点 Virtual Machines 接口顶部的
Storage Pools
。→Create storage pool
。 - 在 Create Storage Pool 对话框中,输入存储池的名称。
- 在 Type 下拉菜单中选择 Filesystem directory。
输入以下信息:
- Target path - 存储池的位置。
- 启动」 - 主机引导时是否启动存储池。
点击
。创建存储池时,Create Storage Pool 对话框将关闭,新的存储池会出现在存储池列表中。
-
点 Virtual Machines 接口顶部的
基于现有存储池创建新存储卷。
-
在 Storage Pools 窗口中,点击您要创建存储卷的存储池。→
Storage Volumes
Create volume
。 在 Create Storage Volume 对话框中输入以下信息:
- Name - 存储卷的名称。
- size - MiB 或 GiB 存储卷的大小。
-
格式 - 存储卷的格式。支持的类型为
qcow2
和raw
。
- 点击 。
-
在 Storage Pools 窗口中,点击您要创建存储卷的存储池。→
- 可选:检查磁盘的一致性,以避免出现数据崩溃或磁盘碎片的问题。具体步骤请参阅 检查虚拟磁盘的一致性。
将创建的存储卷作为磁盘添加到虚拟机。
在
接口中,点击您要为其创建并附加新磁盘的虚拟机。此时将打开一个新页面,其中包含关于所选虚拟机基本信息的概述部分,以及用于访问虚拟机的图形界面的控制台部分。
- 滚动到 。
- 在 Disks 部分中,单击 。
- 在 Add disks 对话框中,选择 。
- 选择您要用于磁盘的存储池和存储卷。
选择磁盘是否持久
注意临时磁盘只能添加到正在运行的虚拟机中。
- 可选:点 并调整存储卷的缓存类型、总线类型和磁盘标识符。
- 点 。
验证
- 在虚拟机的客户机操作系统中,确认磁盘映像已作为未格式化和未分配的磁盘提供。
13.4.3. 使用命令行将基于磁盘的存储附加到虚拟机
要为虚拟机(VM)提供本地存储,您可以使用基于磁盘的磁盘镜像。这种类型的磁盘镜像基于主机上的磁盘分区,并使用 .qcow2
或 .raw
格式。
要使用命令行将基于磁盘的存储附加到虚拟机,请使用以下方法之一:
-
创建新虚拟机时,使用 the-disk 选项创建并附加新磁盘作为
virt-install
命令的一部分。具体步骤请参阅创建虚拟机。
- 对于现有虚拟机,创建基于磁盘的存储卷并将其附加到虚拟机。具体步骤请查看以下步骤。
先决条件
确定您的管理程序支持基于磁盘的存储池:
virsh pool-capabilities | grep "'disk' supported='yes'"
# virsh pool-capabilities | grep "'disk' supported='yes'"
Copy to Clipboard Copied! 如果命令显示任何输出结果,则代表支持基于磁盘的池。
准备一个设备,以此作为存储池的基础。因此,首选分区(例如
/dev/sdb1)
或 LVM 卷。如果您提供对整个磁盘或块设备(例如/dev/sdb
)的写入访问权限的虚拟机,则虚拟机可能会对其分区或创建自己的 LVM 组。这可能会导致主机上的系统错误。但是,如果您需要为存储池使用整个块设备,红帽建议保护设备上的任何重要分区不受
os-prober
功能的影响。要做到这一点,编辑/etc/default/grub
文件,并应用以下配置之一:禁用
os-prober
。GRUB_DISABLE_OS_PROBER=true
GRUB_DISABLE_OS_PROBER=true
Copy to Clipboard Copied! 防止
os-prober
发现您要使用的分区。例如:GRUB_OS_PROBER_SKIP_LIST="5ef6313a-257c-4d43@/dev/sdb1"
GRUB_OS_PROBER_SKIP_LIST="5ef6313a-257c-4d43@/dev/sdb1"
Copy to Clipboard Copied!
-
在创建存储池前,备份所选存储设备上的任何数据。根据所使用的
libvirt
版本,在存储池中指定一个磁盘可能会重新格式化并清除当前存储在磁盘设备上的所有数据。
流程
创建并设置基于磁盘的新存储池(如果还没有池)。
定义并创建磁盘类型存储池。以下示例创建一个名为
guest_images_disk
的存储池,它使用 /dev/sdb 设备,并挂载在 /dev 目录。virsh pool-define-as guest_images_disk disk --source-format=gpt --source-dev=/dev/sdb --target /dev
# virsh pool-define-as guest_images_disk disk --source-format=gpt --source-dev=/dev/sdb --target /dev Pool guest_images_disk defined
Copy to Clipboard Copied! 为预格式化的文件系统存储池创建存储池目标路径,初始化存储源设备,并定义数据的格式。
virsh pool-build guest_images_disk
# virsh pool-build guest_images_disk Pool guest_images_disk built
Copy to Clipboard Copied! 可选:验证是否已创建池。
virsh pool-list --all
# virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images_disk inactive no
Copy to Clipboard Copied! 启动存储池。
virsh pool-start guest_images_disk
# virsh pool-start guest_images_disk Pool guest_images_disk started
Copy to Clipboard Copied! 注意virsh pool-start
命令只用于持久存储池。临时存储池创建时会自动启动。可选:打开自动启动。
默认情况下,使用
virsh
定义的存储池不会被设置为在每次虚拟化服务启动时自动启动。使用virsh pool-autostart
命令将存储池配置为 autostart。virsh pool-autostart guest_images_disk
# virsh pool-autostart guest_images_disk Pool guest_images_disk marked as autostarted
Copy to Clipboard Copied!
创建基于磁盘的存储卷。例如,以下命令创建一个名为
vm-disk1
的 20 GBqcow2
卷,并基于guest_images_disk
存储池:virsh vol-create-as --pool guest_images_disk --name sdb1 --capacity 20GB --format extended
# virsh vol-create-as --pool guest_images_disk --name sdb1 --capacity 20GB --format extended Vol vm-disk1 created
Copy to Clipboard Copied! 将存储卷作为虚拟磁盘附加到虚拟机。
找到您创建的存储卷。要做到这一点,检查卷所属的存储池:
virsh vol-list --pool guest_images_disk --details
# virsh vol-list --pool guest_images_disk --details Name Path Type Capacity Allocation --------------------------------------------------------------------- sdb1 /dev/sdb1 block 20.00 GiB 20.00 GiB
Copy to Clipboard Copied! 找到在要附加磁盘的虚拟机中使用哪些目标设备:
virsh domblklist --details <vm-name> Type Device Target Source ---------------------------------------------------------------- file disk *vda /home/VirtualMachines/vm-name.qcow2
# virsh domblklist --details <vm-name> Type Device Target Source ---------------------------------------------------------------- file disk *vda /home/VirtualMachines/vm-name.qcow2 file cdrom vdb -
Copy to Clipboard Copied! - 可选:检查磁盘的一致性,以避免出现数据崩溃或磁盘碎片的问题。具体步骤请参阅 检查虚拟磁盘的一致性。
使用
virsh attach-disk
命令将磁盘附加到虚拟机。提供虚拟机中没有使用的目标设备。例如,以下命令将之前创建的
vm-disk1
作为vdc
设备附加到testguest1
虚拟机:virsh attach-disk testguest1 /dev/sdb1 vdc --persistent
# virsh attach-disk testguest1 /dev/sdb1 vdc --persistent
Copy to Clipboard Copied!
验证
检查您附加磁盘的虚拟机 XML 配置,以查看配置是否正确。
virsh dumpxml testguest1
# virsh dumpxml testguest1 ... <disk type="block" device="disk"> <driver name="qemu" type="raw"/> <source dev="/dev/sdb1" index="2"/> <backingStore/> <target dev="vdc" bus="virtio"/> <alias name="virtio-disk2"/> <address type="pci" domain="0x0000" bus="0x07" slot="0x00" function="0x0"/> </disk> ...
Copy to Clipboard Copied! - 在虚拟机的客户机操作系统中,确认磁盘映像已作为未格式化和未分配的磁盘提供。
13.4.4. 使用 web 控制台将基于磁盘的存储附加到虚拟机
要为虚拟机提供本地存储,最简单的选项通常是附加带有 .qcow2
或 .raw
格式的基于文件的虚拟磁盘。
要使用 Web 控制台将基于磁盘的存储附加到虚拟机,请使用以下方法之一:
-
在创建新虚拟机时,使用
Create virtual machine
对话框中的Storage
选项创建并附加新磁盘。具体步骤请参阅 使用 web 控制台创建虚拟机。 - 对于现有虚拟机,创建基于磁盘的存储卷并将其附加到虚拟机。具体步骤请查看以下步骤。
先决条件
已安装 RHEL 10 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
- Web 控制台 VM 插件 已安装在您的系统上。
流程
登录到 RHEL 10 web 控制台。
详情请参阅 登录到 web 控制台。
创建并设置基于磁盘的新存储池(如果还没有池)。
-
点 Virtual Machines 接口顶部的
Storage Pools
。→Create storage pool
。 - 在 Create Storage Pool 对话框中,输入存储池的名称。
在 Type 下拉菜单中选择 物理磁盘设备。
注意如果您在下拉菜单中选择 物理磁盘设备 选项,则您的管理程序不支持基于磁盘的存储池。
输入以下信息:
- 目标路径 - 指定目标设备的路径。这将是用于存储池的路径。
-
源路径 - 指定存储设备的路径。例如:
/dev/sdb
。 - 格式 - 分区表的类型。
- 启动」 - 主机引导时是否启动存储池。
点击
。创建存储池时,Create Storage Pool 对话框将关闭,新的存储池会出现在存储池列表中。
-
点 Virtual Machines 接口顶部的
基于现有存储池创建新存储卷。
-
在 Storage Pools 窗口中,点击您要创建存储卷的存储池。→
Storage Volumes
Create volume
。 在 Create Storage Volume 对话框中输入以下信息:
- Name - 存储卷的名称。
- size - MiB 或 GiB 存储卷的大小。
- 格式 - 存储卷的格式。
- 点击 。
-
在 Storage Pools 窗口中,点击您要创建存储卷的存储池。→
- 可选:检查磁盘的一致性,以避免出现数据崩溃或磁盘碎片的问题。具体步骤请参阅 检查虚拟磁盘的一致性。
将创建的存储卷作为磁盘添加到虚拟机。
在
接口中,点击您要为其创建并附加新磁盘的虚拟机。此时将打开一个新页面,其中包含关于所选虚拟机基本信息的概述部分,以及用于访问虚拟机的图形界面的控制台部分。
- 滚动到 。
- 在 Disks 部分中,单击 。
- 在 Add disks 对话框中,选择 。
- 选择您要用于磁盘的存储池和存储卷。
选择磁盘是否持久
注意临时磁盘只能添加到正在运行的虚拟机中。
- 可选:点 并调整存储卷的缓存类型、总线类型和磁盘标识符。
- 点 。
验证
- 在虚拟机的客户机操作系统中,确认磁盘映像已作为未格式化和未分配的磁盘提供。
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'"
# virsh pool-capabilities | grep "'logical' supported='yes'"
Copy to Clipboard Copied! 如果命令显示任何输出结果,则支持基于 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
# virsh pool-define-as guest_images_lvm logical --source-dev /dev/sdb --target /dev/lvm_vg Pool guest_images_lvm defined
Copy to Clipboard Copied! 根据您之前定义的配置创建存储池。
virsh pool-build guest_images_lvm
# virsh pool-build guest_images_lvm Pool guest_images_lvm built
Copy to Clipboard Copied! 可选:验证是否已创建池。
virsh pool-list --all
# virsh pool-list --all Name State Autostart ------------------------------------------- default active yes guest_images_lvm inactive no
Copy to Clipboard Copied! 启动存储池。
virsh pool-start guest_images_lvm
# virsh pool-start guest_images_lvm Pool guest_images_lvm started
Copy to Clipboard Copied! 注意virsh pool-start
命令只用于持久存储池。临时存储池创建时会自动启动。可选:打开自动启动。
默认情况下,使用
virsh
定义的存储池不会被设置为在每次虚拟化服务启动时自动启动。使用virsh pool-autostart
命令将存储池配置为 autostart。virsh pool-autostart guest_images_lvm
# virsh pool-autostart guest_images_lvm Pool guest_images_lvm marked as autostarted
Copy to Clipboard Copied!
创建基于 LVM 的存储卷。例如,以下命令创建一个名为
vm-disk1
的 20 GBqcow2
卷,并基于guest_images_lvm
存储池:virsh vol-create-as --pool guest_images_lvm --name vm-disk1 --capacity 20GB --format qcow2
# virsh vol-create-as --pool guest_images_lvm --name vm-disk1 --capacity 20GB --format qcow2 Vol vm-disk1 created
Copy to Clipboard Copied! 将存储卷作为虚拟磁盘附加到虚拟机。
找到您创建的存储卷。要做到这一点,检查卷所属的存储池:
virsh vol-list --pool guest_images_lvm --details
# 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
Copy to Clipboard Copied! 找到在要附加磁盘的虚拟机中使用哪些目标设备:
virsh domblklist --details <vm-name> Type Device Target Source ---------------------------------------------------------------- file disk *vda /home/VirtualMachines/vm-name.qcow2
# virsh domblklist --details <vm-name> Type Device Target Source ---------------------------------------------------------------- file disk *vda /home/VirtualMachines/vm-name.qcow2 file cdrom vdb -
Copy to Clipboard Copied! - 可选:检查磁盘的一致性,以避免出现数据崩溃或磁盘碎片的问题。具体步骤请参阅 检查虚拟磁盘的一致性。
使用
virsh attach-disk
命令将磁盘附加到虚拟机。提供虚拟机中没有使用的目标设备。例如,以下命令将之前创建的
vm-disk1
作为vdc
设备附加到testguest1
虚拟机:virsh attach-disk testguest1 /dev/guest_images_lvm/vm-disk1 vdc --persistent
# virsh attach-disk testguest1 /dev/guest_images_lvm/vm-disk1 vdc --persistent
Copy to Clipboard Copied!
验证
检查您附加磁盘的虚拟机 XML 配置,以查看配置是否正确。
virsh dumpxml testguest1
# 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> ...
Copy to Clipboard Copied! - 在虚拟机的客户机操作系统中,确认磁盘映像已作为未格式化和未分配的磁盘提供。
13.4.6. 使用 web 控制台将基于 LVM 的存储附加到虚拟机
要为虚拟机(VM)提供本地存储,您可以使用基于 LVM 的存储卷。这种类型的磁盘镜像基于 LVM 卷组,并使用 .qcow2
或 .raw
格式。
要使用 Web 控制台将基于磁盘的存储附加到虚拟机,请使用以下方法之一:
-
在创建新虚拟机时,使用
Create virtual machine
对话框中的Storage
选项创建并附加新磁盘。具体步骤请参阅 使用 web 控制台创建虚拟机。 - 对于现有虚拟机,创建基于 LVM 的存储卷并将其附加到虚拟机。具体步骤请查看以下步骤。
注意事项
请注意,基于 LVM 的存储卷有一些限制:
- 基于 LVM 的存储池不能为 LVM 提供完整的灵活性。
-
基于 LVM 的存储池是卷组。您可以使用
virsh
工具创建卷组,但使用这种方法,您在创建的卷组中只能有一个设备。要创建具有多个设备的卷组,请使用 LVM 工具,请参阅 如何在 Linux 中 使用 LVM 创建卷组。 -
基于 LVM 的存储池需要一个完整磁盘分区。如果您使用
virsh
命令激活一个新分区或设备,分区将被格式化,所有数据都被清除。在这些过程中,如果您使用主机的现有卷组,则不会删除任何内容。
先决条件
已安装 RHEL 10 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
- Web 控制台 VM 插件 已安装在您的系统上。
- 主机上存在 LVM 卷组。有关创建 LVM 卷组的步骤,请参阅 创建 LVM 卷组。
流程
登录到 RHEL 10 web 控制台。
详情请参阅 登录到 web 控制台。
如果还没有新的目录,请创建并设置一个新的基于目录的存储池。
-
点 Virtual Machines 接口顶部的
Storage Pools
。→Create storage pool
。 - 在 Create Storage Pool 对话框中,输入存储池的名称。
在 Type 下拉菜单中选择 LVM 卷组。
注意如果您在下拉菜单中选择 LVM 卷组 选项,则您的管理程序不支持基于磁盘的存储池。
输入以下信息:
- 源卷组 - 要使用的 LVM 卷组名称。
- 启动」 - 主机引导时是否启动存储池。
点击
。创建存储池时,Create Storage Pool 对话框将关闭,新的存储池会出现在存储池列表中。
-
点 Virtual Machines 接口顶部的
基于现有存储池创建新存储卷。
-
在 Storage Pools 窗口中,点击您要创建存储卷的存储池。→
Storage Volumes
Create volume
。 在 Create Storage Volume 对话框中输入以下信息:
- Name - 存储卷的名称。
- size - MiB 或 GiB 存储卷的大小。
-
格式 - 存储卷的格式。支持的类型为
qcow2
和raw
。
- 点击 。
-
在 Storage Pools 窗口中,点击您要创建存储卷的存储池。→
- 可选:检查磁盘的一致性,以避免出现数据崩溃或磁盘碎片的问题。具体步骤请参阅 检查虚拟磁盘的一致性。
将创建的存储卷作为磁盘添加到虚拟机。
在
接口中,点击您要为其创建并附加新磁盘的虚拟机。此时将打开一个新页面,其中包含关于所选虚拟机基本信息的概述部分,以及用于访问虚拟机的图形界面的控制台部分。
- 滚动到 。
- 在 Disks 部分中,单击 。
- 在 Add disks 对话框中,选择 。
- 选择您要用于磁盘的存储池和存储卷。
选择磁盘是否持久
注意临时磁盘只能添加到正在运行的虚拟机中。
- 可选:点 并调整存储卷的缓存类型、总线类型和磁盘标识符。
- 点 。
验证
- 在虚拟机的客户机操作系统中,确认磁盘映像已作为未格式化和未分配的磁盘提供。
13.4.7. 使用命令行将基于 NFS 的存储附加到虚拟机
要为虚拟机(VM)提供网络存储,您可以根据 Network File Sytem (NFS)服务器使用存储卷。
要使用命令行将基于 NFS 的存储附加到虚拟机,请使用以下方法之一:
-
在创建新虚拟机时,使用
Create virtual machine
对话框中的Storage
选项创建并附加新磁盘。具体步骤请参阅 使用 web 控制台创建虚拟机。 - 对于现有虚拟机,创建基于 NFS 的存储卷并将其附加到虚拟机。具体步骤请查看以下步骤。
先决条件
确定您的管理程序支持基于 NFS 的存储池:
virsh pool-capabilities | grep "<value>nfs</value>"
# virsh pool-capabilities | grep "<value>nfs</value>"
Copy to Clipboard Copied! 如果该命令显示任何输出结果,则代表支持基于 NFS 的池。
- 您必须有一个可以使用的可用 NFS。详情请查看 挂载 NFS 共享
流程
如果还没有新的基于 NFS 的存储池,请创建和设置新的存储池。
定义并创建 NFS 类型的存储池。例如,要创建一个名为
guest_images_netfs
的存储池,它使用 IP 为111.222.111.222
的 NFS 服务器,使用目标目录/var/lib/libvirt/images/nfspool
挂载在服务器目录/home/net_mount
上:virsh pool-define-as --name guest_images_netfs \ --type netfs --source-host='111.222.111.222' \ --source-path='/home/net_mount' --source-format='nfs' \ --target='/var/lib/libvirt/images/nfspool'
# virsh pool-define-as --name guest_images_netfs \ --type netfs --source-host='111.222.111.222' \ --source-path='/home/net_mount' --source-format='nfs' \ --target='/var/lib/libvirt/images/nfspool' Pool guest_images_netfs defined
Copy to Clipboard Copied! 根据您之前定义的配置创建存储池。
virsh pool-build guest_images_netfs
# virsh pool-build guest_images_netfs Pool guest_images_netfs built
Copy to Clipboard Copied! 可选:验证是否已创建池。
virsh pool-list --all
# virsh pool-list --all Name State Autostart ------------------------------------------- default active yes guest_images_netfs inactive no
Copy to Clipboard Copied! 启动存储池。
virsh pool-start guest_images_netfs
# virsh pool-start guest_images_netfs Pool guest_images_netfs started
Copy to Clipboard Copied! 可选:打开自动启动。
默认情况下,使用
virsh
定义的存储池不会被设置为在每次虚拟化服务启动时自动启动。使用virsh pool-autostart
命令将存储池配置为 autostart。virsh pool-autostart guest_images_netfs
# virsh pool-autostart guest_images_netfs Pool guest_images_netfs marked as autostarted
Copy to Clipboard Copied!
创建基于 NFS 的存储卷。例如,以下命令会创建一个名为
vm-disk1
的 20 GBqcow2
卷,并根据guest_images_netfs
存储池:virsh vol-create-as --pool guest_images_netfs --name vm-disk1 --capacity 20GB --format qcow2
# virsh vol-create-as --pool guest_images_netfs --name vm-disk1 --capacity 20GB --format qcow2 Vol vm-disk1 created
Copy to Clipboard Copied! 将存储卷作为虚拟磁盘附加到虚拟机。
找到您创建的存储卷。要做到这一点,检查卷所属的存储池:
virsh vol-list --pool guest_images_netfs --details
# virsh vol-list --pool guest_images_netfs --details Name Path Type Capacity Allocation ------------------------------------------------------------------------------------- vm-disk1 /var/lib/libvirt/images/nfspool/vm-disk1 file 20.00 GiB 196.00 KiB
Copy to Clipboard Copied! 找到在要附加磁盘的虚拟机中使用哪些目标设备:
virsh domblklist --details <vm-name> Type Device Target Source ---------------------------------------------------------------- file disk *vda /home/VirtualMachines/vm-name.qcow2
# virsh domblklist --details <vm-name> Type Device Target Source ---------------------------------------------------------------- file disk *vda /home/VirtualMachines/vm-name.qcow2 file cdrom vdb -
Copy to Clipboard Copied! - 可选:检查磁盘的一致性,以避免出现数据崩溃或磁盘碎片的问题。具体步骤请参阅 检查虚拟磁盘的一致性。
使用
virsh attach-disk
命令将磁盘附加到虚拟机。提供虚拟机中没有使用的目标设备。例如,以下命令将之前创建的
vm-disk1
作为vdc
设备附加到testguest1
虚拟机:virsh attach-disk testguest1 /var/lib/libvirt/images/nfspool/vm-disk1 vdc --persistent
# virsh attach-disk testguest1 /var/lib/libvirt/images/nfspool/vm-disk1 vdc --persistent
Copy to Clipboard Copied!
验证
检查您附加磁盘的虚拟机 XML 配置,以查看配置是否正确。
virsh dumpxml testguest1
# virsh dumpxml testguest1 ... <disk type='file' device='disk'> <driver name='qemu' type='qcow2' discard='unmap'/> <source file='/var/lib/libvirt/images/nfspool/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> ...
Copy to Clipboard Copied! - 在虚拟机的客户机操作系统中,确认磁盘映像已作为未格式化和未分配的磁盘提供。
13.4.8. 使用 web 控制台将基于 NFS 的存储附加到虚拟机
要为虚拟机(VM)提供网络存储,您可以根据 Network File Sytem (NFS)服务器使用存储卷。
要使用 Web 控制台将基于 NFS 的存储附加到虚拟机,请使用以下方法之一:
-
在创建新虚拟机时,使用
Create virtual machine
对话框中的Storage
选项创建并附加新磁盘。具体步骤请参阅 使用 web 控制台创建虚拟机。 - 对于现有虚拟机,创建基于 NFS 的存储卷并将其附加到虚拟机。具体步骤请查看以下步骤。
先决条件
已安装 RHEL 10 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
- Web 控制台 VM 插件 已安装在您的系统上。
流程
登录到 RHEL 10 web 控制台。
详情请参阅 登录到 web 控制台。
如果还没有新的基于 NFS 的存储池,请创建和设置新的存储池。
-
点 Virtual Machines 接口顶部的
Storage Pools
。→Create storage pool
。 - 在 Create Storage Pool 对话框中,输入存储池的名称。
在 Type 下拉菜单中选择 Network File system。
注意如果您在下拉菜单中选择 网络文件系统 选项,则您的管理程序不支持基于 NFS 的存储池。
输入以下信息:
- 目标路径 - 指定目标的路径。这将是用于存储池的路径。
- 主机 - 挂载点所在的网络服务器的主机名。这可以是主机名或 IP 地址。
- 源路径 - 网络服务器中使用的目录。
- 启动」 - 主机引导时是否启动存储池。
点击
。创建存储池时,Create Storage Pool 对话框将关闭,新的存储池会出现在存储池列表中。
-
点 Virtual Machines 接口顶部的
基于现有存储池创建新存储卷。
-
在 Storage Pools 窗口中,点击您要创建存储卷的存储池。→
Storage Volumes
Create volume
。 在 Create Storage Volume 对话框中输入以下信息:
- Name - 存储卷的名称。
- size - MiB 或 GiB 存储卷的大小。
-
格式 - 存储卷的格式。支持的类型为
qcow2
和raw
。
- 点击 。
-
在 Storage Pools 窗口中,点击您要创建存储卷的存储池。→
- 可选:检查磁盘的一致性,以避免出现数据崩溃或磁盘碎片的问题。具体步骤请参阅 检查虚拟磁盘的一致性。
将创建的存储卷作为磁盘添加到虚拟机。
在
接口中,点击您要为其创建并附加新磁盘的虚拟机。此时将打开一个新页面,其中包含关于所选虚拟机基本信息的概述部分,以及用于访问虚拟机的图形界面的控制台部分。
- 滚动到 。
- 在 Disks 部分中,单击 。
- 在 Add disks 对话框中,选择 。
- 选择您要用于磁盘的存储池和存储卷。
选择磁盘是否持久
注意临时磁盘只能添加到正在运行的虚拟机中。
- 可选:点 并调整存储卷的缓存类型、总线类型和磁盘标识符。
- 点 。
验证
- 在虚拟机的客户机操作系统中,确认磁盘映像已作为未格式化和未分配的磁盘提供。