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

news2024/11/30 10:39:09

目录

🍁虚拟磁盘文件

🍂基于文件系统的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中存储池命令

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

virsh中存储卷命令

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

命令实例

查看系统池

virsh # pool-list --details
 Name  State    Autostart  Persistent   Capacity  Allocation  Available
------------------------------------------------------------------------
 img   running  yes        yes         99.95 GiB    9.52 GiB  90.42 GiB
 iso   running  yes        yes         99.95 GiB    9.52 GiB  90.43 GiB

查看存储池信息

virsh # pool-info img
Name:           img
UUID:           4073391b-b408-473e-a77a-3f117aaba6cc
State:          running
Persistent:     yes
Autostart:      yes
Capacity:       99.95 GiB
Allocation:     9.52 GiB
Available:      90.42 GiB

查看存储池中卷的信息

virsh # vol-list img
 Name                 Path                                    
------------------------------------------------------------------------------
 vm01.qcow2           /kvm/img/vm01.qcow2                     
 vm01_ln.qcow2        /kvm/img/vm01_ln.qcow2                  
 vm01_ln1.qcow2       /kvm/img/vm01_ln1.qcow2                 
 vm02.qcow2           /kvm/img/vm02.qcow2                     
 vm02_clong.qcow2     /kvm/img/vm02_clong.qcow2 

创建存储池

  •  基于目录创建存储池(dir:Filesystem Directory),在本地创建一个测试目录,dir为存储池格式。
[root@kvmserver ~]# mkdir /test
[root@kvmserver ~]# virsh pool-define-as test dir --target /test
Pool test defined
​
[root@kvmserver ~]# virsh pool-list --all
 Name                 State      Autostart 
-------------------------------------------
 img                  active     yes       
 iso                  active     yes       
 test                 inactive   no  
 [root@kvmserver ~]# virsh pool-start test
Pool test started
​
[root@kvmserver ~]# virsh pool-autostart test
Pool test marked as autostarted
​
[root@kvmserver ~]# virsh pool-list
 Name                 State      Autostart 
-------------------------------------------
 img                  active     yes       
 iso                  active     yes       
 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。

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

创建存储池

[root@kvmserver ~]# virsh pool-define-as vgpool logical --source-name=vg01 --target=/dev/vg01
Pool vgpool defined

[root@kvmserver ~]# virsh pool-list --all
 Name                 State      Autostart 
-------------------------------------------
 img                  active     yes       
 iso                  active     yes       
 test                 active     yes       
 vgpool               inactive   no        

[root@kvmserver ~]# virsh pool-start vgpool
Pool vgpool started

[root@kvmserver ~]# virsh pool-autostart vgpool
Pool vgpool marked as autostarted

[root@kvmserver ~]# virsh pool-list
 Name                 State      Autostart 
-------------------------------------------
 img                  active     yes       
 iso                  active     yes       
 test                 active     yes       
 vgpool               active     yes  
 [root@kvmserver ~]# ls /dev/vg01
vm_vg01.qcow2
  • 基于NFS的存储池(netfs:Network Export Directory)

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

[root@nfs ~]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.
[root@nfs ~]# vgcreate vg01 /dev/sdb
  Volume group "vg01" successfully created
[root@nfs ~]# vgdisplay 
  --- Volume group ---
  VG Name               vg01
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <50.00 GiB
  PE Size               4.00 MiB
  Total PE              12799
  Alloc PE / Size       0 / 0   
  Free  PE / Size       12799 / <50.00 GiB
  VG UUID               4OMUgj-eMfD-wvHD-BJ0z-EsbF-uI8M-3b8dTf
#省略部分内容
[root@nfs ~]# lvcreate -n lv01 -l 12799 vg01
  Logical volume "lv01" created.
[root@nfs ~]# mkfs.xfs /dev/vg01/lv01 
meta-data=/dev/vg01/lv01         isize=512    agcount=4, agsize=3276544 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=13106176, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=6399, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@nfs ~]# mkdir /nfspool
[root@nfs ~]# mount /dev/vg01/lv01 /nfspool
[root@nfs ~]# vim /etc/fstab
#添加下面内容永久挂载
/dev/vg01/lv01 /nfspool xfs default 0 0

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

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

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

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

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

[root@kvmserver ~]# mkdir /nfspool
[root@kvmserver /]# virsh pool-define-as --name nfspool --type netfs --source-host 192.168.8.30 --source-path /nfspool --target /nfspool
Pool nfspool defined

[root@kvmserver /]# virsh pool-start nfspool
Pool nfspool started

[root@kvmserver /]# virsh pool-autostart nfspool
Pool nfspool marked as autostarted

[root@kvmserver /]# virsh pool-list
 Name                 State      Autostart 
-------------------------------------------
 img                  active     yes       
 iso                  active     yes       
 nfspool              active     yes       
 test                 active     yes       
 vgpool               active     yes  

创建存储卷

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

