當前位置:
首頁 > 最新 > Virsh KVM文件管理

Virsh KVM文件管理

通過文件管理可以直接查看、修改、複製虛擬機的內部文件。例如,當系統因為配置文件無法啟動時,可以直接修改虛擬機的文件。虛擬機磁碟文件主要有raw和qcow2格式。raw格式性能最好,速度最快,它的缺點就是不支持一些新的功能,如支持鏡像,zlib磁碟壓縮,AES加密等。要使用鏡像功能,磁碟格式必須為qcow2。raw格式的話,速度稍微快點,在高版本的qemu-kvm中,幾乎不比qcow2的格式快,而qcow2格式節省空間,可動態增長,在公有雲中廣泛使用,建議使用qcow2。所有有時候,我們需要將raw格式的磁碟轉換成qcow2格式(qemu-img convert -f raw -O qcow2 /kvmvm/vmtest01.img /kvm-vm/vmtest01.qcow2)。

虛擬磁碟離線訪問工具

離線訪問工具應用場景

? 觀看或下載位於虛擬機磁碟中的文件

? 編輯或上傳文件到虛擬機磁碟

? 讀取或寫入的虛擬機配置

? 準備新的磁碟映像,其中包含文件、目錄、文件系統、分區、邏輯卷和其他選項

? 拯救和修復客戶無法啟動或需要更改啟動配置的虛擬機

? 監控虛擬機的磁碟使用情況

? 根據組織安全標準審計虛擬機的合規性

? 通過克隆和修改模板來部署虛擬機

? 讀取CD和DVD ISO和軟盤映像

主要是安裝libguestfs libguestfs-tools軟體工具,就可以直接讀取qcow2格式的磁碟文件。

下面的這些操作最好要在虛擬機關機狀態下做,否則會出錯。

virt-inspector顯示os版本、內核、驅動、掛載點、應用等等,很少使用。

# virt-inspector /mykvm/vms/vm1

# virt-inspector --format=qcow2 -a /mykvm/vms/vm1 |more

virt-cat命令類似於cat命令

# virt-cat -a /mykvm/vms/vm1 /etc/hostname

vrit-edit命令用於編輯文件,用法與vim基本一致,例如把主機名改成

vmtest001.test.com

[root@kvm001 ~]# virt-edit -a /kvm-vm/vmtest01.qcow2 /etc/hostname

vmtest001.test.com

然後再查看,發現主機名已經更改。

[root@kvm001 ~]# virt-cat -a /kvm-vm/vmtest01.qcow2 /etc/hostname

vmtest001.test.com

virt-df命令用於查看虛擬機磁碟信息

[root@kvm001 ~]# virt-df -h -a vmtest01

virt-copy-out這個命令可以把虛擬機里的文件複製出來, 用法如下

virt-copy-out -d domname file|dir [file|dir ...] localdir

virt-copy-out -a disk.img file|dir [file|dir ...] localdir

如:[root@kvm001 ~]# virt-copy-out -d vmtest01 /etc/passwd ./

[root@kvm001 ~]# ls

anaconda-ks.cfg initial-setup-ks.cfg passwd

virt-copy-in是將文件複製到虛擬機裡面,用法和virt-copy-out基本相同

如:[root@kvm001 ~]# echo "this is a test" > test.txt

[root@kvm001 ~]# virt-copy-in -d vmtest01 test.txt /opt/

guestfish命令:

guestfish [--ro|--rw] -i -a /path/to/disk.img

guestfish [--ro|--rw] -i -d name-of-libvirt-domain

Guestmount:

在一些使用場景中,直接把虛機鏡像文件掛接在本地系統中,也是一個簡便的辦法。例如。

# guestmount -a vm1.qcow2 -m /dev/vg_centosbase/lv_root --rw /mnt

如果事先不知道虛機內部分區的路徑信息,則可以使用參數-i來讓guestmount自己決定使用哪一個掛接點:

# guestmount -a vm1.qcow2 -i --rw /mnt

將/mnt下的掛載進行卸載

#guestunmount /mnt

管理虛擬磁碟

虛擬化項目中存儲的注意事項

? 存儲的性能幾乎總是虛擬化的瓶頸

? 通過多個磁碟驅動以分布磁碟I/O來實現存儲解決方案

? 驅動器的速度越快越好,考慮SSD與機械磁碟的混合使用

? 考慮部署集中化的SAN/NFS來實現高可用性和實時遷移

虛擬磁碟類型

? 固定 Fixed

ü 在配置時,指定磁碟大小

ü 不管在虛擬磁碟上實際存儲多少數據,都將佔用相同大小主機磁碟空間

? 動態 Dynamic

ü 增長到最大容量,但是只根據需求使用更多的空間

? 差異(差分盤) Differencing

