一、kvm儲存模式
KVM的存儲選項有多種,包括虛擬磁盤文件、基於文件系統的存儲和基於設備的存儲。
1.虛擬磁盤文件
當系統創建KVM虛擬機的時候,默認使用虛擬磁盤文件作為后端存儲。安裝后,虛擬機 認為在使用真實的磁盤,但實際上看到的是用於模擬硬盤的虛擬磁盤文件。
這一額外的文件 系統層會降低系統速度。 當然,基於磁盤鏡像的虛擬磁盤並非全無益處,磁盤文件系統可以很輕松地用於其它的 KVM虛擬化宿主機。
但是如果您希望優化KVM虛擬化性能,最好考慮其它的存儲方式。
2.基於文件系統的KVM存儲
在安裝KVM宿主機時,可選文件系統為dir(directory)或fs(formatted block storage) 作為初始KVM存儲格式。默認選項為dir,用戶指定本地文件系統中的一個目錄用於創建磁盤 鏡像文件。 fs選項可以允許用戶指定某個格式化文件系統的名稱,把它作為專用的磁盤鏡像文件存 儲。
兩種KVM存儲選項之間最主要的區別在於:fs文件系統不需要掛載到某個特定的分區。 兩種選項所指定的文件系統,都可以是本地文件系統或位於SAN上某個物理宿主機上的 網絡文件系統。后者具備一定的優勢,因為SAN可以很輕易地實現多個主機同時訪問,而本 地磁盤或文件系統則無法實現。
還有一種基於文件的磁盤存儲方式是netfs,用戶可以指定一個網絡文件系統的名稱, 如Samba.用這種方式作為KVM存儲很方便,因為這樣很容易訪問到位於其它服務器上的文件 系統,同時用戶也可以通過多台宿主機訪問磁盤文件。
所有的這些基於文件的KVM存儲方式都有一個缺點:文件系統固有缺陷。因為虛擬機的 磁盤文件不能直接讀取或寫入KVM存儲設備,而是寫入宿主機OS之上的文件系統。
這也就意 味着在訪問和寫入文件時中間增加了額外一層,這通常會降低性能。所以,如果您希望尋找 KVM虛擬化性能最優方案,最好考慮基於設備的存儲。
3.基於設備的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,可以很容易的配置成多個主機同時訪問 某個邏輯卷。
二、存儲池管理
基本概念
顯示池與卷的信息
基於目錄的存儲池
基於磁盤的存儲池
基於分區的存儲池
基於LVM的存儲池
基於iSCSI的存儲池
基於NFS的存儲池
1) 存儲池的基本概念 存儲池是一個由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 擦除卷
五、存儲卷命令
1.查看系統中的存儲池
pool-list --details /或者 --all
2.查看vm存儲池的信息
pool-info vm
3.查看vm存儲池中的卷信息
vol-list vm
4.創建基於目錄的存儲池 dir:Filesystem Directory
1.通過virsh創建
pool-define-as test1 dir --target '/kvm-vm/dirpool/' 創建儲存池 pool-build test1 構建池 test1 pool-start test1 池 test1 已啟動
pool-autostart test1 池 test1 標記為自動啟動
5.創建基於分區的存儲池 fs:Pre-Formatted Block Device
Libvirtd會自動掛載mount分區
1.查看硬盤
lsblk
2.做物理卷和卷組
pvcreate /dev/sdb vgcreate vgpool /dev/sdb pvdisplay vgs
2.創建
pool-define-as vgpool logical --source-name vgpool --target /dev/vgpool 定義池 vgpool pool-start vgpool 池 vgpool 已啟動
pool-autostart vgpool 池 vgpool 標記為自動啟動
6.基於LVM的存儲池要求使用全部磁盤分區
1. 安裝主鍵
yum -y install rpcbind nfs-utils 客戶端和主端都要做
2.啟動程序
主: systemctl start rpcbind 主服務器只需要啟動這一個 systemctl enable rpcbind 從: systemctl start rpcbind systemctl enable rpcbind systemctl start nfs-server.service systemctl enable nfs-server.service
連接nfs時要么關閉防火牆 連接端口 要么去nfs配置文件固定端口(nfs初始狀態端口隨機的)
3.創建lvm
pvcreate /dev/sdb vgcreate nfsvg /dev/sdb vgdisplay nfsvg lvcreate -n nfslv1 -l 5119 nfsvg lvs
mkfs.xfs /dev/nfsvg/nfslv1
4.掛載lvm
mkdir /mnt/nfs mount /dev/nfsvg/nfslv1 /mnt/nfs/ 掛載位置 vim /etc/fstab 設置開機自啟動
添加權限
vim /etc/exports
重啟 rpcbind、nfs-server.service 服務
查看是否生效
exportfs -av showmount -e 192.174.1.11 遠程驗證 mount -t nfs 192.174.1.11:/mnt/nfs /mnt/ 遠程掛載上驗證
5.創建儲存池
pool-define-as nfspool netfs --source-host 192.174.1.11 --source-path /mnt/nfs --target /kvm-vm/nspool/ 定義池 pool-build nfspool 構建池 pool-start nfspool 啟動池 pool-autostart nfspool 設置自啟動池
六、存儲卷管理
1.儲存池概念
存儲池被分割為存儲卷(Storage Volume)
存儲卷
文件
塊設備(如物理分區、LVM邏輯卷等)
Libvirt管理的其他類型存儲的抽象
2.存儲卷管理
創建
克隆
刪除
移動
修改大小
七、創建儲存卷
1.查看存儲池VM中的卷
vol-list vm
2.創建一個qcow2格式的卷
vol-create-as vgpool vspool.qcow2 8G --format qcow2
3.建立基於LVM的卷
vol-create-as vgpool vgvm1 8G