<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
一般對快照的理解就是能夠將系統還原到某個瞬間,這就是快照的作用。
快照針對要儲存的資料分為記憶體快照和磁碟快照,記憶體快照就是儲存當前記憶體的資料,磁碟快照就是儲存硬碟的資料。
快照針對儲存方式又分為內部快照和外部快照。
內部快照:是指快照資訊和虛擬機器器存在同一個qcow2映象中,使用單個的 qcow2 的檔案來儲存快照和快照之後的改動。這種快照是 libvirt 的預設行為,現在的支援很完善(建立、回滾和刪除),但是隻能針對 qcow2 格式的磁碟映象檔案,而且其過程較慢等。
外部快照:是指做快照時原虛擬機器器的disk將變為readonly的模板映象,然後會新建一個qcow2檔案來記錄與原模板映象的差異資料,外部快照的結果是形成一個qcow2檔案鏈:original <- snap1 <- snap2 <- snap3
以下是利用libvirt的virsh工具來建立一些內建快照:
建立虛擬機器器快照:
virsh snapshot-create-as --name test001 --description 'abc' instance-00000001
列出虛擬機器器的快照:
virsh snapshot-list instance-00000001
檢視某個快照資訊:
virsh snapshot-dumpxml instance-00000001 test001
回滾到某個快照:
virsh snapshot-revert instance-00000001 test001
刪除某個快照:
virsh snapshot-delete instance-00000001 test001
其實這些其實現的本質是在映象內做一些標記,記憶體狀態資料則儲存到某一個磁碟映象檔案內,使用以下命令可以看到在該映象做的標記:
qemu-img info /var/lib/nova/instances/87985777-f83d-4fff-9723-025c2b889895/disk
可以使用 “--memspec” 和 “--diskspec” 引數來給記憶體和磁碟外部快照。這時候,在獲取記憶體狀態之前需要 Pause 虛機,就會產生服務的 downtime。
比如:virsh snapshot-create-as instance-00000001 livesnap2 --memspec /home/livesnap2mem,snapshot=external --diskspec vda,snapshot=external
virsh snapshot-dumpxml instance-00000001 livesnap2可以看到具體外接存放位置資訊
但是libvirt現在還不支援回滾和刪除外接快照,如下
virsh snapshot-revert instance-00000001 livesnap2
error: unsupported configuration: revert to external snapshot not supported yet
OpenStack中對虛擬機器器的快照其實是生成一個完整的映象,儲存在glance服務中,並且可以利用這個快照映象生成新的虛擬機器器,與原本的虛擬機器器並沒有什麼關係。而比較主流的快照實現應該是有快照鏈的,且包含記憶體快照和磁碟快照。
OpenStack中的備份其實跟快照沒啥區別,呼叫的都是同一個生成映象的介面,更多的備份是cinder對磁碟的備份,沒有對整個虛擬機器器進行備份的介面。
(1)首先是設定OpenStack的儲存環境是Ceph儲存,因為我們要藉助ceph的一些特性來實現快照
(2)從上面我們可以知道做快照,主要是對磁碟做快照和對記憶體資料進行儲存,如果是ceph環境,那麼OpenStack虛擬機器器的根磁碟和磁碟在ceph下就是一個塊裝置,比如根磁碟一般就是儲存在vms池中,其路徑是vms/<instance_id>_disk,而磁碟一般就是儲存在volumes池中,其路徑是volumes/volume-<volume_id>;對於塊裝置,ceph可以使用rbd命令來對塊裝置做快照,比如我們對虛擬機器器根磁碟做快照:
rbd snap create vms/<instance_id>_disk@<snapshot_name>
snapshot_name是快照名
回滾時則執行:
rbd snap rollback vms/<instance_id>_disk@<snapshot_name>
這其實可以理解為是塊裝置的內部快照方式
(3)對於記憶體資料,我們可以使用libvirt的save介面將記憶體狀態資料儲存到一個檔案中,為了儲存到塊裝置中,我們可以這樣做:
<1>新建一個塊裝置(這裡假設在snapshots池中建立1G大小的名為test的塊裝置):
rbd create --size 1024 snapshos/test
<2>將塊裝置map到物理主機中
rbd map snapshos/test /dev/rbd0
可以看到會輸出一個磁碟裝置符,使用lsblk命令則能看到該裝置
<3>格式化該裝置並掛載到某個目錄下
mkfs.xfs /dev/rbd0 mkdir test_dir mount /dev/rbd0 test_dir
然後我們就可以向save介面傳入test_dir目錄下的一個檔名,其會將記憶體狀態資料儲存到該檔案中,接著umount掉該塊裝置:
umount -f /dev/rbd0 rbd unmap /dev/rbd0
這樣記憶體資料也一樣儲存到塊裝置中了,要使用時再掛載該塊裝置存取即可,回滾記憶體對應的是向libvirt的restore介面傳入該記憶體資料檔案
注意點:
(1)libvirt的save介面呼叫儲存完記憶體狀態資料後,虛擬機器器會關閉,這時可以執行restore介面虛擬機器器回滾回去
(2)回滾虛擬機器器時,先將該虛擬機器器的vm_state狀態置為ACTIVE,否則回滾會不成功
這裡說兩個備份名詞,全量備份和增量備份。
全量備份:儲存的是整個虛擬機器器的完整的資料
增量備份:儲存的只是跟上一次相比有改動的資料
需要先做一次全量備份後,後續才能做增量備份
這裡以虛擬機器器的根磁碟 vms/<instance_id>_disk為例子做增量備份的操作演示:
(1)做一次全量備份
先對該塊裝置做一次快照:
rbd snap create vms/<instance_id>_disk@time1
然後匯出差異資料:
rbd export-diff vms/<instance_id>_disk@time1 time1_diff_file
(2)再做一次增量備份
先對該塊裝置做一次快照:
rbd snap create vms/<instance_id>_disk@time2
匯出time1到time2之間這段時間該磁碟的差異資料:
rbd export-diff vms/<instance_id>_disk@time2 --from-snap vms/<instance_id>_disk@time1 time2_diff_file
(1)如果該磁碟還存在,則直接用rbd snap rollback回滾就可以了,比如要回滾到time1這個時間點:
rbd snap rollback vms/<instance_id>_disk@time1
(2)該磁碟已經被刪掉了,要恢復該磁碟到time2的時間點:
<1>建立一個塊裝置(大小跟刪除的那塊一樣大小,這裡以1G為例子)
rbd create --size 1024 vms/restore_disk
<2>匯入差異資料,注意這裡的匯入順序,先恢復到time1,再恢復到time2
rbd import-diff time1_diff_file vms/restore_disk rbd import-diff time2_diff_file vms/restore_disk
這時這塊塊裝置就恢復回time2的狀態了
友情經驗點:
(1)上面的操作都是自己建立一個塊裝置然後進行回滾,那怎麼把這塊給到OpenStack的虛擬機器器使用呢?在OpenStack中新增一個磁碟是先呼叫api.cinder.volume_create介面建立一個卷,然後呼叫api.nova.instance_volume_attach將該卷連線到虛擬機器器中,其實我們只要將它建立的塊裝置替換成我們的就可以了,比如它生成的是volumes/volume-123,我們自己回滾好的是volumes/restore_disk,則先刪掉它的塊裝置,然後重新命名我們的塊裝置:
rbd rm volumes/volume-123 rbd rename volumes/restore_disk volumes/volume-123
(2)同理,如果我們要從備份檔案中恢復到一個新的虛擬機器器,那麼就先建立一個虛擬機器器,然後將它的根磁碟替換為我們恢復過資料的根磁碟,然後接著是替換硬碟,這樣我們便從備份檔案中恢復到一個新的虛擬機器器了
到此這篇關於OpenStack虛擬機器器快照和增量備份實現的文章就介紹到這了,更多相關OpenStack快照和增量備份內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45