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 选项。具体步骤请参阅创建虚拟机

流程

  1. 可选:如果要将虚拟磁盘创建为存储卷,但您不想在主机上使用 默认镜像 存储池或另一个现有存储池,请创建和设置新的目录的存储池。

    1. 配置目录类型存储池。例如,要创建一个名为 guest_images_dir 的存储池,它使用 /guest_images 目录:

      # virsh pool-define-as guest_images_dir dir --target "/guest_images"
      Pool guest_images_dir defined
      Copy to Clipboard
    2. 根据您之前定义的配置,为存储池创建目标路径。

      # virsh pool-build guest_images_dir
        Pool guest_images_dir built
      Copy to Clipboard
    3. 启动存储池。

      # virsh pool-start guest_images_dir
        Pool guest_images_dir started
      Copy to Clipboard
    4. 可选:将存储池设置为在主机引导时启动。

      # virsh pool-autostart guest_images_dir
        Pool guest_images_dir marked as autostarted
      Copy to Clipboard
    5. 可选:验证存储池是否处于 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
      Copy to Clipboard
  2. 创建基于文件的虚拟磁盘。要做到这一点,请使用以下方法之一:

    • 要快速创建不是由 libvirt 管理的基于文件的虚拟机磁盘,请使用 qemu-img 工具。

      例如,以下命令会创建一个名为 test-imageqcow2 磁盘镜像,大小为 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
      Copy to Clipboard
    • 要创建由 libvirt 管理的基于文件的虚拟机磁盘,请根据基于目录的现有存储池将磁盘定义为存储卷。

      例如,以下命令创建一个名为 vm-disk1 的 20 GB qcow2 卷,并基于 guest_images_dir 存储池:

      # virsh vol-create-as --pool guest_images_dir --name vm-disk1 --capacity 20GB --format qcow2
      
      Vol vm-disk1 created
      Copy to Clipboard
  3. 找到您创建的虚拟磁盘:

    • 对于使用 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
      Copy to Clipboard
  4. 找到在要附加磁盘的虚拟机中使用哪些目标设备:

    # virsh domblklist --details <vm-name> Type Device Target Source ---------------------------------------------------------------- file disk *vda      /home/VirtualMachines/vm-name.qcow2
     file   cdrom    vdb      -
    Copy to Clipboard
  5. 可选:检查磁盘的一致性,以避免出现数据崩溃或磁盘碎片的问题。具体步骤请参阅 检查虚拟磁盘的一致性
  6. 使用 virsh attach-disk 命令将磁盘附加到虚拟机。提供虚拟机中没有使用的目标设备。

    例如,以下命令将之前创建的 test-disk1 作为 vdc 设备附加到 testguest1 虚拟机:

    # virsh attach-disk testguest1 /guest-images/vm-disk1 vdc --persistent
    Copy to Clipboard

验证

  1. 检查您附加磁盘的虚拟机 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>
    ...
    Copy to Clipboard
  2. 在虚拟机的客户机操作系统中,确认磁盘映像已作为未格式化和未分配的磁盘提供。

13.4.2. 使用 web 控制台将基于文件的虚拟磁盘附加到虚拟机

要为虚拟机提供本地存储,最简单的选项通常是附加带有 .qcow2.raw 格式的基于文件的虚拟磁盘。

为此,请在由 libvirt 管理的基于目录的存储池中创建基于文件的存储卷。当在 RHEL 10 主机上创建第一个虚拟机时,会自动创建基于目录的默认存储卷。此存储池的名称基于保存磁盘镜像的目录名称。例如,默认情况下,在 libvirt 的系统 会话中,磁盘镜像保存在 /var/lib/libvirt/images/ 目录中,存储池名为 images

注意

在 web 控制台中创建新虚拟机时,也可以创建并附加基于文件的虚拟磁盘。为此,请在 Create virtual machine 对话框中使用 Storage 选项。具体步骤请参阅 使用 web 控制台创建虚拟机

先决条件

