1. 程式人生 > >KVM的driver_mirror功能相關實驗

KVM的driver_mirror功能相關實驗

mirror相關實驗1【mirror功能基本測試】: vm執行時,執行映象操作: virsh qemu-monitor-command --hmp vmxxxxxxx  'drive_mirror -f xxxblock_device  /data/xxxxxx-mirror.img' 檢視完成狀態: virsh qemu-monitor-command --hmp vmxxxxxxx  'info block-jobs'  在mirror映象過程中,vnc、ssh、console連線到vmxxxxxxx,執行一些touch檔案、建立目錄、刪除目錄、dd寫入資料的操作 當mirror-img的大小與原大小相同時,執行取消mirro操作: virsh qemu-monitor-command --hmp vmxxxxxxx  'block_job_cancel xxxblock_device' 以上過程完成後,使用/data/xxxxxx-mirror.img建立虛擬機器,進入新建立的虛擬機器,檢視mirror建立過程中的檔案目錄建立、刪除、寫入操作是否被同步。 實驗結論:
mirror過程中關於檔案、目錄的建立、刪除、寫入操作均被同步的儲存到新建立的mirror-img中。 mirror相關實驗2【mirror過程中踢出儲存服務】: host1: 開啟nfs服務,設定共享路徑為/data/mirror host2:  mount掛載host1的nfs共享儲存路徑到本地的 /data/mirror 再host2上vm執行時,執行映象操作,mirror-img儲存到/data/mirror路徑下: virsh qemu-monitor-command --hmp vmxxxxxxx  'drive_mirror -f xxxblock_device  /data/mirror/xxxxxx-mirror.img' 檢視完成狀態: virsh qemu-monitor-command --hmp vmxxxxxxx  'info block-jobs'  在mirror映象過程中,在host1中執行service nfs stop服務,將nfs共享儲存斷開 在host2上多次執行檢視mirror狀態的操作: virsh qemu-monitor-command --hmp vmxxxxxxx  'info block-jobs' mirror映象狀態保持停止 連線到vmxxxxxxx,執行一些touch檔案、建立目錄、刪除目錄、dd寫入資料的操作 在host1中執行service nfs start服務,將nfs共享儲存開啟 在host2上多次執行檢視mirror狀態的操作: virsh qemu-monitor-command --hmp vmxxxxxxx  'info block-jobs' mirror映象狀態從停止狀態(持續了一段時間)變成進行狀態 檢視完成狀態,直到mirror-img的大小與原大小相同時,執行取消mirro操作: virsh qemu-monitor-command --hmp vmxxxxxxx  'block_job_cancel xxxblock_device' 以上過程完成後,使用/data/xxxxxx-mirror.img建立虛擬機器,進入新建立的虛擬機器,檢視mirror建立過程中的檔案目錄建立、刪除、寫入操作是否被同步。 實驗結論:
mirror過程可以被中斷,mirror過程中關於檔案、目錄的建立、刪除、寫入操作均被同步的儲存到新建立的mirror-img中。 stop/commit相關實驗1【stop狀態下執行commit操作的物件】: vm執行時,執行如下操作掛起: virsh qemu-monitor-command --hmp vmxxxxxxx  'stop' 檢視vm的系統映象: ll /data/kvm/disk.img 檢視vm系統映象的back檔案路徑: qemu-img info /data/kvm/disk.img 檢視back檔案的資訊: ll /data/kvm/base/base.img 對塊裝置做commit操作: virsh qemu-monitor-command --hmp vmxxxxxxx  'commit xxxblock_device' 完成後,檢視vm的系統映象: ll /data/kvm/disk.img 檢視back檔案的資訊: ll /data/kvm/base/base.img 實驗結論:
stop狀態下可以對block_device做commit操作,commit操作將vm系統中的產生的資料重新整理到base檔案中。 mirror相關實驗3【block_job_complete操作(執行時切換vm系統映象)】: vm執行時,執行映象操作: virsh qemu-monitor-command --hmp vmxxxxxxx  'drive_mirror -f xxxblock_device  /data/xxxxxx-mirror.img' 檢視完成狀態: virsh qemu-monitor-command --hmp vmxxxxxxx  'info block-jobs'  執行如下動作掛起vm: virsh qemu-monitor-command --hmp vmxxxxxxx  'stop' 當mirror-img的大小與原大小相同時,執行complete操作: virsh qemu-monitor-command --hmp vmxxxxxxx  'block_job_complete xxxblock_device' 執行如下動作取消vm掛起: virsh qemu-monitor-command --hmp vmxxxxxxx  'c' 檢視block-jobs,已經沒有活動的job: virsh qemu-monitor-command --hmp vmxxxxxxx  'info block-jobs' 執行如下命令,檢視block的資訊,vm的系統映象仍指向原映象 virsh qemu-monitor-command --hmp vmxxxxxxx  'info block' 檢視虛擬機器映象檔案及mirro生成檔案: ll /data/ 連線vm,進入後執行一個dd寫入操作: dd if=/dev/vda  of=test.img bs=1MB count=512 檢視虛擬機器映象檔案及mirro生成檔案: ll /data/ 可以看到,vm的原系統映象大小沒有發生變化,但mirror映象大小增加了512MB既,block_job_complete操作實際上切換了vm的系統映象。 vm中執行shutdown操作 刪除剛建立的映象 rm -f /data/xxxxxx-mirror.img 再次執行vm,執行映象操作: virsh qemu-monitor-command --hmp vmxxxxxxx  'drive_mirror -f xxxblock_device  /data/xxxxxx-mirror.img' 當mirror-img的大小與原大小相同時,執行complete操作: virsh qemu-monitor-command --hmp vmxxxxxxx  'block_job_complete xxxblock_device' 檢視block-jobs,已經沒有活動的job: virsh qemu-monitor-command --hmp vmxxxxxxx  'info block-jobs' 執行如下命令,檢視block的資訊,vm的系統映象仍指向原映象 virsh qemu-monitor-command --hmp vmxxxxxxx  'info block' 檢視虛擬機器映象檔案及mirro生成檔案: ll /data/ 連線vm,進入後執行一個dd寫入操作: dd if=/dev/vda  of=test.img bs=1MB count=512 vm中執行shutdown操作: 檢視虛擬機器映象檔案及mirro生成檔案: ll /data/ 可以看到,vm的原系統映象大小沒有發生變化,但mirror映象大小增加了512MB既,block_job_complete操作實際上切換了vm的系統映象。 實驗結論: 無論是否對vm做掛起操作,block_job_complete操作均會切換vm的系統映象到新生成的mirror映象 mirror相關實驗4【執行兩次drive_mirror和block_job_complete操作】: 繼續上一次的實驗環境 再次執行映象操作: virsh qemu-monitor-command --hmp vmxxxxxxx  'drive_mirror -f xxxblock_device  /data/mirror-xxxxxx-mirror.img' 完成後,檢視虛擬機器映象檔案及mirro生成檔案: ll /data/ 可以看到新生成的映象檔案與上一次執行的生成的mirror映象檔案大小相同,既映象的是切換後的映象檔案。 再次執行complete操作: virsh qemu-monitor-command --hmp vmxxxxxxx  'block_job_complete xxxblock_device' 檢視虛擬機器映象檔案及mirro生成檔案: ll /data/ 連線vm,進入後執行一個dd寫入操作: dd if=/dev/vda  of=test__0000.img bs=1MB count=512 vm中執行reboot操作: 檢視虛擬機器映象檔案及mirro生成檔案: ll /data/ 可以看到,vm的原系統映象大小沒有發生變化,第一次mirror生成的映象大小也沒有發生變化,第二次mirro映象大小增加了512MB 實驗結論: 可以連續的執行block_job_complete操作,連續切換系統映象。 mirror相關實驗5【block_job_complete操作後,物理上移除原系統映象】 vm執行時,執行映象操作: virsh qemu-monitor-command --hmp vmxxxxxxx  'drive_mirror -f xxxblock_device  /data/xxxxxx-mirror.img' 檢視完成狀態: virsh qemu-monitor-command --hmp vmxxxxxxx  'info block-jobs'  當mirror-img的大小與原大小相同時,執行complete操作: virsh qemu-monitor-command --hmp vmxxxxxxx  'block_job_complete xxxblock_device' 執行mv操作將vm系統映象檔案mv到另外一個檔案系統 實驗結論: block_job_complete操作後可以物理上移除原系統映象 mirror相關實驗6【mirror使用-n引數】 centso6.2的基礎映象base.img qemu-img create -f qcow2 -o  backing_file=/data/kvm/base.img  /data/kvm/centos6.2-qcow2.img qemu-img create -f qcow2 -o  backing_file=/data/kvm/base.img  /data/kvm/mirror-centos6.2.img vm使用centos6.2-qcow2.img 為系統映象,啟動vm 進入vm,做寫入操作: dd if=/dev/vda of=test.img bs=1MB count=1024 在host上檢視寫入的情況, centos6.2-qcow2.img不斷增長: ll /data/kvm host上執行映象操作: virsh qemu-monitor-command --hmp vmxxxxxxx  'drive_mirror -n xxxblock_device  /data/kvm/mirror-centos6.2.img' 在host上檢視寫入的情況, mirror-centos6.2.img不斷增長: ll /data/kvm 檢視完成狀態: virsh qemu-monitor-command --hmp vmxxxxxxx  'info block-jobs'  在mirror映象過程中,vnc、ssh、console連線到vmxxxxxxx,執行一些touch檔案、建立目錄、刪除目錄的操作 當mirror-img的大小與原大小相同時,執行取消mirro操作: virsh qemu-monitor-command --hmp vmxxxxxxx  'block_job_cancel xxxblock_device' 以上過程完成後,使用mirror-centos6.2.img建立虛擬機器,進入新建立的虛擬機器,檢視mirror建立過程中的檔案目錄建立、刪除、寫入操作是否被同步。 實驗結論: mirror過程中關於檔案、目錄的建立、刪除、寫入操作均被同步的儲存到新建立的mirror-centos6.2.img。 使用-n引數方法並以base.img映象為基礎,可以保證使用mirror功能儲存儘可能少的資料,並以最快的速度建立mirror映象。 總結:     1》以上實驗,基本驗證了使用mirror功能做快照的可行性,同時,針對系統盤和資料盤可採用不同的引數來進行快照,保證可用性。     2》對於qemu-kvm的drive,當指定cache為none模式時,理論上使用者系統只要做了寫入磁碟操作,均會被同步的寫入到映象檔案中,但對於使用者系統中沒有落入磁碟的檔案系統/資料修改,該方法不能保證資料的一致性。     3》在不對使用者系統做掛起操作的情況下,目前沒有手段可以保證資料100%一致。