每天5分钟复习OpenStack(八)存储虚拟化

KVM存储虚拟化是通过存储池(Storage Pool)和卷(Volume)来管理的。Storage Pool 是宿主机上可以看到的一片存储空间,可以是多种类型,Volume 是在 Storage Pool 中划分出的一块空间,宿主机将 Volume 分配给虚拟机,Volume 在虚拟机中看到的就是一块硬盘。

1、文件类存储池

此环境中使用sdb盘做为kvm的存储池来使用,也可以使用分区,(但是一般不建议)实际的生产环境中一般都是两块硬盘做了RAID1 ,在其上创建存储池.

1.1 磁盘格式化文件系统

#创建文件系统
 mkfs.xfs -f /dev/sdb 
 
 # 创建挂载目录
 mkdir -pv /data/volumes 
 
 #挂载 
 mount -a /dev/sdb /data/volumes

1.2 创建存储池

virsh pool-define-as <name>  <type> --target 指定目标  --source-path 指定源 
virsh pool-define-as sata-sdb dir --target /data/volumes/ --source-path /data/volumes/
  • sata-sdb:指定新的存储池的名称,方便区分各种类型存储池。
  • dir:指定存储池的类型,本例中为基于目录的存储池。
  • --target /data/volumes/:指定存储池将被创建的目标路径。
  • --source-path /data/volumes/:指定存储池的数据所在的源路径。

1.3 查看存储池

virsh pool-list --all 
 Name                 State      Autostart 
-------------------------------------------
 sata-sdb             inactive   no        

1.4 启动存储池,并设置存储池开机自启动

virsh pool-start sata-sdb
virsh pool-autostart sata-sdb

1.5 验证存储池为活动状态

# virsh pool-list 
 Name                 State      Autostart 
-------------------------------------------
 sata-sdb             active     yes       

1.6 删除存储池

#先停止储存池才能删除
virsh pool-destroy --pool pool-name 
#删除存储池的相关数据目录(但存储池的配置还在)
virsh pool-delete --pool pool-name 
#删除存储池配置文件

1.7 在存储池中创建一个卷 用来扩容磁盘

virsh vol-create-as --pool sata-sdb --name vm_test_sdb --capacity 10G --allocation 10 --format qcow2
  • pool : 存储池的名字
  • name : 创建卷的名字
  • capacity : 总容量
  • allocation : 初始容量
  • format : 镜像格式,支持多种格式 常见qcow2 raw 等

1.8 验证 存储池中的卷

virsh vol-list sata-sdb 
 Name                 Path                                    
------------------------------------------------------------------------------
 vm_test_sdb          /data/volumes/vm_test_sdb       

qemu-img info 查看文件的详细信息

qemu-img info vm_test_sdb 
image: vm_test_sdb
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
    compat: 0.10

上面这些常规操作,大部分文章都有写,下面介绍一些运维很常见需求,但是类似文章很少。

如给虚拟机添加一块盘、虚拟机系统盘扩容、

二: 给虚拟机加上一块磁盘

--live 参数去掉就是离线添加磁盘,离线需要关闭虚拟机。

virsh attach-disk test   /data/volumes/vm_test_sdb   \
--targetbus scsi sdc --sourcetype file \
--driver qemu --subdriver qcow2 \
--type disk --live --config
  • /data/volumes/vm_test_sdb 指定磁盘文件路径
  • targetbus 指定总线类型为bus ,对应虚拟机磁盘为sdc,
  • sourcetype 指定源文件类型为 file
  • drive 指定驱动为qemu 自定义
  • live 在线扩容
  • config 写入配置文件

验证,hda 为光盘设备,

  • 猜一猜:sdc 为添加的盘符,那虚拟机里盘符是否也是sdc了?

    virsh domblklist test
    Target Source

    vda /data/images/test.qcow2
    hda -
    sdc /data/volumes/vm_test_sdb

答案是根据添加的磁盘的类型和虚拟机device 设备来的如下图所示,显示为sda

