每天5分鐘複習OpenStack(八)儲存虛擬化

2023-11-02 15:00:36

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