流程

  1. 登录到 RHEL 10 web 控制台。

    详情请参阅 登录到 web 控制台

  2. 可选:如果您不想使用默认镜像存储池来创建新虚拟磁盘,请创建新的存储池。

    1. Virtual Machines 接口顶部的 Storage Pools。→ Create storage pool
    2. Create Storage Pool 对话框中,输入存储池的名称。
    3. Type 下拉菜单中选择 Filesystem directory
    4. 输入以下信息:

      • Target path - 存储池的位置。
      • 启动」 - 主机引导时是否启动存储池。
    5. 点击 Create

      创建存储池时,Create Storage Pool 对话框将关闭,新的存储池会出现在存储池列表中。

  3. 基于现有存储池创建新存储卷。

    1. Storage Pools 窗口中,点击您要创建存储卷的存储池。→ Storage Volumes Create volume
    2. Create Storage Volume 对话框中输入以下信息:

      • Name - 存储卷的名称。
      • size - MiB 或 GiB 存储卷的大小。
      • 格式 - 存储卷的格式。支持的类型为 qcow2raw
    3. 点击 Create
  4. 可选:检查磁盘的一致性,以避免出现数据崩溃或磁盘碎片的问题。具体步骤请参阅 检查虚拟磁盘的一致性
  5. 将创建的存储卷作为磁盘添加到虚拟机。

    1. Virtual Machines 接口中,点击您要为其创建并附加新磁盘的虚拟机。

      此时将打开一个新页面,其中包含关于所选虚拟机基本信息的概述部分,以及用于访问虚拟机的图形界面的控制台部分。

    2. 滚动到 Disks
    3. Disks 部分中,单击 Add disk
    4. Add disks 对话框中,选择 Use existing
    5. 选择您要用于磁盘的存储池和存储卷。
    6. 选择磁盘是否持久

      注意

      临时磁盘只能添加到正在运行的虚拟机中。

    7. 可选:点 Show additional options 并调整存储卷的缓存类型、总线类型和磁盘标识符。
    8. Add

验证

  • 在虚拟机的客户机操作系统中,确认磁盘映像已作为未格式化和未分配的磁盘提供。

13.4.3. 使用命令行将基于磁盘的存储附加到虚拟机

要为虚拟机(VM)提供本地存储,您可以使用基于磁盘的磁盘镜像。这种类型的磁盘镜像基于主机上的磁盘分区,并使用 .qcow2.raw 格式。

要使用命令行将基于磁盘的存储附加到虚拟机,请使用以下方法之一:

  • 创建新虚拟机时,使用 the-disk 选项创建并附加新磁盘作为 virt-install 命令的一部分。具体步骤请参阅创建虚拟机
  • 对于现有虚拟机,创建基于磁盘的存储卷并将其附加到虚拟机。具体步骤请查看以下步骤。

先决条件

  • 确定您的管理程序支持基于磁盘的存储池:

    # virsh pool-capabilities | grep "'disk' supported='yes'"
    Copy to Clipboard

    如果命令显示任何输出结果,则代表支持基于磁盘的池。

  • 准备一个设备,以此作为存储池的基础。因此,首选分区(例如 /dev/sdb1)或 LVM 卷。如果您提供对整个磁盘或块设备(例如 /dev/sdb)的写入访问权限的虚拟机,则虚拟机可能会对其分区或创建自己的 LVM 组。这可能会导致主机上的系统错误。

    但是,如果您需要为存储池使用整个块设备,红帽建议保护设备上的任何重要分区不受 os-prober 功能的影响。要做到这一点,编辑 /etc/default/grub 文件,并应用以下配置之一:

    • 禁用 os-prober

      GRUB_DISABLE_OS_PROBER=true
      Copy to Clipboard
    • 防止 os-prober 发现您要使用的分区。例如:

      GRUB_OS_PROBER_SKIP_LIST="5ef6313a-257c-4d43@/dev/sdb1"
      Copy to Clipboard
  • 在创建存储池前,备份所选存储设备上的任何数据。根据所使用的 libvirt 版本,在存储池中指定一个磁盘可能会重新格式化并清除当前存储在磁盘设备上的所有数据。