ü 因為創建是差異磁碟,所以只保存變更的數據,類似於lvm的快照

ü 例如,將操作系統安裝在父盤,然後創建差異化磁碟來執行進一步配置,桌面虛擬化使用很多。

KVM支持的虛擬磁碟類型:

? raw

ü 這並非是一種真正的磁碟格式,而是代表虛擬機所使用的原始鏡像

ü 它並不存儲元數據,因此可以作為保證虛擬機兼容性的候選方案。然而,也正因為它不存儲元數據,因此不能支持某些高級特性,比如快照和壓縮等

ü 格式簡單,容易轉化為其他的格式。需要文件系統的支持才能支持sparse file

? cow: copy-on-wirte格式,曇花一現

? qcow: QEMU早期的copy-on-write格式,過渡性方案

? qcow2:

ü 按需進行分配磁碟空間,不管文件系統是否支持

ü 支持快照

ü 支持zlib的磁碟壓縮

ü 支持AES的加密

? vmdk(virtual machine disk)

ü VMware環境當中默認使用的磁碟格式

? vhdvhdx(virtual Hard Disk)

ü 微軟默認採用的文件格式

? vdi(virtual Box)

可以通過qemu-img --help | grep Supported命令查看KVM所支持的磁碟格式

[root@kvm001 ~]# qemu-img --help | grep Supported

Supported formats: vvfat vpc vmdk vhdx vdi ssh sheepdog rbd raw host_cdrom

host_floppy host_device file qed qcow2 qcow parallels nbd iscsi gluster dmg tftp

ftps ftp https http cloop bochs blkverify blkdebug

qemu-img是QEMU的磁碟管理工具,在qemu-kvm源碼編譯後就會默認編譯好qemuimg這個二進位文件。qemu-img也是QEMU/KVM使用過程中一個比較重要的工具,qemu-img工

具的命令行基本用法如下:

qemu-img command [command options]

qemu-img常用功能命令:

? check 檢查完整性

? create 創建鏡像

? commit 提交更改

? compare 比較

? convert 轉換

? info 獲取信息

? map 映射

? snapshot 快照管理

? rebase 在已有的鏡像的基礎上創建新的鏡像

? resize 調整大小

? amend 修訂鏡像格式選項

創建虛擬磁碟,默認是創建raw格式的磁碟

[root@kvm001 ~]# qemu-img create t1.img 1g

[root@kvm001 ~]# qemu-img info t1.img

image: t1.img

file format:raw//默認磁碟格式

virtual size: 1.0G (1073741824 bytes)

disk size: 0 //創建的是sparse模式

創建qcow2格式的磁碟

[root@kvm001 ~]# qemu-img create -f qcow2 test1.qcow2 1g

[root@kvm001 ~]# qemu-img info test1.qcow2

image: test1.qcow2

file format: qcow2

virtual size: 1.0G (1073741824 bytes)

disk size: 196K

cluster_size: 65536

Format specific information:

compat: 1.1

lazy refcounts: false

創建qcow2格式磁碟時,可以指定選項,通過-o參數,常用參數主要有:

? backing_file 指定後端鏡像文件

? backing_fmt 設置後端鏡像的鏡像格式

? encryption 設置加密

? cluster_size 設置簇大小,取值在512到2M之間,默認是64K

? preallocation 預分配模式 (allowed values: off, metadata, falloc,

full)

ü off 預設策略,既不使用預分配策略

ü metadata 分配元數據,預分配後的虛擬磁碟仍然屬於稀疏模式類型磁碟

ü full 分配所有磁碟空間並置零,預分配後的虛擬磁碟屬於厚盤(非稀疏映像類型)

ü falloc 分配文件的塊並標示它們的狀態為未初始化,創建速度快

例如:

[root@kvm001 ~]#qemu-img create -f qcow2 test2.qcow2 1g -o

preallocation=full

[root@kvm001 ~]# qemu-img info test2.qcow2

image: test2.qcow2

file format: qcow2

virtual size: 1.0G (1073741824 bytes)

disk size: 1.0G

cluster_size: 65536

Format specific information:

compat: 1.1

lazy refcounts: false

後備差異虛擬磁碟(VMware中稱作鏈接克隆)

? 存儲與基礎鏡像(父)磁碟的變化

ü 基礎鏡像(父)磁碟不會改變

ü 差異磁碟隔離變化

ü 多個差異磁碟可以使用相同的基礎鏡像(父)磁碟

? 優點:標準化基礎鏡像,節省空間

? 缺點:增加了開銷,較差的性能 (尤其是vmware虛擬機中的試驗環境,要等待很久才能啟動)

首選,需要擁有一個基礎虛擬磁碟,可以通過安裝一個全新的虛擬機得到,然後將各種使用的基本軟體設置好。

