KVM的存儲選項有多種,包括虛擬磁盤文件、基於文件系統的存儲和基於設備的存儲。
後端
1、KVM的存儲性能解析對比服務器
一、虛擬磁盤文件網絡
當系統建立KVM虛擬機的時候,默認使用虛擬磁盤文件做爲後端存儲。安裝後,虛擬機認爲在使用真實的磁盤,但實際上看到的是用於模擬硬盤的虛擬磁盤文件。這一額外的文件系統層會下降系統速度。dom
固然,基於磁盤鏡像的虛擬磁盤並不是全無益處,磁盤文件系統能夠很輕鬆地用於其它的KVM虛擬化宿主機。可是若是您但願優化KVM虛擬化性能,最好考慮其它的存儲方式。ssh
二、基於文件系統的KVM存儲ide
在安裝KVM宿主機時,可選文件系統爲dir(directory)或fs(formatted block storage)做爲初始KVM存儲格式。默認選項爲dir,用戶指定本地文件系統中的一個目錄用於建立磁盤鏡像文件。性能
fs選項能夠容許用戶指定某個格式化文件系統的名稱,把它做爲專用的磁盤鏡像文件存儲。兩種KVM存儲選項之間最主要的區別在於:fs文件系統不須要掛載到某個特定的分區。優化
兩種選項所指定的文件系統,均可以是本地文件系統或位於SAN上某個物理宿主機上的網絡文件系統。後者具有必定的優點,由於SAN能夠很輕易地實現多個主機同時訪問,而本地磁盤或文件系統則沒法實現。ui
還有一種基於文件的磁盤存儲方式是netfs,用戶能夠指定一個網絡文件系統的名稱,如Samba.用這種方式做爲KVM存儲很方便,由於這樣很容易訪問到位於其它服務器上的文件系統,同時用戶也能夠經過多臺宿主機訪問磁盤文件。spa
全部的這些基於文件的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,能夠很容易的配置成多個主機同時訪問某個邏輯卷。
2、KVM存儲池管理
爲簡化KVM存儲管理的目的,能夠建立存儲池。在宿主機上建立存儲池,能夠簡化KVM存儲設備的管理。採用存儲池的方式還能夠實現對提早預留的存儲空間的分配。這種策略對於大型應用環境頗有效,存儲管理員和建立虛擬機的管理常常不是同一我的。這樣,在建立首臺虛擬機以前先完成KVM存儲池的建立是很好的方法。
一、存儲池的基本概念
存儲池是一個由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
三、建立基於目錄的存儲池(dir:Filesystem Directory)
virsh pool-define-as test dir --target /kvm/test
virsh pool-build test
virsh pool-start test
virsh pool-autostart test
四、建立基於分區的存儲池(fs:Pre-Formatted Block Device)
Libvirtd會自動掛載mount分區
(1)準備分區並建立文件系統
fdisk /dev/sdc
mkfs.xfs /dev/sdc1
(2)建立:
virsh pool-define-as test fs --source-dev /dev/sdc1 --target /kvm/test
virsh pool-build test
virsh pool-start test
virsh pool-autostart test
五、建立基於磁盤的存儲池(disk:Physical Disk Device)
virsh pool-define-as test disk --source-dev /dev/sdc --source-format gpt --target /dev
virsh pool-define test
virsh pool-start test
virsh pool-autostart test
六、建立基於LVM的存儲池(logical:LVM Volume Group)
基於LVM的存儲池要求使用所有磁盤分區
建立存儲池時,首先準備一個vg,vg中不須要建立lv
virsh pool-define-as kvmvg logical --source-name kvmvg --target /dev/kvmvg
七、建立基於iSCSI的存儲池(iscsi:iSCSI Target)
virsh pool-define-as storage01 iscsi --source-host 192.168.2.20 \ //存儲服務器的地址
> --source-dev iqn.2017-10.com.cloud.www:storage001 \ //target目標
> --target /dev/disk/by-path
virsh pool-start storage01
virsh pool-autostart storage01
八、基於NFS的存儲池(netfs:Network Export Directory)
[root@kvm001 ~]# virsh pool-define-as --name kvmnfs --type netfs \
> --source-host 192.168.2.20 \
> --source-path /nfsshare \
> --target /nfstest //須要提早建立目錄
3、KVM存儲池管理
一、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 擦除卷
2、在存儲池中建立一個qcow2格式的卷
virsh vol-create-as vm test.qcow2 1G --format qcow2
3、向vm2虛擬機添加test卷
用法:attach-disk <domain> <source> <target>
virsh attach-disk vm2 /kvm/vfs/test.qcow2 /kvm/vfs --cache none