流程

  1. 创建并设置基于磁盘的新存储池(如果还没有池)。

    1. 定义并创建磁盘类型存储池。以下示例创建一个名为 guest_images_disk 的存储池,它使用 /dev/sdb 设备,并挂载在 /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
    2. 为预格式化的文件系统存储池创建存储池目标路径,初始化存储源设备,并定义数据的格式。

      # virsh pool-build guest_images_disk
        Pool guest_images_disk built
      Copy to Clipboard
    3. 可选:验证是否已创建池。

      # virsh pool-list --all
      
        Name                 State      Autostart
        -----------------------------------------
        default              active     yes
        guest_images_disk    inactive   no
      Copy to Clipboard
    4. 启动存储池。

      # virsh pool-start guest_images_disk
        Pool guest_images_disk started
      Copy to Clipboard
      注意

      virsh pool-start 命令只用于持久存储池。临时存储池创建时会自动启动。

    5. 可选:打开自动启动。

      默认情况下,使用 virsh 定义的存储池不会被设置为在每次虚拟化服务启动时自动启动。使用 virsh pool-autostart 命令将存储池配置为 autostart。

      # virsh pool-autostart guest_images_disk
        Pool guest_images_disk marked as autostarted
      Copy to Clipboard
  2. 创建基于磁盘的存储卷。例如,以下命令创建一个名为 vm-disk1 的 20 GB qcow2 卷,并基于 guest_images_disk 存储池:

    # virsh vol-create-as --pool guest_images_disk --name sdb1 --capacity 20GB --format extended
    
    Vol vm-disk1 created
    Copy to Clipboard
  3. 将存储卷作为虚拟磁盘附加到虚拟机。

    1. 找到您创建的存储卷。要做到这一点,检查卷所属的存储池:

      # 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
    2. 找到在要附加磁盘的虚拟机中使用哪些目标设备:

      # virsh domblklist --details <vm-name> Type Device Target Source ---------------------------------------------------------------- file disk *vda      /home/VirtualMachines/vm-name.qcow2
       file   cdrom    vdb      -
      Copy to Clipboard
    3. 可选:检查磁盘的一致性,以避免出现数据崩溃或磁盘碎片的问题。具体步骤请参阅 检查虚拟磁盘的一致性
    4. 使用 virsh attach-disk 命令将磁盘附加到虚拟机。提供虚拟机中没有使用的目标设备。

      例如,以下命令将之前创建的 vm-disk1 作为 vdc 设备附加到 testguest1 虚拟机:

      # virsh attach-disk testguest1 /dev/sdb1 vdc --persistent
      Copy to Clipboard

验证

  1. 检查您附加磁盘的虚拟机 XML 配置,以查看配置是否正确。

    # 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
  2. 在虚拟机的客户机操作系统中,确认磁盘映像已作为未格式化和未分配的磁盘提供。

13.4.4. 使用 web 控制台将基于磁盘的存储附加到虚拟机

要为虚拟机提供本地存储,最简单的选项通常是附加带有 .qcow2.raw 格式的基于文件的虚拟磁盘。

要使用 Web 控制台将基于磁盘的存储附加到虚拟机,请使用以下方法之一:

  • 在创建新虚拟机时,使用 Create virtual machine 对话框中的 Storage 选项创建并附加新磁盘。具体步骤请参阅 使用 web 控制台创建虚拟机
  • 对于现有虚拟机,创建基于磁盘的存储卷并将其附加到虚拟机。具体步骤请查看以下步骤。

先决条件

流程

  1. 登录到 RHEL 10 web 控制台。

    详情请参阅 登录到 web 控制台

  2. 创建并设置基于磁盘的新存储池(如果还没有池)。

    1. Virtual Machines 接口顶部的 Storage Pools。→ Create storage pool
    2. Create Storage Pool 对话框中,输入存储池的名称。
    3. Type 下拉菜单中选择 物理磁盘设备

      注意

      如果您在下拉菜单中选择 物理磁盘设备 选项,则您的管理程序不支持基于磁盘的存储池。

    4. 输入以下信息:

      • 目标路径 - 指定目标设备的路径。这将是用于存储池的路径。
      • 源路径 - 指定存储设备的路径。例如: /dev/sdb
      • 格式 - 分区表的类型。
      • 启动」 - 主机引导时是否启动存储池。
    5. 点击 Create

      创建存储池时,Create Storage Pool 对话框将关闭,新的存储池会出现在存储池列表中。

  3. 基于现有存储池创建新存储卷。

    1. Storage Pools 窗口中,点击您要创建存储卷的存储池。→ Storage Volumes Create volume
    2. Create Storage Volume 对话框中输入以下信息:

      • Name - 存储卷的名称。
      • size - MiB 或 GiB 存储卷的大小。
      • 格式 - 存储卷的格式。
    3. 点击 Create
  4. 可选:检查磁盘的一致性,以避免出现数据崩溃或磁盘碎片的问题。具体步骤请参阅 检查虚拟磁盘的一致性
  5. 将创建的存储卷作为磁盘添加到虚拟机。

    1. Virtual Machines 接口中,点击您要为其创建并附加新磁盘的虚拟机。

      此时将打开一个新页面,其中包含关于所选虚拟机基本信息的概述部分,以及用于访问虚拟机的图形界面的控制台部分。

    2. 滚动到 Disks
    3. Disks 部分中,单击 Add disk
    4. Add disks 对话框中,选择 Use existing
    5. 选择您要用于磁盘的存储池和存储卷。
    6. 选择磁盘是否持久

      注意

      临时磁盘只能添加到正在运行的虚拟机中。

    7. 可选:点 Show additional options 并调整存储卷的缓存类型、总线类型和磁盘标识符。
    8. Add