創建差異虛擬磁碟:

[root@kvm001 kvm-vm]# qemu-img create -f qcow2

> -o backing_file=base-centos7.qcow2 \指定父磁碟文件

> oa-disk0.qcow2

[root@kvm001 kvm-vm]# qemu-img info oa-disk0.qcow2

image: oa-disk0.qcow2

file format: qcow2

virtual size: 10G (10737418240 bytes)

disk size: 17M

cluster_size: 65536

backing file: base-centos7.qcow2

Format specific information:

compat: 1.1

lazy refcounts: false

然後根據差異磁碟創建虛擬機 (強烈建議通過修改配置文件)

如果修改配置文件的話,只需要修改主機名,uuid值,及mac地址即可。

[root@kvm001 kvm-vm]# virt-install

> --import

> --name=oa

> --vcpus=1 --ram=1024

> --disk path=oa-disk0.qcow2

> --network netwrok=default

> --graphics vnc,listen=0.0.0.0

> --os-type=linux

> --os-variant=centos7.0

查看,發現虛擬機已經運行(啟動速度特別慢,不建議)

[root@kvm001 kvm-vm]# virsh list

Id 名稱 狀態

----------------------------------------------------

1 oa running

可以使用相同的方法生成多個虛擬機,它們的父虛擬磁碟都是一樣的。

虛擬磁碟格式轉換

語法格式:

convert [-c] [-p] [-q] [-n] [-f fmt] [-t cache] [-T src_cache] [-O output_fmt]

[-o options] [-s snapshot_name] [-S sparse_size] filename [filename2 [...]]

output_filename

例如:

qemu-img convert my-vmware.vmdk my-kvm.img

qemu-img convert -O qcow2 rhel6u3.img rhel6u3-a.qcow2

調整虛擬磁碟大小

語法格式:

resize [-q] filename [+ | -]size

? 操作之前一定要做好數據備份

? 增加文件大小後,需要在客戶機中使用fdisk、parted等分區工具進行相應的操作才能真

正讓客戶機使用到增加後的鏡像空間

? 縮小鏡像之前,要在客戶機中保證裡面的文件系統有空餘空間,否則會數據丟失。

?qcow2不支持縮小鏡像的操作。

[root@kvm001 ~]# qemu-img resize test2.qcow2 +2G

Image resized.

2.磁碟快照管理

快照/檢查點 Snapshot/Checkpoint

? 磁碟快照

ü 對磁碟數據進行快照

ü 主要用於虛擬機備份等場合

? 內存快照

ü 對虛擬機的內存/設備信息進行保存

ü 該機制同時用於休眠恢復、遷移等場景

ü 主要使用virsh save(qemu migrate to file)實現,只能對運行的虛擬機進行

? 檢查點快照

ü 同時保存虛擬機的磁碟快照和內存快照

ü 用於將虛擬機恢復到某個時間點

ü 可以保證數據的一致性

磁碟快照分類--不推薦使用

? 按快照信息保存分為:

ü 內置快照:快照數據和base磁碟數據放在一個qcow2文件中

ü 外置快照:快照數據單獨的qcow2文件存放

? 按虛擬機狀態可以分為:

ü 關機態快照:數據可以保證一致性

ü 運行態快照:數據無法保證一致性,類似於系統crash後的磁碟數據,使用時可能需要

fsck等操作。

? 按磁碟數量可以分為:

ü 單盤:單盤快照不涉及原子性

ü 多盤:涉及原子性。主要分為兩個方面:1、是所有盤快照點相同2、所有盤要麼都快照

成功,要麼都快照失敗。主要依賴於qemu的transaction實現。

qemu-img的快照語法格式:

snapshot [-q] [-l | -a snapshot | -c snapshot | -d snapshot] filename

"snapshot" is the name of the snapshot to create, apply or delete

"-a" 切換到某一指定快照點

"-c" 創建一個快照

"-d" 刪除一個快照

"-l" 列出指定域的所有快照

創建名為s1的磁碟快照:

[root@kvm001 kvm-vm]# qemu-img snapshot -c s1 centos7-vm001.qcow2

查看

[root@kvm001 kvm-vm]# qemu-img snapshot -l centos7-vm001.qcow2

Snapshot list:

ID TAG VM SIZE DATE VM CLOCK

1 s1 0 2017-10-04 23:02:43 00:00:00.000

恢復快照:

[root@kvm001 kvm-vm]# qemu-img snapshot -a s1 centos7-vm001.qcow2

刪除S1快照

[root@kvm001 kvm-vm]# qemu-img snapshot -d 1 centos7-vm001.qcow2


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 L先生的IT小世界 的精彩文章:

TAG:L先生的IT小世界 |