在虛擬化環境中,關於虛擬機的遠程備份是一個比較重要的環節,這個是有關於整個機房掛掉之后,仍然可以恢復的最后一招。
在kvm中這種情況可以通過直接備份虛擬機的鏡像文件(qcow2)到遠端存儲解決。
但有一種情況必須特別說明一下,就是通過派生鏡像生成的虛擬機,這樣產生的qcow2文件非常小,內容只是原始鏡像文件的變更部分。這種鏡像通過以上方式是無法正常備份的。
舉例說明:
當創建的虛擬機越來越多,並且你發現好多虛擬機都是同一個操作系統,它們的區別就是安裝的軟件不大一樣,那么你肯定會希望把他們公共的部分提取出來,只保存那些與公共部分不同的東西,這樣鏡像大小下去了,空間變多了,管理也方便了。派生鏡像就是用來干這事的!
首先看一個原始鏡像
hzgatt@hzgatt:~/images$ qemu-img info vm3_base.raw image: vm3_base.raw file format: raw virtual size: 2.0G (2147483648 bytes) disk size: 2.0G
現在我們新建一個鏡像,但是派生自它
hzgatt@hzgatt:~/images$ qemu-img create -f qcow2 vm3_5.qcow2 -o backing_file=vm3_base.raw 5G Formatting 'vm3_5.qcow2', fmt=qcow2 size=5368709120 backing_file='vm3_base.raw' encryption=off cluster_size=65536
hzgatt@hzgatt:~/images$ ll-rw-r--r-- 1 hzgatt hzgatt 193K 6月 29 15:00 vm3_5.qcow2 -rw-r--r-- 1 hzgatt hzgatt 2.0G 6月 29 14:51 vm3_base.raw
hzgatt@hzgatt:~/images$ qemu-img info vm3_5.qcow2 image: vm3_5.qcow2 file format: qcow2 virtual size: 5.0G (5368709120 bytes) disk size: 136K cluster_size: 65536 backing file: vm3_base.raw (actual path: vm3_base.raw)
這個鏡像才136K,夠省了吧。
現在我們在vm3_5.qcow2上打了很多安全補丁,然后發現我又想在vm3_5.qcow2上派生新的虛擬機,這下怎么辦呢?
hzgatt@hzgatt:~/images$ qemu-img convert -O raw vm3_5.qcow2 vm3_base2.raw
hzgatt@hzgatt:~/images$ qemu-img info vm3_base2.raw image: vm3_base2.raw file format: raw virtual size: 5.0G (5368709120 bytes) disk size: 592M
這個轉化將會將vm3_5和base合並,生成新的vm3_base2.raw,然后你就可以繼續無窮無盡的派生之旅了!
這樣我們可以通過備份qemu-img convert -O raw vm3_5.qcow2 vm3_base2.raw , 生成的vm3_base2.raw文件備份此虛擬機的完整狀態。如此解決了派生鏡像的遠程備份的問題。