验证

  • 在虚拟机的客户机操作系统中,确认磁盘映像已作为未格式化和未分配的磁盘提供。

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'"
    Copy to Clipboard

    如果命令显示任何输出结果,则支持基于 LVM 的池。

  • 确保主机上存在 LVM 卷组。有关创建 LVM 卷组的步骤,请参阅 创建 LVM 卷组
  • 在创建存储池前,备份所选存储设备上的任何数据。将磁盘分区专用于存储池将重新格式化并擦除当前存储在磁盘设备上的所有数据。

流程

  1. 如果还没有新的基于 LVM 的存储池,请创建和设置新的存储池。

    1. 定义 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
      Copy to Clipboard
    2. 根据您之前定义的配置创建存储池。

      # virsh pool-build guest_images_lvm
        Pool guest_images_lvm built
      Copy to Clipboard
    3. 可选:验证是否已创建池。

      # virsh pool-list --all
      
        Name                   State      Autostart
        -------------------------------------------
        default                active     yes
        guest_images_lvm       inactive   no
      Copy to Clipboard
    4. 启动存储池。

      # virsh pool-start guest_images_lvm
        Pool guest_images_lvm started
      Copy to Clipboard
      注意

      virsh pool-start 命令只用于持久存储池。临时存储池创建时会自动启动。

    5. 可选:打开自动启动。

      默认情况下,使用 virsh 定义的存储池不会被设置为在每次虚拟化服务启动时自动启动。使用 virsh pool-autostart 命令将存储池配置为 autostart。

      # virsh pool-autostart guest_images_lvm
        Pool guest_images_lvm marked as autostarted
      Copy to Clipboard
  2. 创建基于 LVM 的存储卷。例如,以下命令创建一个名为 vm-disk1 的 20 GB qcow2 卷,并基于 guest_images_lvm 存储池:

    # virsh vol-create-as --pool guest_images_lvm --name vm-disk1 --capacity 20GB --format qcow2
    
    Vol vm-disk1 created
    Copy to Clipboard
  3. 将存储卷作为虚拟磁盘附加到虚拟机。

    1. 找到您创建的存储卷。要做到这一点,检查卷所属的存储池:

      # 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
    2. 找到在要附加磁盘的虚拟机中使用哪些目标设备:

      # virsh domblklist --details <vm-name> Type Device Target Source ---------------------------------------------------------------- file disk *vda      /home/VirtualMachines/vm-name.qcow2
       file   cdrom    vdb      -
      Copy to Clipboard
    3. 可选:检查磁盘的一致性,以避免出现数据崩溃或磁盘碎片的问题。具体步骤请参阅 检查虚拟磁盘的一致性
    4. 使用 virsh attach-disk 命令将磁盘附加到虚拟机。提供虚拟机中没有使用的目标设备。

      例如,以下命令将之前创建的 vm-disk1 作为 vdc 设备附加到 testguest1 虚拟机:

      # virsh attach-disk testguest1 /dev/guest_images_lvm/vm-disk1 vdc --persistent
      Copy to Clipboard

验证

  1. 检查您附加磁盘的虚拟机 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>
    
    ...
    Copy to Clipboard
  2. 在虚拟机的客户机操作系统中,确认磁盘映像已作为未格式化和未分配的磁盘提供。

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 命令激活一个新分区或设备,分区将被格式化,所有数据都被清除。在这些过程中,如果您使用主机的现有卷组,则不会删除任何内容。

先决条件

