• 【KVM虚拟化】· 存储池、存储卷


    目录

    🍁虚拟磁盘文件

    🍂基于文件系统的KVM存储

    🍂基于设备的KVM存储

    🍁使用KVM存储池

    🍂存储池概念

    🍁virsh中存储池命令

    🍁virsh中存储卷命令

    🍁命令实例

    🍂创建存储池

    🍂创建存储卷


        🦐博客主页:大虾好吃吗的博客

        🦐专栏地址:KVM虚拟化专栏

    虚拟磁盘文件

            当系统创建KVM虚拟机的时候,默认使用虚拟磁盘文件作为后端存储。安装后,虚拟机认为在使用真实的磁盘,但实际上看到的是用于模拟硬盘的虚拟磁盘文件。这一额外的文件系统层会降低系统速度。

            当然,基于磁盘镜像的虚拟磁盘并非全无益处,磁盘文件系统可以很轻松地用于其它的KVM虚拟化宿主机。但是如果您希望优化KVM虚拟化性能,最好考虑其它的存储方式。

    基于文件系统的KVM存储

            在安装KVM宿主机时,可选文件系统为dir(directory)或fs(formatted block storage)作为初始KVM存储格式。默认选项为dir,用户指定本地文件系统中的一个目录用于创建磁盘镜像文件。

            fs选项可以允许用户指定某个格式化文件系统的名称,把它作为专用的磁盘镜像文件存储。两种KVM存储选项之间最主要的区别在于:fs文件系统不需要挂载到某个特定的分区。

            两种选项所指定的文件系统,都可以是本地文件系统或位于SAN上某个物理宿主机上的网络文件系统。后者具备一定的优势,因为SAN可以很轻易地实现多个主机同时访问,而本地磁盘或文件系统则无法实现。

            还有一种基于文件的磁盘存储方式是netfs,用户可以指定一个网络文件系统的名称,如Samba.用这种方式作为KVM存储很方便,因为这样很容易访问到位于其它服务器上的文件系统,同时用户也可以通过多台宿主机访问磁盘文件。

            所有的这些基于文件的KVM存储方式都有一个缺点:文件系统固有缺陷。因为虚拟机的磁盘文件不能直接读取或写入KVM存储设备,而是写入宿主机OS之上的文件系统。这也就意味着在访问和写入文件时中间增加了额外一层,这通常会降低性能。所以,如果您希望寻找KVM虚拟化性能最优方案,最好考虑基于设备的存储。

    基于设备的KVM存储

            另外一种KVM存储的方式就是使用基于设备的方式。共支持四种不同的物理存储:磁盘、iSCSI、SCSI和lvm逻辑盘。磁盘方式指直接读写硬盘设备。iSCSI和SCSI方式可选,取决于用户采取SCSI或iSCSI地址把磁盘设备连接。这种KVM存储方式的优势在于,磁盘的名称是固定的,而不需要取决于宿主机OS搜索到磁盘设备的顺序。

            这种连接磁盘的方式也有缺点:灵活性不足。虚拟磁盘的大小很难改变,而且基于设备的KVM存储不支持快照。

            如果要优化KVM存储的灵活性,可以使用LVM(Logical Volume Manager)。LVM的优势在于可以使用快照,而快照并不是KVM虚拟化自带的功能。

            LVM可以把所有存储放到一个卷组里,从而轻松创建一个逻辑卷。该卷组是物理磁盘设备的一个抽象,所以如果超出可用磁盘空间最大值,还可以向卷组中添加新的设备,从而极大简化了增加存储空间的过程,增加的空间在逻辑卷中直接可以使用。使用LVM使得磁盘空间分配更加灵活,而且增加和删除存储也更为容易。

            最后,LVM无论是在单宿主机或多宿主机环境中都可以很好工作。在多宿主机环境中,您可以在SAN上创建逻辑卷。如果使用Cluster LVM,可以很容易的配置成多个主机同时访问某个逻辑卷。

    使用KVM存储池

            为简化KVM存储管理的目的,可以创建存储池。在宿主机上创建存储池,可以简化KVM存储设备的管理。采用存储池的方式还可以实现对提前预留的存储空间的分配。这种策略对于大型应用环境很有效,存储管理员和创建虚拟机的管理经常不是同一个人。这样,在创建首台虚拟机之前先完成KVM存储池的创建是很好的方法。

            本次主要讲解三种存储池,基于目录的存储池,基于LVM的存储池,基于NFS的存储池。

    存储池概念

            存储池是一个由libvirt管理的文件、目录或存储设备,提供给虚拟机使用。存储池被分为存储卷,这些存储卷保存虚拟镜像或连接到虚拟机作为附加存储。libvirt通过存储池的形式对存储进行统一管理、简化操作。对于虚拟机操作来说,存储池和卷并不是必需的。

    virsh中存储池命令

    1. pool-autostart #自动启动某个池pool-build 建立池
    2. pool-create-as #从一组变量中创建一个池
    3. pool-create #从一个 XML 文件中创建一个池
    4. pool-define-as #在一组变量中定义池
    5. pool-define #在一个XML文件中定义(但不启动)一个池或修改已有池
    6. pool-delete #删除池
    7. pool-destroy #销毁(删除)池
    8. pool-dumpxml #将池信息保存到XML文档中
    9. pool-edit #为存储池编辑 XML 配置
    10. pool-info #查看存储池信息
    11. pool-list #列出池
    12. pool-name #将池 UUID 转换为池名称
    13. pool-refresh #刷新池
    14. pool-start #启动一个(以前定义的)非活跃的池
    15. pool-undefine #取消定义一个不活跃的池
    16. pool-uuid #把一个池名称转换为池 UUID

    virsh中存储卷命令

    1. vol-clone #克隆卷
    2. vol-create-as #从一组变量中创建卷
    3. vol-create #从一个 XML 文件创建一个卷
    4. vol-create-from #生成卷,使用另一个卷作为输入
    5. vol-delete #删除卷
    6. vol-download #将卷内容下载到文件中
    7. vol-dumpxml #保存卷信息到XML文档中
    8. vol-info #查看存储卷信息
    9. vol-key #根据卷名或路径返回卷的key
    10. vol-list #列出卷
    11. vol-name #根据给定卷key或者路径返回卷名
    12. vol-path #根据卷名或key返回卷路径
    13. vol-pool #为给定密钥或者路径返回存储池
    14. vol-resize #重新定义卷大小
    15. vol-upload #将文件内容上传到卷中
    16. vol-wipe #擦除卷

    命令实例

    查看系统池

    1. virsh # pool-list --details
    2. Name State   Autostart Persistent   Capacity Allocation Available
    3. ------------------------------------------------------------------------
    4. img   running yes       yes         99.95 GiB   9.52 GiB 90.42 GiB
    5. iso   running yes       yes         99.95 GiB   9.52 GiB 90.43 GiB

    查看存储池信息

    1. virsh # pool-info img
    2. Name:           img
    3. UUID:           4073391b-b408-473e-a77a-3f117aaba6cc
    4. State:         running
    5. Persistent:     yes
    6. Autostart:     yes
    7. Capacity:       99.95 GiB
    8. Allocation:     9.52 GiB
    9. Available:     90.42 GiB

    查看存储池中卷的信息

    1. virsh # vol-list img
    2. Name                 Path                                    
    3. ------------------------------------------------------------------------------
    4. vm01.qcow2           /kvm/img/vm01.qcow2                    
    5. vm01_ln.qcow2       /kvm/img/vm01_ln.qcow2                  
    6. vm01_ln1.qcow2       /kvm/img/vm01_ln1.qcow2                
    7. vm02.qcow2           /kvm/img/vm02.qcow2                    
    8. vm02_clong.qcow2     /kvm/img/vm02_clong.qcow2

    创建存储池

    •  基于目录创建存储池(dir:Filesystem Directory),在本地创建一个测试目录,dir为存储池格式。
    1. [root@kvmserver ~]# mkdir /test
    2. [root@kvmserver ~]# virsh pool-define-as test dir --target /test
    3. Pool test defined
    4. [root@kvmserver ~]# virsh pool-list --all
    5. Name                 State     Autostart
    6. -------------------------------------------
    7. img                 active     yes      
    8. iso                 active     yes      
    9. test                 inactive   no  
    10. [root@kvmserver ~]# virsh pool-start test
    11. Pool test started
    12. [root@kvmserver ~]# virsh pool-autostart test
    13. Pool test marked as autostarted
    14. [root@kvmserver ~]# virsh pool-list
    15. Name                 State     Autostart
    16. -------------------------------------------
    17. img                 active     yes      
    18. iso                 active     yes      
    19. test                 active     yes  

            如果创建的存储池的目录不存在的时候,需要先通过pool-build命令构建然后才能启动成功。

    [root@kvmserver ~]# virsh pool-build test
    • 创建基于LVM的存储池 (logical:LVM Volume Group)基于LVM的存储池要求使用全部磁盘分区创建存储池时,首先准备一个VG,VG中不需要创建LV,有两种情况使用现有的VG,创建新的VG。

    Target Path:新的卷组名

    Source Path:存储设备的位置

    Build Pool:会创建新的VG

    先添加一块硬盘,然后创键VG,注意不要创建LV。

    1. [root@kvmserver ~]# echo "- - -" >> /sys/class/scsi_host/host0/scan
    2. [root@kvmserver ~]# echo "- - -" >> /sys/class/scsi_host/host1/scan
    3. [root@kvmserver ~]# echo "- - -" >> /sys/class/scsi_host/host2/scan
    4. [root@kvmserver ~]# pvcreate /dev/sdc
    5. Physical volume "/dev/sdc" successfully created.
    6. [root@kvmserver ~]# vgcreate vg01 /dev/sdc
    7. Volume group "vg01" successfully created

    创建存储池

    1. [root@kvmserver ~]# virsh pool-define-as vgpool logical --source-name=vg01 --target=/dev/vg01
    2. Pool vgpool defined
    3. [root@kvmserver ~]# virsh pool-list --all
    4. Name State Autostart
    5. -------------------------------------------
    6. img active yes
    7. iso active yes
    8. test active yes
    9. vgpool inactive no
    10. [root@kvmserver ~]# virsh pool-start vgpool
    11. Pool vgpool started
    12. [root@kvmserver ~]# virsh pool-autostart vgpool
    13. Pool vgpool marked as autostarted
    14. [root@kvmserver ~]# virsh pool-list
    15. Name State Autostart
    16. -------------------------------------------
    17. img active yes
    18. iso active yes
    19. test active yes
    20. vgpool active yes
    21. [root@kvmserver ~]# ls /dev/vg01
    22. vm_vg01.qcow2
    • 基于NFS的存储池(netfs:Network Export Directory)

    打开一台服务器搭建nfs,先给nfs服务器部署逻辑卷。

    1. [root@nfs ~]# pvcreate /dev/sdb
    2. Physical volume "/dev/sdb" successfully created.
    3. [root@nfs ~]# vgcreate vg01 /dev/sdb
    4. Volume group "vg01" successfully created
    5. [root@nfs ~]# vgdisplay
    6. --- Volume group ---
    7. VG Name vg01
    8. System ID
    9. Format lvm2
    10. Metadata Areas 1
    11. Metadata Sequence No 1
    12. VG Access read/write
    13. VG Status resizable
    14. MAX LV 0
    15. Cur LV 0
    16. Open LV 0
    17. Max PV 0
    18. Cur PV 1
    19. Act PV 1
    20. VG Size <50.00 GiB
    21. PE Size 4.00 MiB
    22. Total PE 12799
    23. Alloc PE / Size 0 / 0
    24. Free PE / Size 12799 / <50.00 GiB
    25. VG UUID 4OMUgj-eMfD-wvHD-BJ0z-EsbF-uI8M-3b8dTf
    26. #省略部分内容
    27. [root@nfs ~]# lvcreate -n lv01 -l 12799 vg01
    28. Logical volume "lv01" created.
    29. [root@nfs ~]# mkfs.xfs /dev/vg01/lv01
    30. meta-data=/dev/vg01/lv01 isize=512 agcount=4, agsize=3276544 blks
    31. = sectsz=512 attr=2, projid32bit=1
    32. = crc=1 finobt=0, sparse=0
    33. data = bsize=4096 blocks=13106176, imaxpct=25
    34. = sunit=0 swidth=0 blks
    35. naming =version 2 bsize=4096 ascii-ci=0 ftype=1
    36. log =internal log bsize=4096 blocks=6399, version=2
    37. = sectsz=512 sunit=0 blks, lazy-count=1
    38. realtime =none extsz=4096 blocks=0, rtextents=0
    39. [root@nfs ~]# mkdir /nfspool
    40. [root@nfs ~]# mount /dev/vg01/lv01 /nfspool
    41. [root@nfs ~]# vim /etc/fstab
    42. #添加下面内容永久挂载
    43. /dev/vg01/lv01 /nfspool xfs default 0 0

    安装nfs服务,配置文件共享。

    1. [root@nfs ~]# yum -y install nfs-utils rpcbind
    2. #省略安装部分
    3. [root@nfs ~]# vim /etc/exports
    4. /nfspool *(rw,sync,no_root_squash)
    5. [root@nfs ~]# systemctl start nfs rpcbind
    6. [root@nfs ~]# systemctl enable nfs rpcbind

    使用kvm服务器查看nfs服务器

    1. [root@kvmserver ~]# showmount -e 192.168.8.30
    2. Export list for 192.168.8.30:
    3. /nfspool *

            创建存储池,需要先创建挂载目录,创建存储池时,指定池名称为vmpool类型为netfs,源主机为nfs服务器,源路径为nfs服务器的共享目录,目标目录为kvm服务器的挂载点。

    1. [root@kvmserver ~]# mkdir /nfspool
    2. [root@kvmserver /]# virsh pool-define-as --name nfspool --type netfs --source-host 192.168.8.30 --source-path /nfspool --target /nfspool
    3. Pool nfspool defined
    4. [root@kvmserver /]# virsh pool-start nfspool
    5. Pool nfspool started
    6. [root@kvmserver /]# virsh pool-autostart nfspool
    7. Pool nfspool marked as autostarted
    8. [root@kvmserver /]# virsh pool-list
    9. Name State Autostart
    10. -------------------------------------------
    11. img active yes
    12. iso active yes
    13. nfspool active yes
    14. test active yes
    15. vgpool active yes

    创建存储卷

    在本地目录创建一个qcow2格式的存储卷,不加--format参数默认为raw格式。

    1. [root@kvmserver ~]# virsh pool-list
    2. Name State Autostart
    3. -------------------------------------------
    4. img active yes
    5. iso active yes
    6. nfspool active yes
    7. test active yes
    8. vgpool active yes
    9. [root@kvmserver ~]# virsh vol-create-as test test1.qcow2 8G --format qcow2
    10. Vol test1.qcow2 created
    11. [root@kvmserver ~]# virsh vol-list test
    12. Name Path
    13. ------------------------------------------------------------------------------
    14. test1.qcow2 /test/test1.qcow2

    在lvm目录创建一个qcow2格式的存储卷,不加--format参数默认为raw格式。

    1. [root@kvmserver ~]# virsh pool-list
    2. Name                 State     Autostart
    3. -------------------------------------------
    4. img                 active     yes      
    5. iso                 active     yes      
    6. nfspool             active     yes      
    7. test                 active     yes      
    8. vgpool               active     yes      
    9. [root@kvmserver ~]# virsh vol-create-as vgpool vm_vg01.qcow2 8G --format qcow2
    10. Vol vm_vg01.qcow2 created
    11. [root@kvmserver ~]# virsh vol-list vgpool
    12. Name                 Path                                    
    13. ------------------------------------------------------------------------------
    14. vm_vg01.qcow2       /dev/vg01/vm_vg01.qcow2  

    在nfs目录创建一个qcow2格式的存储卷,不加--format参数默认为raw格式。

    1. [root@kvmserver ~]# virsh pool-list
    2. Name                 State     Autostart
    3. -------------------------------------------
    4. img                 active     yes      
    5. iso                 active     yes      
    6. nfspool             active     yes      
    7. test                 active     yes      
    8. vgpool               active     yes
    9. [root@kvmserver ~]# virsh vol-create-as nfspool nfs1.qcow2 5G --format qcow2
    10. Vol nfs1.qcow2 created
    11. [root@kvmserver ~]# virsh vol-list nfspool
    12. Name                 Path                                    
    13. ------------------------------------------------------------------------------                          
    14. nfs1.qcow2           /nfspool/nfs1.qcow2  

    后面就可以直接创建虚拟机了,例如在nfs服务器创建的储存卷中安装虚拟机。

    [root@kvmserver ~]# virt-install -n nfsvm1 -r 1024 --vcpus 1 -l /kvm/iso/centos.iso --disk /nfspool/nfs1.qcow2 --nographics -x "console=ttyS0"
  • 相关阅读:
    一文详解 requests 库中 json 参数和 data 参数的用法
    Ai-WB2模组与手机建立 SPP 连接,以及在 UART-Bluetooth LE 透传模式下传输数据
    建造者模式
    大数据必学Java基础(九十三):JDBC完成CURD
    什么是客户体验 (CX)?如何改善客户体验?
    框架安全&CVE复现&Django&Flask&Node.JS&JQuery
    【kafka异常】使用Spring-kafka遇到的坑
    《深度探索C++对象模型》阅读笔记 第七章 站在对象模型的尖端
    2022-2028全球及中国特殊黄铜棒行业研究及十四五规划分析报告
    深度学习入门
  • 原文地址:https://blog.csdn.net/qq_61116007/article/details/130682817