KVM磁盤的格式介紹
KVM支援的虛拟磁盤類型有raw、qcow2
-
raw磁盤格式介紹
原始格式是磁盤映像的純二進制映像,非常便于移植。在支援稀疏檔案的檔案系統上,這種格式的圖像隻使用其中記錄的資料實際使用的空間。你随便dd一個file就模拟了一個raw格式的鏡像。由于裸的徹底,性能上來說的話還是不錯的。目前來看,KVM和XEN預設的格式好像還是這個格式。因為其原始,有很多原生的特性,例如直接挂載也是一件簡單的事情。
- 格式簡單支援鏡像格式的轉換,平時也會被用在中間格式轉換,
- 支援磁盤容量的擴容和減少
-
不支援建立snapshot(虛拟機快照),
它并不存儲中繼資料,是以可以作為保證虛拟機相容性的候選方案。然而,也正因為它不存儲中繼資料,是以不能支援某些進階特性,比如快照和壓縮等
稀疏檔案介紹:稀疏檔案與其他普通檔案基本相同,差別在于檔案中的部分資料是全0,且這部分資料不占用磁盤空間
中繼資料(Metadata),又稱中介資料、中繼資料,為描述資料的資料(data about data),主要是描述資料屬性(property)的資訊,用來支援如訓示存儲位置、曆史資料、資源查找、檔案記錄等功能。
-
qcow2磁盤格式介紹
現在比較主流的一種虛拟化鏡像格式,經過一代的優化,目前qcow2的性能上接近raw裸格式的性能,對于qcow2的格式,幾點還是比較突出的,qcow2的snapshot,可以在鏡像上做N多個快照
- 按需進行配置設定磁盤空間,不管檔案系統是否支援
- 支援快照
- 支援zlib的磁盤壓縮
- 支援AES的加密
AES:密碼學中的進階加密标準(Advanced Encryption Standard,AES),又稱Rijndael加密法,是美國聯邦政府采用的一種區塊加密标準。
講了raw和qcow2格式後我們了解一下vmdk磁盤格式
-
vmdk磁盤格式介紹
VMDK(VMWareVirtual Machine Disk Format)是虛拟機VMware建立的虛拟硬碟格式,檔案存在于VMware檔案系統中,被稱為VMFS(虛拟機檔案系統)。一個VMDK檔案代表VMFS在虛拟機上的一個實體硬碟驅動。所有使用者資料和有關虛拟伺服器的配置資訊都存儲在VMDK檔案中,VMware環境當中預設使用的磁盤格式
建立raw和qcow2格式的磁盤
建立raw格式的磁盤,kvm預設使用的格式
[[email protected] ~]# qemu-img create /kvm/data/rawtest-01.raw 5G
Formatting ‘/kvm/data/rawtest-01.raw’, fmt=raw size=5368709120
[[email protected] ~]# qemu-img info /kvm/data/rawtest-01.raw
image: /kvm/data/rawtest-01.raw
file format: raw
virtual size: 5.0G (5368709120 bytes)
disk size: 0
建立qcow2格式的磁盤
[[email protected] ~]# qemu-img create -f qcow2 /kvm/data/qcow2-test01.qcow2 5G
Formatting ‘/kvm/data/qcow2-test01.qcow2’, fmt=qcow2 size=5368709120 encryption=off cluster_size=65536 lazy_refcounts=off
[[email protected] ~]# qemu-img info /kvm/data/qcow2-test01.qcow2
image: /kvm/data/qcow2-test01.qcow2
file format: qcow2
virtual size: 5.0G (5368709120 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
對之前建立的虛拟機進行磁盤格式轉化
文法格式:
qemu-img convert -f fmt -O output_fmt filename output_filename
[[email protected] data]# pwd
/kvm/data
[[email protected] data]# ls
qcow2-test01.qcow2 vm-storage-01.qcow2 vmtest-edit-01.img
rawtest-01.raw vmtest02.img vnc_centos.qcow2
[[email protected] data]# qemu-img info vmtest-edit-01.img
image: vmtest-edit-01.img
file format: raw
virtual size: 8.0G (8589934592 bytes)
disk size: 3.7G
[[email protected] data]# qemu-img convert -f raw -O qcow2 vmtest-edit-01.img vmtest_qcow_disk.qcow2
接下來我們對虛拟機的配置檔案進行修改,其虛拟機調用qcow2的磁盤檔案
[[email protected] data]# virsh edit Centos7.4-01
-----省略部分代碼-----
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/> #将磁盤格式修改為我們剛才轉換的qcow2格式
<source file='/kvm/data/vmtest_qcow_disk.qcow2'/> #路徑為剛才轉換後的路徑
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>
-----省略部分代碼-----
啟動虛拟機Centos7.4-01
這時候我們就可以删除之前虛拟機raw磁盤格式的檔案
[[email protected] data]# rm -rf /kvm/data/vmtest-edit-01.img
[[email protected] data]# virsh start Centos7.4-01
域 Centos7.4-01 已開始
虛拟機快照管理
接下來我們說一下快照,要注意的是,如果你沒有選擇将磁盤格式轉化為qcow2格式的話,是不支援快照功能的。我們現在有2個虛拟機,分别是兩種不同格式的磁盤,一個qcow2,一個raw,那麼我們就将這兩個虛拟機做一個對比。
Snapshot (help keyword ‘snapshot’)
snapshot-create 使用 XML 生成快照
snapshot-create-as 使用一組參數生成快照
snapshot-current 擷取或者設定目前快照
snapshot-delete 删除域快照
snapshot-dumpxml 為域快照轉儲 XML
snapshot-edit 編輯快照 XML
snapshot-info 快照資訊
snapshot-list 為域列出快照
snapshot-parent 擷取快照的上級快照名稱
snapshot-revert 将域轉換為快照
使用raw磁盤格式建立快照
[[email protected] data]# virsh snapshot-create vmtest02
錯誤:unsupported configuration: internal snapshot for disk vda unsupported for storage type raw
建立快照是出現這個資訊表示目前虛拟機的格式raw,需要将磁盤格式轉為qcow2的格式
使用qcow2磁盤格式建立快照
需要注意的是,做快照後,磁盤空間會變大,因為快照被會占用磁盤空間,是以說是内部快照,建立完成後會生成一個快照名稱,這個快照名稱是根據Unix時間戳來生成的
文法格式:
virsh snapshot-create <vmname>
檢視快照清單
[[email protected] data]# virsh snapshot-list Centos7.4-01
名稱 生成時間 狀态
------------------------------------------------------------
1574827343 2019-11-26 23:02:23 -0500 running
恢複快照
[[email protected] data]# virsh snapshot-lrevert Centos7.4-01 1574827343
删除指定快照
KVM虛拟機克隆
- 通過為KVM虛拟機安裝作業系統隻是安裝最基本的作業系統模闆。這是必須的,因為每個虛拟機都需要作業系統。實際應用過程中,主要是基于作業系統安裝好環境之後,再作為業務模闆,友善快速部署或者遷移等。
- 克隆KVM虛拟機使用到的指令是virt-clone,該工具主要用來克隆虛拟機,也可以使用一系列參數對克隆出的新虛拟機進行定制化。
-
需要注意的是,virt-clone不會修改Guest OS内的任何資訊,它僅僅隻是複制虛拟機磁盤并在主控端端做一些修改。是以,類似修改密碼、設定靜态IP位址等都無法通過virt-clone來完成。
虛拟機克隆方式主要有兩種:完整克隆(自動克隆),(手動克隆)
virt-clone指令的用法
選項:optional arguments:
-h, --help show this help message and exit
–version show program’s version number and exit
–connect URI 通過 libvirt URI 連接配接到虛拟機管理程式
通用選項:
-o ORIGINAL_GUEST, --original ORIGINAL_GUEST
原始客戶機名稱;必須為關閉或者暫停狀
态。
–original-xml ORIGINAL_XML
将 XML 檔案用于原始客戶機。
–auto-clone 從原始客戶機配置中自動生成克隆名稱和
存儲路徑。
-n NEW_NAME, --name NEW_NAME
新客戶機的名稱
–reflink 使用 btrfs COW 輕量副本
存儲配置:
-f NEW_DISKFILE, --file NEW_DISKFILE
為新客戶機使用新的磁盤鏡像檔案
–force-copy TARGET 強制複制裝置(例如:如果 ‘hdc’
是隻讀光驅裝置,則使用 --force-copy=hdc)
–nonsparse 不使用稀疏檔案作為克隆的磁盤鏡像
–preserve-data 不克隆存儲,通過 --file
參數指定的新磁盤鏡像将保留不變
聯網配置:
-m NEW_MAC, --mac NEW_MAC
為克隆客戶機生成新的固定 MAC
位址。預設為随機生成 MAC。
其它選項:
–replace 不檢查命名沖突,覆寫任何使用相同名稱
的客戶機。
–print-xml 列印生成的 XML 域,而不是建立客戶機。
–check CHECK 啟用或禁用驗證檢查。例如:
–check path_in_use=off
–check all=off
-q, --quiet 抑制非錯誤輸出
-d, --debug 輸入故障排除資訊
自動克隆(完整克隆)
使用virt-clone克隆虛拟機Centos7.4-01,克隆後虛拟機起名為kvm-cone-01
需要注意的是虛拟機進行克隆時需要在關機狀态下進行
手動克隆
很簡單的一條指令,就已經完成了克隆。那麼,我們除了用這條指令能夠克隆之外,我們想一下,能不能夠用手動的方式克隆那?答案是可以的,kvm的虛拟機有2兩個檔案,一個磁盤,一個配置檔案,好的,那麼我們就來手動的克隆一台虛拟機。
基于虛拟機Centos7.4-01進行克隆
配置檔案路徑:/etc/libvirt/qemu/Centos7.4-01.xml
虛拟磁盤路徑:/kvm/data/vmtest_qcow_disk.qcow2
在克隆之前我們先将剛才克隆的虛拟機删除掉,删除之前需要對剛才克隆的kvm-clone-01啟動并且關機一次,不然删除時會出現報錯
[[email protected] ~]# virsh destroy kvm-clone-01
錯誤:删除域 kvm-clone-01 失敗
錯誤:Requested operation is not valid: domain is not running
[[email protected] ~]# virsh start kvm-clone-01
域 kvm-clone-01 已開始
[[email protected] ~]# virsh shutdown kvm-clone-01
域 kvm-clone-01 被關閉
[[email protected] ~]# virsh destroy kvm-clone-01
域 kvm-clone-01 被删除
[[email protected] ~]# virsh undefine kvm-clone-01
域 kvm-clone-01 已經被取消定義
[[email protected] ~]# rm -rf /kvm/data/vmtest_qcow_disk-clone.qcow2
需要注意的是使用undefine删除虛拟機時隻會删除配置檔案資訊,虛拟磁盤檔案還是存在的
手動克隆虛拟機
其實就是将需要的克隆的虛拟機的配置檔案和磁盤檔案cp一份,修改配置檔案的相應的資訊
備份Centos7.4-01虛拟機配置檔案為clone-kvm-01
[[email protected] qemu]# virsh dumpxml Centos7.4-01 > /etc/libvirt/qemu/clone-kvm-01.xml
[[email protected] qemu]# ls /etc/libvirt/qemu
autostart Centos7.4-01.xml
clone-kvm-01.xml
csdn_vm-01.xml networks vmtest02.xml
備份磁盤檔案
[[email protected] qemu]# cd /kvm/data/
[[email protected] data]# ls
qcow2-test01.qcow2 vm-storage-01.qcow2 vmtest_qcow_disk.qcow2
rawtest-01.raw vmtest02.img vnc_centos.qcow2
[[email protected] data]# cp vmtest_qcow_disk.qcow2 clone-kvm-01.qcow2
修改克隆後配置檔案資訊clone-kvm-01.xml
[[email protected] ~]# vim /etc/libvirt/qemu/clone-kvm-01.xml
a: <name>clone-kvm</name>
b: 删除UUID
c: 删除mac address
d: 修改虛拟機磁盤路徑及名字 <source file='/kvm/data/clone-kvm-01.qcow2'/>
導入配置修改好的配置檔案資訊
[[email protected] qemu]# virsh define /etc/libvirt/qemu/clone-kvm-01.xml
定義域 clone-kvm-01(從 /etc/libvirt/qemu/clone-kvm-01.xml)
[[email protected] qemu]# virsh list --all
Id 名稱 狀态
----------------------------------------------------
- Centos7.4-01 關閉
- clone-kvm-01 關閉
- csdn_vm-01 關閉
- vmtest02 關閉
[[email protected] qemu]# virsh start clone-kvm-01
域 clone-kvm-01 已開始