流程

  1. 登录到 RHEL 10 web 控制台。

    详情请参阅 登录到 web 控制台

  2. 如果还没有新的目录,请创建并设置一个新的基于目录的存储池。

    1. Virtual Machines 接口顶部的 Storage Pools。→ Create storage pool
    2. Create Storage Pool 对话框中,输入存储池的名称。
    3. Type 下拉菜单中选择 LVM 卷组

      注意

      如果您在下拉菜单中选择 LVM 卷组 选项,则您的管理程序不支持基于磁盘的存储池。

    4. 输入以下信息:

      • 源卷组 - 要使用的 LVM 卷组名称。
      • 启动」 - 主机引导时是否启动存储池。
    5. 点击 Create

      创建存储池时,Create Storage Pool 对话框将关闭,新的存储池会出现在存储池列表中。

  3. 基于现有存储池创建新存储卷。

    1. Storage Pools 窗口中,点击您要创建存储卷的存储池。→ Storage Volumes Create volume
    2. Create Storage Volume 对话框中输入以下信息:

      • Name - 存储卷的名称。
      • size - MiB 或 GiB 存储卷的大小。
      • 格式 - 存储卷的格式。支持的类型为 qcow2raw
    3. 点击 Create
  4. 可选:检查磁盘的一致性,以避免出现数据崩溃或磁盘碎片的问题。具体步骤请参阅 检查虚拟磁盘的一致性
  5. 将创建的存储卷作为磁盘添加到虚拟机。

    1. Virtual Machines 接口中,点击您要为其创建并附加新磁盘的虚拟机。

      此时将打开一个新页面,其中包含关于所选虚拟机基本信息的概述部分,以及用于访问虚拟机的图形界面的控制台部分。

    2. 滚动到 Disks
    3. Disks 部分中,单击 Add disk
    4. Add disks 对话框中,选择 Use existing
    5. 选择您要用于磁盘的存储池和存储卷。
    6. 选择磁盘是否持久

      注意

      临时磁盘只能添加到正在运行的虚拟机中。

    7. 可选:点 Show additional options 并调整存储卷的缓存类型、总线类型和磁盘标识符。
    8. Add

验证

  • 在虚拟机的客户机操作系统中,确认磁盘映像已作为未格式化和未分配的磁盘提供。

13.4.7. 使用命令行将基于 NFS 的存储附加到虚拟机

要为虚拟机(VM)提供网络存储,您可以根据 Network File Sytem (NFS)服务器使用存储卷。

要使用命令行将基于 NFS 的存储附加到虚拟机,请使用以下方法之一:

  • 在创建新虚拟机时,使用 Create virtual machine 对话框中的 Storage 选项创建并附加新磁盘。具体步骤请参阅 使用 web 控制台创建虚拟机
  • 对于现有虚拟机,创建基于 NFS 的存储卷并将其附加到虚拟机。具体步骤请查看以下步骤。

先决条件

  • 确定您的管理程序支持基于 NFS 的存储池:

    # virsh pool-capabilities | grep "<value>nfs</value>"
    Copy to Clipboard

    如果该命令显示任何输出结果,则代表支持基于 NFS 的池。

  • 您必须有一个可以使用的可用 NFS。详情请查看 挂载 NFS 共享

流程

  1. 如果还没有新的基于 NFS 的存储池,请创建和设置新的存储池。

    1. 定义并创建 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'
      
      Pool guest_images_netfs defined
      Copy to Clipboard
    2. 根据您之前定义的配置创建存储池。

      # virsh pool-build guest_images_netfs
        Pool guest_images_netfs built
      Copy to Clipboard
    3. 可选:验证是否已创建池。

      # virsh pool-list --all
      
        Name                   State      Autostart
        -------------------------------------------
        default                active     yes
        guest_images_netfs     inactive   no
      Copy to Clipboard
    4. 启动存储池。

      # virsh pool-start guest_images_netfs
        Pool guest_images_netfs started
      Copy to Clipboard
    5. 可选:打开自动启动。

      默认情况下,使用 virsh 定义的存储池不会被设置为在每次虚拟化服务启动时自动启动。使用 virsh pool-autostart 命令将存储池配置为 autostart。

      # virsh pool-autostart guest_images_netfs
        Pool guest_images_netfs marked as autostarted
      Copy to Clipboard
  2. 创建基于 NFS 的存储卷。例如,以下命令会创建一个名为 vm-disk1 的 20 GB qcow2 卷,并根据 guest_images_netfs 存储池:

    # virsh vol-create-as --pool guest_images_netfs --name vm-disk1 --capacity 20GB --format qcow2
    
    Vol vm-disk1 created
    Copy to Clipboard
  3. 将存储卷作为虚拟磁盘附加到虚拟机。

    1. 找到您创建的存储卷。要做到这一点,检查卷所属的存储池:

      # 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
    2. 找到在要附加磁盘的虚拟机中使用哪些目标设备:

      # virsh domblklist --details <vm-name> Type Device Target Source ---------------------------------------------------------------- file disk *vda      /home/VirtualMachines/vm-name.qcow2
       file   cdrom    vdb      -
      Copy to Clipboard
    3. 可选:检查磁盘的一致性,以避免出现数据崩溃或磁盘碎片的问题。具体步骤请参阅 检查虚拟磁盘的一致性
    4. 使用 virsh attach-disk 命令将磁盘附加到虚拟机。提供虚拟机中没有使用的目标设备。

      例如,以下命令将之前创建的 vm-disk1 作为 vdc 设备附加到 testguest1 虚拟机:

      # virsh attach-disk testguest1 /var/lib/libvirt/images/nfspool/vm-disk1 vdc --persistent
      Copy to Clipboard