[root@kvmserver ~]# virsh pool-list 
 Name                 State      Autostart 
-------------------------------------------
 img                  active     yes       
 iso                  active     yes       
 nfspool              active     yes       
 test                 active     yes       
 vgpool               active     yes       

[root@kvmserver ~]# virsh vol-create-as test test1.qcow2 8G --format qcow2
Vol test1.qcow2 created

[root@kvmserver ~]# virsh vol-list test
 Name                 Path                                    
------------------------------------------------------------------------------
 test1.qcow2          /test/test1.qcow2    

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

[root@kvmserver ~]# virsh pool-list 
 Name                 State      Autostart 
-------------------------------------------
 img                  active     yes       
 iso                  active     yes       
 nfspool              active     yes       
 test                 active     yes       
 vgpool               active     yes       
​
[root@kvmserver ~]# virsh vol-create-as vgpool vm_vg01.qcow2 8G --format qcow2
Vol vm_vg01.qcow2 created
​
[root@kvmserver ~]# virsh vol-list vgpool
 Name                 Path                                    
------------------------------------------------------------------------------
 vm_vg01.qcow2        /dev/vg01/vm_vg01.qcow2   

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

[root@kvmserver ~]# virsh pool-list 
 Name                 State      Autostart 
-------------------------------------------
 img                  active     yes       
 iso                  active     yes       
 nfspool              active     yes       
 test                 active     yes       
 vgpool               active     yes 
 
[root@kvmserver ~]# virsh vol-create-as nfspool nfs1.qcow2 5G --format qcow2
Vol nfs1.qcow2 created
​
[root@kvmserver ~]# virsh vol-list nfspool 
 Name                 Path                                    
------------------------------------------------------------------------------                           
 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"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/527873.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一个开源的即时通讯应用 Tailchat

今天给大家介绍一款即时通讯应用&#xff0c;这个开源项目是&#xff1a;Tailchat&#xff0c;它是一个基于 React Typescript 的现代开源 noIM 应用程序。 简单介绍 相信大家都或多或少了解过 Discord / Slack 这样大火的即时通讯应用。两者分别在各自的领域有很大的成就。…

http强缓存和协商缓存的介绍和应用案例,简介明了

http强缓存和协商缓存的介绍和应用案例&#xff0c;简介明了 http缓存方式简介缓存机制案例1. Expires老版本的方式&#xff1a;2. cache-control新版本的方式&#xff1a;3.Etag和If-None-Match http缓存方式简介 强缓存&#xff1a;强缓存使用Expires&#xff08;老版本&…

el-table实现可编辑表格的思路;el-table删除不正确:表格中的el-select下拉数据项有值,但输入框中value值不显示

目录 一、问题 二、原因及解决方法 三、总结 tips:如嫌繁琐&#xff0c;直接看总结即可&#xff01; 一、问题 el-table实现可编辑表格的思路&#xff1a; 1.要写一个可编辑的表格&#xff1a;表格中的一列是下拉框。实现方法很简单&#xff1a;在el-table-column(elemen提…

PMP课堂模拟题目及解析(第9期)

81. 一位经验丰富的项目经理在到达一个重大开发里程碑之前识别到一个问题&#xff0c;项目经理采取相应的行动&#xff0c;并能够按时解决问题。两周后&#xff0c;发起人通知项目经理&#xff0c;客户发出了处罚费。若要避免这个问题&#xff0c;项目经理应该事先做什么&…

FGX Native 1.4.1.1 For Delphi Crack

FGX Native 1.4.1.1 For Delphi Crack FGX Native Network Frame是制造跨平台和现代移动设备的强大工具。FG开发团队的主要目标是简化移动应用程序的开发&#xff0c;使大多数人都能以各种技能开发应用程序。此外&#xff0c;这种形式的网络最重要的功能可以在100%的用户界面中…

CorelDRAW2020工作室版下载及新增功能介绍

CorelDRAW Graphics Suite 2020将基于人工智能的图形设计提升到一个全新水平。CorelDRAW 中增强了“查找和替换”\“对齐和分布”、阴影效果等功能。您喜欢的 Corel PHOTO-PAINT 功能 — 从遮罩、效果和透镜到“替换颜色”— 均已优化&#xff01; 针对操作系统的功能优化 Core…

微信之小程序授权登录

首先我要怒骂微信的后台开发 真的还是乱七八糟。 首先我们登录微信开发平台 选择要开发的类型 然后小程序登录&#xff1a;选择 微信小程序实现微信登录详解&#xff08;JAVA后台&#xff09;官方文档&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/framework…

玩转ChatGPT:魔改文章成果格式

一、写在前面 首先&#xff0c;我让小Chat替我吐槽一下&#xff1a; 科研人员天天都在填各种表格&#xff0c;简直成了我们的“表格王子”和“表格公主”。从申请项目、提交论文到汇报成果&#xff0c;表格无处不在。我们填表格的时候总是期待着它能让我们的工作更高效、更顺…

