12.2. 使用 CLI 管理虚拟机存储池
您可以使用 CLI 管理存储池的以下方面来为虚拟机分配存储:
12.2.1. 使用 CLI 查看存储池信息
通过使用 CLI,您可以查看所有存储池的列表,其中包含有关存储池的有限或完整详情。您还可以过滤列出的存储池。
流程
使用
virsh pool-list
命令来查看存储池信息。# virsh pool-list --all --details Name State Autostart Persistent Capacity Allocation Available default running yes yes 48.97 GiB 23.93 GiB 25.03 GiB Downloads running yes yes 175.62 GiB 62.02 GiB 113.60 GiB RHEL-Storage-Pool running yes yes 214.62 GiB 93.02 GiB 168.60 GiB
其它资源
-
virsh pool-list --help
命令
12.2.2. 使用 CLI 创建基于目录的存储池
基于目录的存储池是基于现有挂载的文件系统中的目录。例如,当您想要将文件系统上的剩余空间用于其他用途时,这非常有用。您可以使用 virsh
工具来创建基于目录的存储池。
先决条件
确定您的管理程序支持目录存储池:
# virsh pool-capabilities | grep "'dir' supported='yes'"
如果命令显示任何输出结果,则代表支持目录池。
流程
创建存储池
使用
virsh pool-define-as
命令来定义和创建目录类型的存储池。例如,要创建使用 /guest_images 目录的名为guest_images_dir
的存储池:# virsh pool-define-as guest_images_dir dir --target "/guest_images" Pool guest_images_dir defined
如果您已经有要创建的存储池的 XML 配置,也可以根据 XML 定义池。详情请参阅 基于目录的存储池参数。
创建存储池目标路径
使用
virsh pool-build
命令,来为事先格式化的文件系统存储池创建存储池目标路径,初始化存储源设备,并定义数据格式。# virsh pool-build guest_images_dir Pool guest_images_dir built # ls -la /guest_images total 8 drwx------. 2 root root 4096 May 31 19:38 . dr-xr-xr-x. 25 root root 4096 May 31 19:38 ..
验证是否已创建池
使用
virsh pool-list
命令来验证池是否已被创建。# virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images_dir inactive no
启动存储池
使用
virsh pool-start
命令来挂载存储池。# virsh pool-start guest_images_dir Pool guest_images_dir started
注意virsh pool-start
命令仅适用于持久性存储池。临时存储池创建时会自动启动。可选:打开自动启动。
默认情况下,使用
virsh
命令定义的存储池不会被设置为在每次虚拟化服务启动时自动启动。使用virsh pool-autostart
命令将存储池配置为自动启动。# virsh pool-autostart guest_images_dir Pool guest_images_dir marked as autostarted
验证
使用
virsh pool-info
命令来验证存储池是否处于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
12.2.3. 使用 CLI 创建基于磁盘的存储池
在基于磁盘的存储池中,池是基于磁盘分区的。例如,当您希望整个磁盘分区专门用于虚拟机(VM)存储时,这非常有用。您可以使用 virsh
工具来创建基于磁盘的存储池。
先决条件
确定您的管理程序支持基于磁盘的存储池:
# virsh pool-capabilities | grep "'disk' supported='yes'"
如果命令显示任何输出结果,则代表支持基于磁盘的池。
准备一个设备,以此作为存储池的基础。因此,最好使用分区(例如
/dev/sdb1
)或 LVM 卷。如果您提供了一个虚拟机,对整个磁盘或块设备(例如:/dev/sdb
)具有写权限,则虚拟机可以对其进行分区,或者在其上创建自己的 LVM 组。这可能会导致主机上的系统错误。但是,如果您需要将整个块设备用于存储池,红帽建议保护设备上的任何重要分区不受 GRUB 的
os-prober
功能的影响。要做到这一点,编辑/etc/default/grub
文件,并应用以下配置之一:禁用
os-prober
。GRUB_DISABLE_OS_PROBER=true
防止
os-prober
发现特定的分区。例如:GRUB_OS_PROBER_SKIP_LIST="5ef6313a-257c-4d43@/dev/sdb1"
-
在创建存储池前,备份所选存储设备上的任何数据。根据所使用的
libvirt
版本,给存储池指定专用的磁盘可能会重新格式化并擦除当前存储在磁盘设备上的所有数据。
流程
创建存储池
使用
virsh pool-define-as
命令来定义和创建磁盘类型的存储池。以下示例创建一个名为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
如果您已经有要创建的存储池的 XML 配置,也可以根据 XML 定义池。详情请参阅 基于磁盘的存储池参数。
创建存储池目标路径
使用
virsh pool-build
命令,为事先格式化的文件系统存储池创建存储池目标路径、初始化存储源设备,并定义数据格式。# virsh pool-build guest_images_disk Pool guest_images_disk built
注意只有基于磁盘、基于文件系统和逻辑存储池才需要构建目标路径。如果
libvirt
检测到源存储设备的数据格式与所选存储池类型不同,则构建会失败,除非指定了overwrite
选项。验证是否已创建池
使用
virsh pool-list
命令来验证池是否已被创建。# virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images_disk inactive no
启动存储池
使用
virsh pool-start
命令来挂载存储池。# virsh pool-start guest_images_disk Pool guest_images_disk started
注意virsh pool-start
命令仅适用于持久性存储池。临时存储池创建时会自动启动。可选:打开自动启动。
默认情况下,使用
virsh
命令定义的存储池不会被设置为在每次虚拟化服务启动时自动启动。使用virsh pool-autostart
命令将存储池配置为自动启动。# virsh pool-autostart guest_images_disk Pool guest_images_disk marked as autostarted
验证
使用
virsh pool-info
命令来验证存储池是否处于running
状态。检查报告的大小是否与预期一样,以及是否正确配置了自动启动。# virsh pool-info guest_images_disk Name: guest_images_disk UUID: c7466869-e82a-a66c-2187-dc9d6f0877d0 State: running Persistent: yes Autostart: yes Capacity: 458.39 GB Allocation: 197.91 MB Available: 458.20 GB
12.2.4. 使用 CLI 创建基于文件系统的存储池
当您要在未挂载的文件系统上创建存储池时,请使用基于文件系统的存储池。此存储池基于给定的文件系统挂载点。您可以使用 virsh
工具来创建基于文件系统的存储池。
先决条件
确保您的管理程序支持基于文件系统的存储池:
# virsh pool-capabilities | grep "'fs' supported='yes'"
如果该命令显示任何输出结果,则代表支持基于文件的池。
准备一个设备,以此作为存储池的基础。因此,最好使用分区(例如
/dev/sdb1
)或 LVM 卷。如果您提供了一个虚拟机,对整个磁盘或块设备(例如:/dev/sdb
)具有写权限,则虚拟机可以对其进行分区,或者在其上创建自己的 LVM 组。这可能会导致主机上的系统错误。但是,如果您需要将整个块设备用于存储池,红帽建议保护设备上的任何重要分区不受 GRUB 的
os-prober
功能的影响。要做到这一点,编辑/etc/default/grub
文件,并应用以下配置之一:禁用
os-prober
。GRUB_DISABLE_OS_PROBER=true
防止
os-prober
发现特定的分区。例如:GRUB_OS_PROBER_SKIP_LIST="5ef6313a-257c-4d43@/dev/sdb1"
流程
创建存储池
使用
virsh pool-define-as
命令定义和创建文件系统类型的存储池。例如,要创建一个名为guest_images_fs
的存储池,它使用 /dev/sdc1 分区,并挂载在 /guest_images 目录上:# virsh pool-define-as guest_images_fs fs --source-dev /dev/sdc1 --target /guest_images Pool guest_images_fs defined
如果您已经有要创建的存储池的 XML 配置,也可以根据 XML 定义池。详情请参阅 基于文件系统的存储池参数。
定义存储池目标路径
使用
virsh pool-build
命令,为事先格式化的文件系统存储池创建存储池目标路径、初始化存储源设备,并定义数据格式。# virsh pool-build guest_images_fs Pool guest_images_fs built # ls -la /guest_images total 8 drwx------. 2 root root 4096 May 31 19:38 . dr-xr-xr-x. 25 root root 4096 May 31 19:38 ..
验证是否已创建池
使用
virsh pool-list
命令来验证池是否已被创建。# virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images_fs inactive no
启动存储池
使用
virsh pool-start
命令来挂载存储池。# virsh pool-start guest_images_fs Pool guest_images_fs started
注意virsh pool-start
命令仅适用于持久性存储池。临时存储池创建时会自动启动。可选:打开自动启动
默认情况下,使用
virsh
命令定义的存储池不会被设置为在每次虚拟化服务启动时自动启动。使用virsh pool-autostart
命令将存储池配置为自动启动。# virsh pool-autostart guest_images_fs Pool guest_images_fs marked as autostarted
验证
使用
virsh pool-info
命令来验证存储池是否处于running
状态。检查报告的大小是否与预期一样,以及是否正确配置了自动启动。# virsh pool-info guest_images_fs Name: guest_images_fs UUID: c7466869-e82a-a66c-2187-dc9d6f0877d0 State: running Persistent: yes Autostart: yes Capacity: 458.39 GB Allocation: 197.91 MB Available: 458.20 GB
验证在文件系统上的目标路径中是否存在
lost+found
目录,其表示该设备已挂载。# mount | grep /guest_images /dev/sdc1 on /guest_images type ext4 (rw) # ls -la /guest_images total 24 drwxr-xr-x. 3 root root 4096 May 31 19:47 . dr-xr-xr-x. 25 root root 4096 May 31 19:38 .. drwx------. 2 root root 16384 May 31 14:18 lost+found
12.2.5. 使用 CLI 创建基于 GlusterFS 的存储池
GlusterFS 是一个用户空间文件系统,其使用用户空间(FUSE)软件接口中的文件系统。如果要在 Gluster 服务器上拥有一个存储池,您可以使用 virsh
工具来创建基于 GlusterFS 的存储池。
先决条件
在主机上创建基于 GlusterFS 的存储池前,先准备 Gluster。
使用以下命令列出 Gluster 服务器的状态来获取 Gluster 服务器的 IP 地址:
# gluster volume status Status of volume: gluster-vol1 Gluster process Port Online Pid ------------------------------------------------------------ Brick 222.111.222.111:/gluster-vol1 49155 Y 18634 Task Status of Volume gluster-vol1 ------------------------------------------------------------ There are no active volume tasks
-
如果没有安装,请安装
glusterfs-fuse
软件包。 如果没有启用,请启用
virt_use_fusefs
布尔值。检查是否已启用。# setsebool virt_use_fusefs on # getsebool virt_use_fusefs virt_use_fusefs --> on
确保您的管理程序支持基于 GlusterFS 的存储池:
# virsh pool-capabilities | grep "'gluster' supported='yes'"
如果命令显示任何输出,则支持基于 GlusterFS 的池。
流程
创建存储池
使用
virsh pool-define-as
命令来定义和创建基于 GlusterFS 的存储池。例如,要创建一个名为guest_images_glusterfs
的存储池,它使用名为gluster-vol1
、IP 为111.222.111.222
的 Gluster 服务器,并挂载在 Gluster 服务器的根目录上:# virsh pool-define-as --name guest_images_glusterfs --type gluster --source-host 111.222.111.222 --source-name gluster-vol1 --source-path / Pool guest_images_glusterfs defined
如果您已经有要创建的存储池的 XML 配置,也可以根据 XML 定义池。详情请参阅 基于 GlusterFS 的存储池参数。
验证是否已创建池
使用
virsh pool-list
命令来验证池是否已被创建。# virsh pool-list --all Name State Autostart -------------------------------------------- default active yes guest_images_glusterfs inactive no
启动存储池
使用
virsh pool-start
命令来挂载存储池。# virsh pool-start guest_images_glusterfs Pool guest_images_glusterfs started
注意virsh pool-start
命令仅适用于持久性存储池。临时存储池创建时会自动启动。可选:打开自动启动。
默认情况下,使用
virsh
命令定义的存储池不会被设置为在每次虚拟化服务启动时自动启动。使用virsh pool-autostart
命令将存储池配置为自动启动。# virsh pool-autostart guest_images_glusterfs Pool guest_images_glusterfs marked as autostarted
验证
使用
virsh pool-info
命令来验证存储池是否处于running
状态。检查报告的大小是否与预期一样,以及是否正确配置了自动启动。# virsh pool-info guest_images_glusterfs Name: guest_images_glusterfs UUID: c7466869-e82a-a66c-2187-dc9d6f0877d0 State: running Persistent: yes Autostart: yes Capacity: 458.39 GB Allocation: 197.91 MB Available: 458.20 GB
12.2.6. 使用 CLI 创建基于 iSCSI 的存储池
互联网小型计算机系统接口(iSCSI)是基于 IP 的存储网络标准,用于连接数据存储设施。如果要在 iSCSI 服务器上拥有一个存储池,您可以使用 virsh
工具来创建基于 iSCSI 的存储池。
先决条件
确定您的管理程序支持基于 iSCSI 的存储池:
# virsh pool-capabilities | grep "'iscsi' supported='yes'"
如果该命令显示任何输出结果,则代表支持基于 iSCSI 的池。
流程
创建存储池
使用
virsh pool-define-as
命令来定义和创建 iSCSI 类型的存储池。例如,要创建一个名为guest_images_iscsi
的存储池,它使用server1.example.com
上的iqn.2010-05.com.example.server1:iscsirhel7guest
IQN,并挂载在/dev/disk/by-path
路径上:# virsh pool-define-as --name guest_images_iscsi --type iscsi --source-host server1.example.com --source-dev iqn.2010-05.com.example.server1:iscsirhel7guest --target /dev/disk/by-path Pool guest_images_iscsi defined
如果您已经有要创建的存储池的 XML 配置,也可以根据 XML 定义池。详情请查看 基于 iSCSI 的存储池参数。
验证是否已创建池
使用
virsh pool-list
命令来验证池是否已被创建。# virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images_iscsi inactive no
启动存储池
使用
virsh pool-start
命令来挂载存储池。# virsh pool-start guest_images_iscsi Pool guest_images_iscsi started
注意virsh pool-start
命令仅适用于持久性存储池。临时存储池创建时会自动启动。可选:打开自动启动。
默认情况下,使用
virsh
命令定义的存储池不会被设置为在每次虚拟化服务启动时自动启动。使用virsh pool-autostart
命令将存储池配置为自动启动。# virsh pool-autostart guest_images_iscsi Pool guest_images_iscsi marked as autostarted
验证
使用
virsh pool-info
命令来验证存储池是否处于running
状态。检查报告的大小是否与预期一样,以及是否正确配置了自动启动。# virsh pool-info guest_images_iscsi Name: guest_images_iscsi UUID: c7466869-e82a-a66c-2187-dc9d6f0877d0 State: running Persistent: yes Autostart: yes Capacity: 458.39 GB Allocation: 197.91 MB Available: 458.20 GB
12.2.7. 使用 CLI 创建基于 LVM 的存储池
如果要拥有一个存储池,其是 LVM 卷组的一部分,您可以使用 virsh
工具来创建基于 LVM 的存储池。
建议
在创建基于 LVM 的存储池前请注意以下几点:
- 基于 LVM 的存储池不能为 LVM 提供完整的灵活性。
-
libvirt
支持精简逻辑卷,但不提供精简存储池的功能。 基于 LVM 的存储池是卷组。您可以使用
virsh
工具创建卷组,但这样,您可以在创建的卷组中只有一个设备。要创建具有多个设备的卷组,请使用 LVM 工具,请参阅 如何在 Linux 中 使用 LVM 创建卷组。有关卷组的详情,请参考 Red Hat Enterprise Linux Logical Volume Manager Administration Guide。
-
基于 LVM 的存储池需要一个完整磁盘分区。如果您使用
virsh
命令激活新分区或设备,分区将被格式化,所有数据都会被清除。在这些过程中,如果您使用主机的现有卷组,则不会删除任何内容。
先决条件
确定您的管理程序支持基于 LVM 的存储池:
# virsh pool-capabilities | grep "'logical' supported='yes'"
如果命令显示任何输出结果,则支持基于 LVM 的池。
流程
创建存储池
使用
virsh pool-define-as
命令来定义和创建 LVM 类型的存储池。例如,以下命令创建名为guest_images_lvm
的存储池,该池使用lvm_vg
卷组,并挂载在/dev/lvm_vg
目录上:# virsh pool-define-as guest_images_lvm logical --source-name lvm_vg --target /dev/lvm_vg Pool guest_images_lvm defined
如果您已经有要创建的存储池的 XML 配置,也可以根据 XML 定义池。详情请查看 基于 LVM 的存储池参数。
验证是否已创建池
使用
virsh pool-list
命令来验证池是否已被创建。# virsh pool-list --all Name State Autostart ------------------------------------------- default active yes guest_images_lvm inactive no
启动存储池
使用
virsh pool-start
命令来挂载存储池。# virsh pool-start guest_images_lvm Pool guest_images_lvm started
注意virsh pool-start
命令仅适用于持久性存储池。临时存储池创建时会自动启动。可选:打开自动启动。
默认情况下,使用
virsh
命令定义的存储池不会被设置为在每次虚拟化服务启动时自动启动。使用virsh pool-autostart
命令将存储池配置为自动启动。# virsh pool-autostart guest_images_lvm Pool guest_images_lvm marked as autostarted
验证
使用
virsh pool-info
命令来验证存储池是否处于running
状态。检查报告的大小是否与预期一样,以及是否正确配置了自动启动。# virsh pool-info guest_images_lvm Name: guest_images_lvm UUID: c7466869-e82a-a66c-2187-dc9d6f0877d0 State: running Persistent: yes Autostart: yes Capacity: 458.39 GB Allocation: 197.91 MB Available: 458.20 GB
12.2.8. 使用 CLI 创建基于 NFS 的存储池
如果要在网络文件系统(NFS)服务器上拥有一个存储池,您可以使用 virsh
工具来创建基于 NFS 的存储池。
先决条件
确定您的管理程序支持基于 NFS 的存储池:
# virsh pool-capabilities | grep "<value>nfs</value>"
如果该命令显示任何输出结果,则代表支持基于 NFS 的池。
流程
创建存储池
使用 virsh
pool-define-as
命令来定义和创建 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'
如果您已经有要创建的存储池的 XML 配置,也可以根据 XML 定义池。详情请查看 基于 NFS 的存储池参数。
验证是否已创建池
使用
virsh pool-list
命令来验证池是否已被创建。# virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images_netfs inactive no
启动存储池
使用
virsh pool-start
命令来挂载存储池。# virsh pool-start guest_images_netfs Pool guest_images_netfs started
注意virsh pool-start
命令仅适用于持久性存储池。临时存储池创建时会自动启动。可选:打开自动启动。
默认情况下,使用
virsh
命令定义的存储池不会被设置为在每次虚拟化服务启动时自动启动。使用virsh pool-autostart
命令将存储池配置为自动启动。# virsh pool-autostart guest_images_netfs Pool guest_images_netfs marked as autostarted
验证
使用
virsh pool-info
命令来验证存储池是否处于running
状态。检查报告的大小是否与预期一样,以及是否正确配置了自动启动。# virsh pool-info guest_images_netfs Name: guest_images_netfs UUID: c7466869-e82a-a66c-2187-dc9d6f0877d0 State: running Persistent: yes Autostart: yes Capacity: 458.39 GB Allocation: 197.91 MB Available: 458.20 GB
12.2.9. 使用 CLI 创建带有 vHBA 设备的基于 SCSI 的存储池
如果要在小型计算机系统接口(SCSI)设备上拥有一个存储池,您的主机必须能够使用虚拟主机总线适配器(vHBA)连接到 SCSI 设备。然后,您可以使用 virsh
工具来创建基于 SCSI 的存储池。
先决条件
确定您的管理程序支持基于 SCSI 的存储池:
# virsh pool-capabilities | grep "'scsi' supported='yes'"
如果该命令显示任何输出结果,则代表支持基于 SCSI 的池。
- 在使用 vHBA 设备创建基于 SCSI 的存储池前,先创建一个 vHBA。如需更多信息,请参阅 创建 vHBA。
流程
创建存储池
使用
virsh pool-define-as
命令使用 vHBA 定义并创建 SCSI 存储池。例如,以下命令会创建一个名为guest_images_vhba
的存储池,它使用由scsi_host3
父适配器识别的 vHBA、全球范围的端口号5001a4ace3ee047d
,以及全球范围的节点号5001a4a93526d0a1
。存储池挂载在/dev/disk/
目录上:# virsh pool-define-as guest_images_vhba scsi --adapter-parent scsi_host3 --adapter-wwnn 5001a4a93526d0a1 --adapter-wwpn 5001a4ace3ee047d --target /dev/disk/ Pool guest_images_vhba defined
如果您已经有要创建的存储池的 XML 配置,也可以根据 XML 定义池。详情请查看使用 vHBA 设备 的基于 SCSI 的存储池的参数。
验证是否已创建池
使用
virsh pool-list
命令来验证池是否已被创建。# virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images_vhba inactive no
启动存储池
使用
virsh pool-start
命令来挂载存储池。# virsh pool-start guest_images_vhba Pool guest_images_vhba started
注意virsh pool-start
命令仅适用于持久性存储池。临时存储池创建时会自动启动。可选:打开自动启动。
默认情况下,使用
virsh
命令定义的存储池不会被设置为在每次虚拟化服务启动时自动启动。使用virsh pool-autostart
命令将存储池配置为自动启动。# virsh pool-autostart guest_images_vhba Pool guest_images_vhba marked as autostarted
验证
使用
virsh pool-info
命令来验证存储池是否处于running
状态。检查报告的大小是否与预期一样,以及是否正确配置了自动启动。# virsh pool-info guest_images_vhba Name: guest_images_vhba UUID: c7466869-e82a-a66c-2187-dc9d6f0877d0 State: running Persistent: yes Autostart: yes Capacity: 458.39 GB Allocation: 197.91 MB Available: 458.20 GB
12.2.10. 使用 CLI 删除存储池
要从主机系统中删除存储池,您必须停止池,并删除其 XML 定义。
流程
使用
virsh pool-list
命令列出定义的存储池。# virsh pool-list --all Name State Autostart ------------------------------------------- default active yes Downloads active yes RHEL-Storage-Pool active yes
使用
virsh pool-destroy
命令停止您要删除的存储池。# virsh pool-destroy Downloads Pool Downloads destroyed
可选: 对于某些类型的存储池,您可以使用
virsh pool-delete
命令删除存储池所在的目录。请注意,为此,目录必须为空。# virsh pool-delete Downloads Pool Downloads deleted
使用
virsh pool-undefine
命令删除存储池的定义。# virsh pool-undefine Downloads Pool Downloads has been undefined
验证
确认删除了存储池。
# virsh pool-list --all Name State Autostart ------------------------------------------- default active yes rhel-Storage-Pool active yes