KVM儲存虛擬化是通過儲存池(Storage Pool)和卷(Volume)來管理的。Storage Pool 是宿主機上可以看到的一片儲存空間,可以是多種型別,Volume 是在 Storage Pool 中劃分出的一塊空間,宿主機將 Volume 分配給虛擬機器器,Volume 在虛擬機器器中看到的就是一塊硬碟。
此環境中使用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/
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
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
驗證,hda 為光碟裝置,
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 /
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
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
#檢視根分割區
[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 /
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