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


TAG:L先生的IT小世界 |