验证

  1. 检查您附加磁盘的虚拟机 XML 配置,以查看配置是否正确。

    # 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
  2. 在虚拟机的客户机操作系统中,确认磁盘映像已作为未格式化和未分配的磁盘提供。

13.4.8. 使用 web 控制台将基于 NFS 的存储附加到虚拟机

要为虚拟机(VM)提供网络存储,您可以根据 Network File Sytem (NFS)服务器使用存储卷。

要使用 Web 控制台将基于 NFS 的存储附加到虚拟机,请使用以下方法之一:

  • 在创建新虚拟机时,使用 Create virtual machine 对话框中的 Storage 选项创建并附加新磁盘。具体步骤请参阅 使用 web 控制台创建虚拟机
  • 对于现有虚拟机,创建基于 NFS 的存储卷并将其附加到虚拟机。具体步骤请查看以下步骤。

先决条件

流程

  1. 登录到 RHEL 10 web 控制台。

    详情请参阅 登录到 web 控制台

  2. 如果还没有新的基于 NFS 的存储池,请创建和设置新的存储池。

    1. Virtual Machines 接口顶部的 Storage Pools。→ Create storage pool
    2. Create Storage Pool 对话框中,输入存储池的名称。
    3. Type 下拉菜单中选择 Network File system

      注意

      如果您在下拉菜单中选择 网络文件系统 选项,则您的管理程序不支持基于 NFS 的存储池。

    4. 输入以下信息:

      • 目标路径 - 指定目标的路径。这将是用于存储池的路径。
      • 主机 - 挂载点所在的网络服务器的主机名。这可以是主机名或 IP 地址。
      • 源路径 - 网络服务器中使用的目录。
      • 启动」 - 主机引导时是否启动存储池。
    5. 点击 Create

      创建存储池时,Create Storage Pool 对话框将关闭,新的存储池会出现在存储池列表中。

  3. 基于现有存储池创建新存储卷。

    1. Storage Pools 窗口中,点击您要创建存储卷的存储池。→ Storage Volumes Create volume
    2. Create Storage Volume 对话框中输入以下信息:

      • Name - 存储卷的名称。
      • size - MiB 或 GiB 存储卷的大小。
      • 格式 - 存储卷的格式。支持的类型为 qcow2raw
    3. 点击 Create
  4. 可选:检查磁盘的一致性,以避免出现数据崩溃或磁盘碎片的问题。具体步骤请参阅 检查虚拟磁盘的一致性
  5. 将创建的存储卷作为磁盘添加到虚拟机。

    1. Virtual Machines 接口中,点击您要为其创建并附加新磁盘的虚拟机。

      此时将打开一个新页面,其中包含关于所选虚拟机基本信息的概述部分,以及用于访问虚拟机的图形界面的控制台部分。

    2. 滚动到 Disks
    3. Disks 部分中,单击 Add disk
    4. Add disks 对话框中,选择 Use existing
    5. 选择您要用于磁盘的存储池和存储卷。
    6. 选择磁盘是否持久

      注意

      临时磁盘只能添加到正在运行的虚拟机中。

    7. 可选:点 Show additional options 并调整存储卷的缓存类型、总线类型和磁盘标识符。
    8. Add

验证

  • 在虚拟机的客户机操作系统中,确认磁盘映像已作为未格式化和未分配的磁盘提供。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat