日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

KVM 介绍(7):使用 libvirt 做 QEMU/KVM 快照和 Nova 实例的快照 (Nova Instances Snapshot Libvirt)...

發布時間:2025/5/22 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 KVM 介绍(7):使用 libvirt 做 QEMU/KVM 快照和 Nova 实例的快照 (Nova Instances Snapshot Libvirt)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習 KVM 的系列文章:

    • (1)介紹和安裝
    • (2)CPU 和 內存虛擬化
    • (3)I/O QEMU 全虛擬化和準虛擬化(Para-virtulizaiton)
    • (4)I/O PCI/PCIe設備直接分配和 SR-IOV
    • (5)libvirt 介紹
    • (6)Nova 通過 libvirt 管理 QEMU/KVM 虛機
    • (7)快照 (snapshot)
    • (8)遷移 (migration)

本文將梳理 QEMU/KVM 快照相關的知識,以及在 OpenStack Nova 中使用 libvirt 來對 QEMU/KVM 虛機做快照的過程。

1. QEMU/KVM 快照

1.1 概念

QEMU/KVM 快照的定義:快照就是將虛機在某一個時間點上的磁盤、內存和設備狀態保存一下,以備將來之用。它包括以下幾類:

  • 磁盤快照:磁盤的內容(可能是虛機的全部磁盤或者部分磁盤)在某個時間點上被保存,然后可以被恢復。
    • 磁盤數據的保存狀態:
      • 在一個運行著的系統上,一個磁盤快照很可能只是崩潰一致的(crash-consistent) 而不是完整一致(clean)的,也是說它所保存的磁盤狀態可能相當于機器突然掉電時硬盤數據的狀態,機器重啟后需要通過 fsck 或者別的工具來恢復到完整一致的狀態(類似于 Windows 機器在斷電后會執行文件檢查)。(注:命令 qemu-img check -f qcow2 --output=qcow2 -r all filename-img.qcow2 可以對 qcow2 和 vid 格式的鏡像做一致性檢查。)
      • 對一個非運行中的虛機來說,如果上次虛機關閉的時候磁盤是完整一致的,那么其被快照的磁盤快照也將是完整一致的。
    • 磁盤快照有兩種:
      • 內部快照 - 使用單個的 qcow2 的文件來保存快照和快照之后的改動。這種快照是 libvirt 的默認行為,現在的支持很完善(創建、回滾和刪除),但是只能針對 qcow2 格式的磁盤鏡像文件,而且其過程較慢等。
      • 外部快照 - 快照是一個只讀文件,快照之后的修改是另一個 qcow2 文件中。外置快照可以針對各種格式的磁盤鏡像文件。外置快照的結果是形成一個 qcow2 文件鏈:original <- snap1 <- snap2 <- snap3。這里有文章詳細討論外置快照。
  • 內存狀態(或者虛機狀態):只是保持內存和虛機使用的其它資源的狀態。如果虛機狀態快照在做和恢復之間磁盤沒有被修改,那么虛機將保持一個持續的狀態;如果被修改了,那么很可能導致數據corruption。
  • 系統還原點(system checkpoint):虛機的所有磁盤的快照和內存狀態快照的集合,可用于恢復完整的系統狀態(類似于系統休眠)。

關于?崩潰一致(crash-consistent)的附加說明:

  • 應該盡量避免在虛機I/O繁忙的時候做快照。這種時候做快照不是可取的辦法。
  • vmware 的做法是裝一個 tools,它是個 PV driver,可以在做快照的時候掛起系統
  • 似乎 KVM 也有類似的實現 QEMU Guest Agent,但是還不是很成熟,可參考?http://wiki.libvirt.org/page/Qemu_guest_agent

快照還可以分為 live snapshot(熱快照)和 Clod snapshot:

  • Live snapshot:系統運行狀態下做的快照
  • Cold snapshot:系統停止狀態下的快照

libvit 做 snapshot 的各個 API:

snapshot做快照的 libvirt API從快照恢復的 libvirt APIvirsh 命令
磁盤快照virDomainSnapshotCreateXML(flags =?VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY?)virDomainRevertToSnapshot?virsh snapshot-create/snapshot-revert
內存(狀態)快照

virDomainSave

virDomainSaveFlags

virDomainManagedSave

virDomainRestore

virDomainRestoreFlags

virDomainCreate

virDomainCreateWithFlags

virsh save/restore
系統檢查點virDomainSnapshotCreateXMLvirDomainRevertToSnapshot?virsh snapshot-create/snapshot-revert

分別來看看這些 API 是如何工作的:

1.?virDomainSnapshotCreateXML (virDomainPtr domain, const char * xmlDesc, unsigned int flags)

作用:根據 xmlDesc 指定的 snapshot xml 和 flags 來創建虛機的快照。

flags 包含?虛機處于運行狀態時快照的做法虛機處于關閉狀態時快照的做法
0創建系統檢查點,包括磁盤狀態和內存狀態比如內存內容保持關機時的磁盤狀態
VIR_DOMAIN_SNAPSHOT_CREATE_LIVE做快照期間,虛機將不會被 paused。這會增加內存 dump file 的大小,但是可以減少系統停機時間。部分 Hypervisor 只在做外部的系統檢查點時才設置該 flag,這意味著普通快照還是需要暫停虛機。?
VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY只做指定磁盤的快照。對應運行著的虛機,磁盤快照可能是不完整的(類似于突然電源被拔了的情形)。只做指定磁盤的快照。

其內部實現根據虛機的運行狀態有兩種情形:

  • 對運行著的虛機,API 使用 QEMU Monitor 去做快照,磁盤鏡像文件必須是 qcow2 格式,虛機的 CPU 被停止,快照結束后會重新啟動。
  • 對停止著的虛機,API 調用 qemu-img 方法來操作所有磁盤鏡像文件。

這里有其實現代碼,可見其基本的實現步驟:?

static virDomainSnapshotPtr qemuDomainSnapshotCreateXML {
....call qemuDomainSnapshotCreateDiskActive{call qemuProcessStopCPUs # 停止 vCPUs
for each disk call qemuDomainSnapshotCreateSingleDiskActive{call qemuMonitorDiskSnapshot # 調用 QEMU Monitor 去為每個磁盤做snapshot}call qemuProcessStartCPUs # 啟動 vCPUs
}
....
}
?

2.?virDomainSave?相關的幾個 API

這幾個API 功能都比較類似:

virDomainSave?該方法會 suspend 一個運行著的虛機,然后保存期內存內容到一個文件中。成功調用以后,domain 將不會處于 running 狀態。使用?virDomainRestore 來恢復虛機。
virDomainSaveFlags?類似于?virDomainSave?API,可使用幾個 ?flags。一些 Hypervisor 在調用該方法前需要調用??virDomainBlockJobAbort() 方法來停止 block copy 操作。
virDomainManagedSave?也類似于?virDomainSave?API。主要區別是 libvirt 將其內存保存到一個受 libvirt 管理的文件中,因此libvirt 可以一直跟蹤 snapshot 的狀態;當調用 virDomainCreate/virDomainCreateWithFlags 方法重啟該?domain的時候,libvirt 會使用該受管文件,而不是一個空白的文件,這樣就可以 restore 該snapshot。

Features/SnapshotsMultipleDevices 這篇文章討論同時對多個磁盤做快照的問題。

1.2 使用 virsh 實驗

1.2.1 virsh save 命令

對運行中的 domain d-2 運行 “virsh save” 命令。命令執行完成后,d-2 變成 “shut off” 狀態。

看看 domain 的磁盤鏡像文件和 snapshot 文件:

內存數據被保存到 raw 格式的文件中。

要恢復的時候,可以運行 “vish restore d-2.snap1” 命令從保存的文件上恢復。

1.2.2 virsh snapshot-create/snapshort-create-as

先看看它的用法:

virsh # help snapshot-create-asNAMEsnapshot-create-as - Create a snapshot from a set of argsSYNOPSISsnapshot-create-as <domain> [<name>] [<description>] [--print-xml] [--no-metadata] [--halt] [--disk-only] [--reuse-external] [--quiesce] [--atomic] [--live] [--memspec <string>] [[--diskspec] <string>]...DESCRIPTIONCreate a snapshot (disk and RAM) from argumentsOPTIONS[--domain] <string> domain name, id or uuid[--name] <string> name of snapshot[--description] <string> description of snapshot--print-xml print XML document rather than create--no-metadata take snapshot but create no metadata #創建的快照不帶任何元數據--halt halt domain after snapshot is created #快照創建后虛機會關閉--disk-only capture disk state but not vm state #只對磁盤做快照,忽略其它參數--reuse-external reuse any existing external files--quiesce quiesce guest's file systems #libvirt 會通過 QEMU GA 嘗試去freeze和unfreeze客戶機已經mounted的文件系統;如果客戶機沒有安裝QEMU GA,則操作會失敗。--atomic require atomic operation #快照要么完全成功要么完全失敗,不允許部分成果。不是所有的VMM都支持。--live take a live snapshot #當客戶機處于運行狀態下做快照--memspec <string> memory attributes: [file=]name[,snapshot=type][--diskspec] <string> disk attributes: disk[,snapshot=type][,driver=type][,file=name]

其中一些參數,比如 --atomic,在一些老的 QEMU libary 上不支持,需要更新它到新的版本。根據 這篇文章,atomic 應該是 QEMU 1.0 中加入的。

(1)默認的話,該命令創建虛機的所有磁盤和內存做內部快照,創建快照時虛機處于 paused 狀態,快照完成后變為 running 狀態。持續時間較長。

<memory snapshot='internal'/><disks><disk name='vda' snapshot='internal'/><disk name='vdb' snapshot='internal'/><disk name='vdc' snapshot='internal'/></disks>?

每個磁盤的鏡像文件都包含了 snapshot 的信息:

root@compute1:/var/lib/nova/instances/eddc46a8-e026-4b2c-af51-dfaa436fcc7b# qemu-img info disk image: disk file format: qcow2 virtual size: 1.0G (1073741824 bytes) disk size: 43M cluster_size: 65536 backing file: /var/lib/nova/instances/_base/fbad3d96a1727069346073e51d5bbb1824e76e34 Snapshot list: ID TAG VM SIZE DATE VM CLOCK 1 1433950148 41M 2015-06-10 23:29:08 05:16:55.007 Format specific information:compat: 1.1lazy refcounts: false

你可以運行 snapshot-revert 命令回滾到指定的snapshot。

virsh # snapshot-revert instance-0000002e 1433950148

根據?這篇文章,libvirt 將內存狀態保存到某一個磁盤鏡像文件內 (”state is saved inside one of the disks (as in qemu's 'savevm'system checkpoint implementation). If needed in the future,we can also add an attribute pointing out _which_ disk saved the internal state; maybe disk='vda'.)

(2)可以使用 “--memspec” 和 “--diskspec” 參數來給內存和磁盤外部快照。這時候,在獲取內存狀態之前需要 Pause 虛機,就會產生服務的 downtime。

virsh # snapshot-create-as 0000002e livesnap2 --memspec /home/s1/livesnap2mem,snapshot=external --diskspec vda,snapshot=external Domain snapshot livesnap2 created virsh # snapshot-dumpxml 0000002e livesnap2 <memory snapshot='external' file='/home/s1/livesnap2mem'/><disks><disk name='vda' snapshot='external' type='file'><driver type='qcow2'/><source file='/home/s1/testvm/testvm1.livesnap2'/></disk></disks>

(3)可以使用 “--disk-only” 參數,這時會做所有磁盤的外部快照,但是不包含內存的快照。不指定快照文件名字的話,會放在原來的磁盤文件所在的目錄中。多次快照后,會形成一個外部快照鏈,新的快照使用前一個快照的鏡像文件作為 backing file。

virsh # snapshot-list instance-0000002e --tree 1433950148 #內部快照 1433950810 #內部快照 1433950946 #內部快照 snap1 #第一個外部快照|+- snap2 #第二個外部快照|+- 1433954941 #第三個外部快照|+- 1433954977 #第四個外部快照

而第一個外部快照的鏡像文件是以虛機的原始鏡像文件作為 backing file 的:

root@compute1:/var/lib/nova/instances/eddc46a8-e026-4b2c-af51-dfaa436fcc7b# qemu-img info disk.snap1 image: disk.snap1 file format: qcow2 virtual size: 30M (31457280 bytes) disk size: 196K cluster_size: 65536 backing file: /var/lib/nova/instances/eddc46a8-e026-4b2c-af51-dfaa436fcc7b/disk.swap #虛機的 swap disk 原始鏡像文件 backing file format: qcow2 Format specific information:compat: 1.1lazy refcounts: false

目前還不支持回滾到某一個extrenal disk snapshot。這篇文章?談到了一個workaround。

[root@rh65 osdomains]# virsh snapshot-revert d-2 1434467974
error: unsupported configuration: revert to external disk snapshot not supported yet

(4)還可以使用 “--live” 參數創建系統還原點,包括磁盤、內存和設備狀態等。使用這個參數時,虛機不會被 Paused(那怎么實現的?)。其后果是增加了內存 dump 文件的大小,但是減少了系統的 downtime。該參數只能用于做外部的系統還原點(external checkpoint)。

virsh # snapshot-create-as 0000002e livesnap3 --memspec /home/s1/livesnap3mem,snapshot=external --diskspec vda,snapshot=external --live Domain snapshot livesnap3 created virsh # snapshot-dumpxml 0000002e livesnap3 <memory snapshot='external' file='/home/s1/livesnap3mem'/><disks><disk name='vda' snapshot='external' type='file'><driver type='qcow2'/><source file='/home/s1/testvm/testvm1.livesnap3'/></disk></disks>

注意到加 “--live” 生成的快照和不加這個參數生成的快照不會被鏈在一起:

virsh # snapshot-list 0000002e --tree livesnap1 #沒加 --live|+- livesnap2 #沒加 --livelivesnap3 #加了 --live|+- livesnap4 #加了 --live

不過,奇怪的是,使用 QEMU 2.3 的情況下,即使加了 --live 參數,虛機還是會被短暫的 Paused 住:

?

[root@rh65 ~]# virsh snapshot-create-as d-2 --memspec /home/work/d-2/mem3,snapshot=external --diskspec hda,snapshot=external --live Domain snapshot 1434478667 created[root@rh65 ~]# virsh list --allId Name State ----------------------------------------------------40 osvm1 running42 osvm2 running43 d-2 running[root@rh65 ~]# virsh list --allId Name State ----------------------------------------------------40 osvm1 running42 osvm2 running43 d-2 paused # 不是說好我用 --live 你就不pause 虛機的么?這是腫了么。。[root@rh65 ~]# virsh list --allId Name State ----------------------------------------------------40 osvm1 running42 osvm2 running43 d-2 running

?

綜上所述,對于?snapshot-create-as 命令來說,

參數結果
<不使用額外的參數>所有磁盤和內存的內部的內部快照
--memspec snapshot=external --diskspec vda,snapshot=external ?磁盤和內存的外部快照,虛機需要被暫停
--live ?--memspec snapshot=external --diskspec vda,snapshot=external創建系統檢查點(包括磁盤和內存的快照),而且虛機不會被暫停(?測試結果顯示還是會暫停,只是暫停時間比不使用 --live 要短一些)
--disk-only創建所有或者部分磁盤的外部快照

?可以使用 sanpshot-revert 命令來回滾到指定的系統還原點,不過得使用 “-force” 參數:

?

[root@rh65 ~]# virsh snapshot-revert d-2 1434478313 error: revert requires force: Target device address type none does not match source pci[root@rh65 ~]# virsh snapshot-revert d-2 1434478313 --force[root@rh65 ~]#

1.3 外部快照的刪除

目前 libvirt 還不支持直接刪除一個外部快照,可以參考 這篇文章?介紹的 workaround。

2. OpenStack 中的快照

OpenStack Snapshot 可分為下面的幾種情形:

2.1 對 Nova Instance 進行快照

(1)對從鏡像文件啟動的虛機做快照

  • 只將運行當中的虛機的 Root disk (第一個vd 或者 hd disk) 做成 image,然后上傳到 glance 里面
  • Live Snapshot:對滿足特定條件(QEMU 1.3+ 和 Libvirt 1.0.0+,以及 source_format not in ('lvm', 'rbd') and not CONF.ephemeral_storage_encryption.enabled and not CONF.workarounds.disable_libvirt_livesnapshot,以及能正常調用 libvirt.blockJobAbort ,其前提條件可參考這文章)的虛機,會進行 Live snapshot。Live Snapshot 允許用戶在虛機處于運行狀態時不停機做快照。
  • Cold Snapshot:對不能做 live snapshot 的虛機做 Cold snapshot。這種快照必須首先 Pause 虛機。

(2)對從卷啟動的虛機做快照

  • 對虛機的每個掛載的 volume 調用 cinder API 做 snapshot。
  • Snapshot 出的 metadata 會保存到 glance 里面,但是不會有 snapshot 的 image 上傳到 Glance 里面。
  • 這個 snapshot 也會出現在 cinder 的數據庫里面,對 cinder API 可見。

2.2 對卷做快照

  • 調用 cinder driver api,對 backend 中的 volume 進行 snapshot。
  • 這個 snapshot 會出現在 cinder 的數據庫里面,對 cinder API 可見。??

3. 從鏡像文件啟動的 Nova 虛機做快照

? ? 嚴格地說,Nova 虛機的快照,并不是對虛機做完整的快照,而是對虛機的啟動盤(root disk,即 vda 或者 hda)做快照生成 qcow2 格式的文件,并將其傳到 Glance 中,其作用也往往是方便使用快照生成的鏡像來部署新的虛機。Nova 快照分為 Live Snapshot (不停機快照)和 Clold Snapshot (停機快照)。

3.1 Nova Live Snapshot

滿足 2.1.1 中所述條件時,運行命令 ?”nova image-create <instance name or uuid> <name of new image>“ 后,Nova 會執行 Live Snapshot。其過程如下:

  • 找到虛機的 root disk (vda 或者 hda)。
  • 在?CONF.libvirt.snapshots_directory 指定的文件夾(默認為 /var/lib/nova/instances/snapshots)中創建一個臨時文件夾,在其中創建一個 qcow2 格式的 delta 文件,其文件名為 uuid 字符串,該文件的 backing file 和 root disk 文件的 backing file 相同 (下面步驟 a)。
  • 調用 virDomainGetXMLDesc 來保存 domain 的 xml 配置。
  • 調用?virDomainBlockJobAbort 來停止對 root disk 的活動塊操作 (Cancel the active block job on the given disk)。
  • 調用?virDomainUndefine 來將 domain 變為 transimit 類型的,這是因為?BlockRebase API 不能針對 Persistent domain 調用。
  • 調用?virDomainBlockRebase 來將 root disk image 文件中不同的數據拷貝到 delta disk file 中。(下面步驟 b)
  • 步驟 6 是一個持續的過程,因為可能有應用正在向該磁盤寫數據。Nova?每隔 0.5 秒調用?virDomainBlockJobInfo API 來檢查拷貝是否結束。
  • 拷貝結束后,調用 ?virDomainBlockJobAbort 來終止數據拷貝。
  • 調用?virDomainDefineXML 將domain 由 transimisit 該回到 persistent。
  • 調用?qemu-img convert 命令將?delta image 文件和 backing file 變為一個 qcow2 文件 (下面步驟 c)
  • 將 image 的元數據和 qcow2 文件傳到 Glance 中。
  • (a)執行 qemu-img create -f qcow2 (qemu-img create 創建一個基于鏡像1的鏡像2,鏡像2的文件將基于鏡像1,鏡像2中的文件將基于鏡像1中的。在鏡像2中所作的任何讀寫操作都不會影響到鏡像1. 鏡像1可以被其他鏡像當做backing file. 但是要確保鏡像1不要被修改)。比如:qemu-img create -f qcow2 -o backing_file=/var/lib/nova/instances/_base/ed39541b2c77cd7b069558570fa1dff4fda4f678,size=21474836480 /var/lib/nova/instances/snapshots/tmpzfjdJS/7f8d11be9ff647f6b7a0a643fad1f030.delta
    (b)相當于執行 virsh blockjob <domain> <path> [--abort] [--async] [--pivot] [--info] [<bandwidth>] (c)執行 'qemu-img convert -f qcow2 -o dest_fmt' 來將帶 backing file 的 qcow2 image 轉化成不帶 backing file 的 flat image。其中 dest_fmt 由 snapshot_image_format 決定,有效值是 raw, qcow2, vmdk, vdi,默認值是 source image 的 format。比如: qemu-img convert -f qcow2 -O qcow2 /var/lib/nova/instances/snapshots/tmpzfjdJS/7f8d11be9ff647f6b7a0a643fad1f030.delta /var/lib/nova/instances/snapshots/tmpzfjdJS/7f8d11be9ff647f6b7a0a643fad1f030

    來看看其中的一個關鍵 API?int virDomainBlockRebase (virDomainPtr dom, const char * disk, const char * base, unsigned long bandwidth,unsigned int flags)

    該 API 從 backing 文件中拷貝數據,或者拷貝整個 backing 文件到 @base 文件。 Nova 中的調用方式為:domain.blockRebase(disk_path, disk_delta, 0,libvirt.VIR_DOMAIN_BLOCK_REBASE_COPY |libvirt.VIR_DOMAIN_BLOCK_REBASE_REUSE_EXT |libvirt.VIR_DOMAIN_BLOCK_REBASE_SHALLOW) 默認的話,該 API 會拷貝整個@disk 文件到 @base 文件,但是使用 ?VIR_DOMAIN_BLOCK_REBASE_SHALLOW 的話就只拷貝差異數據(top data)因為 @disk 和 @base 使用相同的 backing 文件。?VIR_DOMAIN_BLOCK_REBASE_REUSE_EXT 表示需要使用已經存在的 @base 文件因為 Nova 會預先創建好這個文件。

    簡單的示意圖:

    這里 有個過程的 PoC 代碼描述該過程。

    這里 有該過程的完整 libvirt 日志分析。

    這里 有文章講 Libvirt?Features/SnapshotsMultipleDevices。

    3.2 Nova Cold Snapshot

    當虛機不在運行中時或者不滿足 live snapshot 的條件的情況下,Nova 會執行 Cold snapshot。其主要過程如下:

    (1)當虛機處于 running 或者 paused 狀態時:

  • detach PCI devices
  • detach SR-IOV devices
  • 調用?virDomainManagedSave API 來將虛機 suspend 并且將內存狀態保存到磁盤文件中。
  • (2)調用?qemu-img convert 命令將 root disk 的鏡像文件轉化一個相同格式的鏡像文件。

    (3)調用 virDomainCreateWithFlags? API?將虛機變為初始狀態

    (4)將在步驟1 中卸載的 PCI 和 SR-IOV 設備重新掛載回來

    (5)將元數據和 qcow2 文件傳到 Glance 中

    4. 從 volume 啟動的 Nova 實例的快照

    (0)從卷啟動虛機,并且再掛載一個卷,然后運行 nova image-create 命令。

    | image | Attempt to boot from volume - no image supplied | | key_name | - | | metadata | {} | | name | vm10 | | os-extended-volumes:volumes_attached | [{"id": "26446902-5a56-4c79-b839-a8e13a66dc7a"}, {"id": "de127d46-ed92-471d-b18b-e89953c305fd"}]

    (1)從 DB 獲取該虛機的塊設備( Block Devices Mapping)列表。

    (2)對該列表中的每一個卷,依次調用 Cinder API 做快照。對 LVM Driver 的 volume 來說,執行的命令類似于 " lvcreate --size 100M --snapshot --name snap /dev/vg00/lvol1“。

    s1@controller:~$ cinder snapshot-list +--------------------------------------+--------------------------------------+-----------+------------------------+------+ | ID | Volume ID | Status | Name | Size | +--------------------------------------+--------------------------------------+-----------+------------------------+------+ | a7c591fb-3413-4548-abd8-86753da3158b | de127d46-ed92-471d-b18b-e89953c305fd | available | snapshot for vm10-snap | 1 | | d1277ea9-e972-4dd4-89c0-0b9d74956247 | 26446902-5a56-4c79-b839-a8e13a66dc7a | available | snapshot for vm10-snap | 1 | +--------------------------------------+--------------------------------------+-----------+------------------------+------+

    (3)將快照的 metadata 放到 Glance 中。(注:該 image 只是一些屬性的集合,比如 block device mapping, kernel 和 ramdisk IDs 等,它并沒有 image 數據, 因此其 size 為 0。)

    s1@controller:~$ glance image-show e86cc562-349c-48cb-a81c-896584accde3 +---------------------------------+----------------------------------------------------------------------------------+ | Property | Value | +---------------------------------+----------------------------------------------------------------------------------+ | Property 'bdm_v2' | True | | Property 'block_device_mapping' | [{"guest_format": null, "boot_index": 0, "no_device": null, "snapshot_id": | | # 分別是該虛機掛載的兩個volume 的 | "d1277ea9-e972-4dd4-89c0-0b9d74956247", "delete_on_termination": null, | | snapshot 的信息 | "disk_bus": "virtio", "image_id": null, "source_type": "snapshot", | | | "device_type": "disk", "volume_id": null, "destination_type": "volume", | | | "volume_size": null}, {"guest_format": null, "boot_index": null, "no_device": | | | null, "snapshot_id": "a7c591fb-3413-4548-abd8-86753da3158b", | | | "delete_on_termination": null, "disk_bus": null, "image_id": null, | | | "source_type": "snapshot", "device_type": null, "volume_id": null, | | | "destination_type": "volume", "volume_size": null}] | | Property 'checksum' | 64d7c1cd2b6f60c92c14662941cb7913 | | Property 'container_format' | bare | | Property 'disk_format' | qcow2 | | Property 'image_id' | bb9318db-5554-4857-a309-268c6653b9ff | | Property 'image_name' | image | | Property 'min_disk' | 0 | | Property 'min_ram' | 0 | | Property 'root_device_name' | /dev/vda | | Property 'size' | 13167616 | | created_at | 2015-06-10T05:52:24 | | deleted | False | | id | e86cc562-349c-48cb-a81c-896584accde3 | | is_public | False | | min_disk | 0 | | min_ram | 0 | | name | vm10-snap | | owner | 74c8ada23a3449f888d9e19b76d13aab | | protected | False | | size | 0 # 這里 size 是 0,表明該 image 只是元數據, | | status | active | | updated_at | 2015-06-10T05:52:24 | +---------------------------------+----------------------------------------------------------------------------------+?

    5. 當前 Nova snapshot 的局限

    • Nova snapshot 其實只是提供一種創造系統盤鏡像的方法。不支持回滾至快照點,只能采用該快照鏡像創建一個新的虛擬機。
    • 在虛機是從 image boot 的時候,只對系統盤進行快照,不支持內存快照,不支持系統還原點?(blueprint:https://blueprints.launchpad.net/nova/+spec/live-snapshot-vms)
    • Live Snapshot 需要用戶進行一致性操作:http://www.sebastien-han.fr/blog/2012/12/10/openstack-perform-consistent-snapshots/
    • 只支持虛擬機內置(全量)快照,不支持外置(增量)快照。這與當前快照的實現方式有關,因為是通過 image 進行保存的。
    • 從 image boot 的虛機的快照以 Image 方式保存到 Glance 中,而非以 Cinder 卷方式保存。
    • 過程較長(需要先通過存儲快照,然后抽取并上傳至 Glance),網絡開銷大。

    那為什么 Nova 不實現虛機的快照而只是系統盤的快照呢?據說,社區關于這個功能有過討論,討論的結果是不加入這個功能,原因主要有幾點:

    • 這應該是一種虛擬化技術的功能,不是云計算平臺的功能。
    • openstack 由于底層要支持多種虛擬化的技術,某些虛擬化技術實現這種功能比較困難。
    • 創建的 VM state snapshot 會面臨 cpu feature 不兼容的問題。
    • 目前 libvirt 對 QEMU/KVM 虛機的外部快照的支持還不完善,即使更新到最新的 libvirt 版本,造成兼容性比較差。
    這里?也有很多的討論。

    轉載于:https://www.cnblogs.com/sammyliu/p/4468757.html

    總結

    以上是生活随笔為你收集整理的KVM 介绍(7):使用 libvirt 做 QEMU/KVM 快照和 Nova 实例的快照 (Nova Instances Snapshot Libvirt)...的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 伊人久久99 | 欧美精品免费播放 | 国产女人水真多18毛片18精品 | 亚洲黄色免费观看 | 久草免费福利视频 | 99久久亚洲精品 | 人人爽人人澡 | 日本黄区免费视频观看 | 暴力调教一区二区三区 | 嫩草影院黄| 欧美自拍偷拍第一页 | 国产精品亚洲二区在线观看 | 国产精品mv | 在线欧美色 | 日美av| 蜜臀av午夜精品 | 99视频精品在线 | 日韩av无码中文字幕 | 韩国电影一区 | 人妻系列一区 | 美国黄色一级视频 | 欧美一级日韩 | 亚洲综合在线成人 | a级片网址 | 亚洲av无码一区二区乱子仑 | 超级碰在线观看 | 亚洲综合久久久 | 午夜色大片| av污在线观看 | 日韩精品欧美精品 | 十八禁毛片 | 99久久久无码国产精品性黑人 | 中文字幕第一页亚洲 | 捆绑黑丝美女 | 午夜8888| 国产av无码专区亚洲a∨毛片 | 激情戏网站 | 加勒比综合网 | 黄色大片免费观看视频 | 一区二区久久久 | 亚洲日日操 | 狠狠入| 中文字幕日本一区二区 | 99久久99久久精品国产片桃花 | 自拍偷拍综合 | 国产微拍精品一区 | 免费成年人视频在线观看 | 免费看国产曰批40分钟粉红裤头 | 天天爱天天色 | 制服 丝袜 综合 日韩 欧美 | 国产精品国产三级国产a | 欧美黑人添添高潮a片www | 成年人网站免费视频 | 91网站免费看 | 久久在线精品视频 | 成人久久久精品乱码一区二区三区 | 美女扒开腿让男生捅 | 国产精品第12页 | 国产成人精品无码播放 | 撸久久| 好吊视频一区二区 | 99国产精品99 | 一区二区三区日韩在线 | 9久9久9久女女女九九九一九 | 什么网站可以看毛片 | 91美女视频网站 | 射进来av影视网 | 大地资源二中文在线影视免费观看 | 天天干,夜夜操 | 青青草网站 | 亚洲国产精一区二区三区性色 | 欧美韩国日本在线 | 亚洲s码欧洲m码国产av | 无码人妻一区二区三区在线 | 奇米影视播放器 | 亚洲激情欧美 | 黑人一区 | 午夜综合网 | 亚洲精品乱码久久久久久按摩观 | 成人传媒| 日韩av一区二区三区四区 | 久久久精品免费看 | 免费欧美一级视频 | 无码人妻精品一区二区中文 | 日日涩| 成人啪啪18免费游戏链接 | 欧美精品一区二区三区久久 | 51av视频 | 蜜桃aaa | 天天躁日日躁bbbbb | 欧美精品久久久久久久自慰 | 黄色应用在线观看 | 免费黄色在线 | 奇米一区二区 | 阿v天堂网 | 成人性生交大片免费看vrv66 | 黑人无套内谢中国美女 | 国产情侣久久久久aⅴ免费 caoporn成人 | 先锋成人 |