[root@localhost ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   10G  0 disk 
sr0     11:0    1 1024M  0 rom  
vda    253:0    0   50G  0 disk 
├─vda1 253:1    0  200M  0 part /boot
└─vda2 253:2    0 49.8G  0 part /
  • 1.9 卸载虚拟机磁盘
    --live 在线卸载,没有此参数,则需要关机才能卸载。
    sdc 为宿主机上识别到的盘
    virsh domblklist test可以查看到

    virsh detach-disk test sdc --live --config
    Disk detached successfully

三:虚拟机系统盘在线扩容

在扩容之前我们在宿主机上查看虚拟机的系统盘的大小,最高50G分配了40G 实际占用14G

virsh domblkinfo test --device vda 
Capacity:       53687091200
Allocation:     40531144192
Physical:       1494298624
  • 3.1 在宿主机调整磁盘文件大小

    virsh blockresize --path /data/images/test.qcow2 --size 100G test
    #-- path指定磁盘文件路径 --size 指定扩容之后的大小 test 为domname

  • 3.2 虚拟机层面扩分区

  • 3.2.1 安装必要的包

    yum -y install cloud-init cloud-utils-growpart

  • 3.2.2 扩容磁盘大小 growpart

    #查看根分区
    [root@localhost ~]# lsblk
    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sr0 11:0 1 1024M 0 rom
    vda 253:0 0 100G 0 disk
    ├─vda1 253:1 0 200M 0 part /boot
    └─vda2 253:2 0 49.8G 0 part /

    #扩容跟分区
    [root@localhost ~]# growpart /dev/vda 2
    CHANGED: partition=2 start=411648 old: size=104445952 end=104857600 new: size=209303519 end=209715167

    #验证根分区
    [root@localhost ~]# lsblk
    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sr0 11:0 1 1024M 0 rom
    vda 253:0 0 100G 0 disk
    ├─vda1 253:1 0 200M 0 part /boot
    └─vda2 253:2 0 99.8G 0 part /

  • 3.2.3 文件系统扩容

    xfs_growfs /dev/vda2
    meta-data=/dev/vda2 isize=512 agcount=4, agsize=3263936 blks
    = sectsz=512 attr=2, projid32bit=1
    = crc=1 finobt=0 spinodes=0
    data = bsize=4096 blocks=13055744, imaxpct=25
    = sunit=0 swidth=0 blks
    naming =version 2 bsize=4096 ascii-ci=0 ftype=1
    log =internal bsize=4096 blocks=6374, version=2
    = sectsz=512 sunit=0 blks, lazy-count=1
    realtime =none extsz=4096 blocks=0, rtextents=0
    data blocks changed from 13055744 to 26162939

(可选)移除安装的包

yum -y remove cloud-init cloud-utils-growpart

四: 将宿主机的硬盘透传给虚拟机使用

在超融合的环境中,存储是部署在虚拟机中的,那怎么将宿主机的硬盘直接透传给虚拟机了?

大部分文章都是通过XML的方式,我介绍下命令行的方式来实现,效率更高,而且便于自动化实现。

在Linux 系统中有能唯一描述磁盘的

总结来说,/dev/disk/by-uuid/使用磁盘的UUID作为标识符,而/dev/disk/by-id/使用磁盘的ID作为标识符。UUID是独一无二的且稳定的,适用于需要持久标识磁盘的情况。而磁盘ID虽然可以唯一标识磁盘,但可能会受到硬件变更的影响。

因此我们建议是使用by-uuid 来唯一描述一个磁盘设备

virsh attach-disk <虚拟机名字> <uuid> <磁盘盘符>

virsh attach-disk test /dev/disk/by-uuid/049b1f34-6c35-4db1-ad04-478ae9603789 sdb
相关推荐
java知路1 小时前
阿里云aliyun gradle安装包下载地址
阿里云·云计算
GJCTYU1 小时前
阿里云多端低代码开发平台魔笔使用测评
低代码·阿里云·云原生·容器·serverless·云计算
落樱坠入星野1 小时前
拿下阿里云之后如何在本地运行镜像进行分析
经验分享·安全·网络安全·阿里云·云计算
弗锐土豆11 小时前
Windows系统中Oracle VM VirtualBox的安装
windows·虚拟机·virtualbox
知孤云出岫11 小时前
云上拼团GO指南——腾讯云博客部署案例,双11欢乐GO
云计算·腾讯云
lihuhelihu12 小时前
第3章 CentOS系统管理
linux·运维·服务器·计算机网络·ubuntu·centos·云计算
dessler13 小时前
Linux系统-ubuntu系统安装
linux·运维·云计算
Elastic 中国社区官方博客14 小时前
如何将数据从 AWS S3 导入到 Elastic Cloud - 第 3 部分:Elastic S3 连接器
大数据·elasticsearch·搜索引擎·云计算·全文检索·可用性测试·aws
九河云14 小时前
如何选择适合的AWS EC2实例类型
服务器·云计算·aws
Huaqiwill17 小时前
Ubuntun搭建并行计算环境
linux·云计算