Redis 内存消耗及回收

Redis 是一个开源、高性能的 Key-Value 数据库&#xff0c;被广泛应用在服务器各种场景中。Redis 是一种内存数据库&#xff0c;将数据保存在内存中&#xff0c;读写效率要比传统的将数据保存在磁盘上的数据库要快很多。所以&#xff0c;监控 Redis 的内存消耗并了解 Redis 内存…

tinyWebServer 学习笔记——四、日志系统

文章目录 一、基础知识1. 概念2. API 二、代码解析1. 单例模式2. 阻塞队列3. 日志类定义4. 生成日志文件并判断写入方式5. 日志分级与分文件 参考文献 一、基础知识 1. 概念 流程图 [2] 日志&#xff1a;由服务器自动创建&#xff0c;用于记录运行状态和错误信息&#xff1b;同…

C++系列六:运算符

C运算符 1. 算术运算符2. 关系运算符3. 逻辑运算符4. 按位运算符5. 取地址运算符6. 取内容运算符7. 成员选择符8. 作用域运算符9. 总结 1. 算术运算符 算术运算符用于执行基本数学运算&#xff0c;例如加减乘除和取模等操作。下表列出了C中支持的算术运算符&#xff1a; 运算…

JSON+AJAX+ThreadLocal+文件上传下载

文章目录 JSON和AJAX文档介绍1. JSON介绍1.1 JSON快速入门1.2 JSON和字符串转换1.2.1 JSON转字符串1.2.2 字符串转JSON1.2.3 JSON和字符串转换细节 1.3 JSON在java中使用1.3.1 Java对象和JSON字符串转换1.3.2 List对象和JSON字符串转换1.3.3 Map对象和JSON字符串转换 2. Ajax介…

DAY 58 数据库的存储引擎

存储引擎的概念 什么是存储引擎 MySQL中的数据用各种不下同的技术存储在文件中&#xff0c;每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力&#xff0c;这些不同的技术以及配套的功能在MySQL中称为存储引擎。 存储引擎是MySQL将数据存储在文…

JUC之volatile

作用&#xff1a;volatile是Java提供的一种轻量级的同步机制 保证内存可见性 不保证原子性 防止指令重排序 public class VolatileDemo {private static int num0;public static void main(String[] args) {new Thread(()->{while (num0){}},"A").start();try {…

Spark大数据处理讲课笔记4.6 Spark SQL数据源 - JDBC

文章目录 零、本讲学习目标一、Spark SQL读取关系数据库二、Spark SQL JDBC连接属性三、创建数据库与表&#xff08;一&#xff09;创建数据库&#xff08;二&#xff09;创建学生表&#xff08;二&#xff09;创建成绩表 四、读取和写入数据库表&#xff08;一&#xff09;利用…

力扣第 104 场双周赛 2681. 英雄的力量

原题链接力扣 题目大意&#xff1a;我开始看成连续子段了&#xff0c;写了个递归程序....... 一个数组任选一个子序列&#xff0c;子序列的力量值最大值平方*最小值。求所有子序列的力量和。 分析过程&#xff1a;如序列长度为n&#xff0c;子序列总数为2的n次幂&#xff0c…

SpringCloud------zookeeper代替Eureka,zookeeper版本冲突解决(七)

SpringCloud------zookeeper代替Eureka&#xff08;七&#xff09; SpringCloud整合zookeeper代替Eureka 注册中心zookeeper zookeeper是一个分布式协调工具&#xff0c;可以实现注册中心功能 关闭Linux服务器防火墙后&#xff0c;启动zookeeper服务器 zookeeper服务器取代Eur…

mac桌面文件删除怎么恢复?别急,有办法!

大家是不是习惯于将临时要用的文件都存放在桌面上。虽然文件放在桌面上&#xff0c;可以方便我们随时调取&#xff0c;但是也容易出现误删除的情况&#xff0c;给我们带来麻烦。mac桌面文件删除怎么恢复&#xff1f;希望通过本篇教程&#xff0c;你能找回误删除的桌面文件。 案…

script标签type值application/json,importmap和module

type&#xff08;默认text/javascript&#xff09; 该属性定义 script 元素包含或src引用的脚本语言。属性的值为 MIME 类型&#xff08;媒体类型&#xff09;&#xff1b; 如果没有定义这个属性&#xff0c;脚本会被视作 JavaScript。 如果 MIME 类型不是 JavaScript 类型&a…

GPT4结对编程实战,鹅厂一线研发真实使用感受

&#x1f449;腾小云导读 ChatGPT4相比ChatGPT3.5在逻辑推理能力上有很大的进步&#xff0c;其代码生成能力颇为优越。因此作者尝试在工作中某些不涉密的基础工作上&#xff0c;应用ChatGPT4来提升研发效率&#xff0c;简单尝试之后发现其在不少场景是有效的。本文将向大家展示…