12.5. 使用 CLI 管理虚拟机存储卷
您可以使用 CLI 管理存储卷的以下方面来为虚拟机分配存储:
12.5.1. 使用 CLI 查看存储卷信息
使用命令行,您可以查看主机上所有可用存储池的列表,以及指定存储池的详情
流程
使用
virsh vol-list
命令列出指定存储池中的存储卷。# virsh vol-list --pool RHEL-Storage-Pool --details Name Path Type Capacity Allocation --------------------------------------------------------------------------------------------- .bash_history /home/VirtualMachines/.bash_history file 18.70 KiB 20.00 KiB .bash_logout /home/VirtualMachines/.bash_logout file 18.00 B 4.00 KiB .bash_profile /home/VirtualMachines/.bash_profile file 193.00 B 4.00 KiB .bashrc /home/VirtualMachines/.bashrc file 1.29 KiB 4.00 KiB .git-prompt.sh /home/VirtualMachines/.git-prompt.sh file 15.84 KiB 16.00 KiB .gitconfig /home/VirtualMachines/.gitconfig file 167.00 B 4.00 KiB RHEL_Volume.qcow2 /home/VirtualMachines/RHEL8_Volume.qcow2 file 60.00 GiB 13.93 GiB
使用
virsh vol-info
命令列出指定存储池中的存储卷。# virsh vol-info --pool RHEL-Storage-Pool --vol RHEL_Volume.qcow2 Name: RHEL_Volume.qcow2 Type: file Capacity: 60.00 GiB Allocation: 13.93 GiB
12.5.2. 使用 CLI 创建并分配存储卷
要获取磁盘镜像,并将其作为虚拟磁盘附加到虚拟机(VM),请创建一个存储卷,并将其 XML 配置分配到虚拟机。
先决条件
主机上存在带有未分配空间的存储池。
要验证,列出主机上的存储池:
# virsh pool-list --details Name State Autostart Persistent Capacity Allocation Available -------------------------------------------------------------------------------------------- default running yes yes 48.97 GiB 36.34 GiB 12.63 GiB Downloads running yes yes 175.92 GiB 121.20 GiB 54.72 GiB VM-disks running yes yes 175.92 GiB 121.20 GiB 54.72 GiB
- 如果您没有现有的存储池,请创建一个。如需更多信息,请参阅 管理虚拟机的存储。
流程
使用
virsh vol-create-as
命令创建存储卷。例如,要基于guest-images-fs
存储池创建一个 20 GB 的 qcow2 卷:# virsh vol-create-as --pool guest-images-fs --name vm-disk1 --capacity 20 --format qcow2
重要 :特定的存储池类型不支持
virsh vol-create-as
命令,而是需要特定的进程来创建存储卷:-
基于 GlusterFS - 使用
qemu-img
命令来创建存储卷。 - 基于 iSCSI - 事先在 iSCSI 服务器中准备 iSCSI LUN。
-
基于多路径 - 使用
multipathd
命令来准备或管理多路径。 - 基于 vHBA - 事先准备光纤通道卡。
-
基于 GlusterFS - 使用
创建一个 XML 文件,并在其中添加以下几行。此文件将用于将存储卷作为磁盘添加到虚拟机。
<disk type='volume' device='disk'> <driver name='qemu' type='qcow2'/> <source pool='guest-images-fs' volume='vm-disk1'/> <target dev='hdk' bus='ide'/> </disk>
本例指定一个在上一步中创建的
vm-disk1
卷的虚拟磁盘,并将卷设为ide
总线上的磁盘hdk
。根据您的环境修改对应的参数。重要 :对于特定的存储池类型,您必须使用不同的 XML 格式来描述存储卷磁盘。
对于 基于 GlusterFS 的池:
<disk type='network' device='disk'> <driver name='qemu' type='raw'/> <source protocol='gluster' name='Volume1/Image'> <host name='example.org' port='6000'/> </source> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </disk>
对于 基于多路径的池:
<disk type='block' device='disk'> <driver name='qemu' type='raw'/> <source dev='/dev/mapper/mpatha' /> <target dev='sda' bus='scsi'/> </disk>
对于 基于 RBD 存储的池:
<disk type='network' device='disk'> <driver name='qemu' type='raw'/> <source protocol='rbd' name='pool/image'> <host name='mon1.example.org' port='6321'/> </source> <target dev='vdc' bus='virtio'/> </disk>
使用 XML 文件为虚拟机分配存储卷。例如,要将
~/vm-disk1.xml
中定义的磁盘分配给testguest1
虚拟机,请使用以下命令:# virsh attach-device --config testguest1 ~/vm-disk1.xml
验证
- 在虚拟机的客户机操作系统中,确认磁盘映像已作为未格式化和未分配的磁盘提供。
12.5.3. 使用 CLI 删除存储卷
要从主机系统中删除存储卷,您必须停止池并删除它的 XML 定义。
先决条件
- 任何使用您要删除的存储卷的虚拟机都会被关闭。
流程
使用
virsh vol-list
命令列出指定存储池中的存储卷。# virsh vol-list --pool RHEL-SP Name Path --------------------------------------------------------------- .bash_history /home/VirtualMachines/.bash_history .bash_logout /home/VirtualMachines/.bash_logout .bash_profile /home/VirtualMachines/.bash_profile .bashrc /home/VirtualMachines/.bashrc .git-prompt.sh /home/VirtualMachines/.git-prompt.sh .gitconfig /home/VirtualMachines/.gitconfig vm-disk1 /home/VirtualMachines/vm-disk1
可选: 使用
virsh vol-wipe
命令来擦除存储卷。例如,要擦除与存储池RHEL-SP
关联的名为vm-disk1
的存储卷:# virsh vol-wipe --pool RHEL-SP vm-disk1 Vol vm-disk1 wiped
使用
virsh vol-delete
命令来删除存储卷。例如,要删除与存储池RHEL-SP
关联的名为vm-disk1
的存储卷:# virsh vol-delete --pool RHEL-SP vm-disk1 Vol vm-disk1 deleted
验证
再次使用
virsh vol-list
命令来验证存储卷是否已被删除。# virsh vol-list --pool RHEL-SP Name Path --------------------------------------------------------------- .bash_history /home/VirtualMachines/.bash_history .bash_logout /home/VirtualMachines/.bash_logout .bash_profile /home/VirtualMachines/.bash_profile .bashrc /home/VirtualMachines/.bashrc .git-prompt.sh /home/VirtualMachines/.git-prompt.sh .gitconfig /home/VirtualMachines/.gitconfig