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


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

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

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

先决条件

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

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

    如果该命令显示任何输出结果,则代表支持基于 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
    2. 根据您之前定义的配置创建存储池。

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

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

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

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

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

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

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

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

验证

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

学习

尝试、购买和销售

社区

關於紅帽

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

让开源更具包容性

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

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部