對於很多新上手使用azure 虛擬機器的客戶,常常有做快照,做映象,複製os盤等的需求,有時會出現沒有事先閱讀到azure.cn上對應部分的文件,建立完虛擬機器下意識在portal上點了錯誤的按鈕出現「意料之外的停機」的情況,因此這裡針對常見的vm複製的需求和操作做乙個簡單的梳理,以截圖的方式幫助我們的azure使用者更好的理解vm複製這塊的操作,以根據實際需求選擇正確的處理方式。
快照(snapshot)
快照是vhd在某個時間點的完整唯讀副本,要對vm的os盤或者資料盤做快照,或者通過快照建立虛機,可以通過命令列來做,如下演示了將乙個名為vm0(建立區域在北2)的虛擬機器做快照,然後利用該快照重新建立一台虛擬機器vm2的過程(cli命令):
簡單解釋一下這個過程:首先是通過 az vm show獲取磁碟id並且存到了osdiskid這個變數中,然後將這個id作為源建立了乙個名為vm0snapshot的快照,再用這個快照建立了乙個名為vm2osdisk的託管磁碟,最後將這個託管磁碟作為os盤attach建立了一台名為vm2的虛擬機器。圖中報錯的兩個地方是我做的兩個嘗試:第一處是在建立vm0的快照時企圖將建立的region直接指定在東2,提示東2找不到源id;第二處是在建立vm2的時候企圖將os託管磁碟建立的vm直接指定在東2,提示失敗。所以這裡我們可以看到,建立快照的時候是不能直接跨region的。
那麼回到portal.azure.cn,如果想在網頁上建立快照,需要找到要建立快照的磁碟,點進去,下面以vm2的os為例,展示下頁面操作的位置(紅框處):
點完【建立快照】後,可以直接在頁面上輸入快照名稱,注意【位置】部分的選項已經置灰,預設是和源盤放在同乙個region的,那麼問題來了,如果我想要利用這個快照在不同region建立vm,怎麼操作呢,別著急,我們可以對建立好的快照執行匯出(export)操作,用匯出的vhd來建立,用cli或者頁面上都可以匯出,頁面上如下:
簡單解釋一下:首先是在要建立vm的那個region建立好乙個儲存賬號,在該儲存賬戶裡面建立好乙個container,然後執行 az storage blob copy命令,將上一步在頁面上執行export後生成的url鏈結作為源,複製到這個儲存賬號下面的blob上,命名為vm2snapsot.vhd,然後將這個vm2snapsot.vhd作為源建立託管磁碟再建立乙個vm,這樣就實現了跨region的建立。
捕獲映象(image capture)
通常我們建立好vm後,轉到vm下面會看到概述裡面有個【捕獲】的按鈕,英文介面顯示的是capture:
這裡特別提醒,這個capture,不是捕獲虛機的快照,它是捕獲虛機映像用的,通常我們會有以這台配置好的虛擬機器為模板,建立多個同樣環境的虛擬機器的需求,這裡的capture指的就是捕獲這台虛擬機器的映像,去掉機器的個人賬戶等資訊,通用化之後用於再部署,所以點了這個按鈕,一定會先停機,因為要先解除這台虛擬機器的資源分配然後建立映象。點完這個按鈕之後頁面上也會有明確的提示,『建立映像前,請先使用命令做通用化並且會使當前虛機不可用』,下面演示下cli如何捕獲映象再建立vm:
首先登陸到要捕獲的這台vm上執行sudo waagent -deprovision+user 命令將使用者等特定的資訊刪除,然後將這台vm解除分配,通用化之後做映像:
然後用az vm create以剛剛的image為源建立一台新的vm,這裡做了個小小的驗證,原來的那台vm0裡是啟動了nginx的,通用化之後重新建的這台vm裡我們重新開了下80埠去驗證服務是正常啟動沒問題的:
所以簡單總結就是,映象捕獲(capture)會停機,且如果捕獲之前沒有登入到虛機執行「取消預配」的操作,新建立的虛擬機會報錯。
磁碟複製或匯出
如果想對正在執行的vm磁碟做複製,可以用az disk create的方式來建立,源選對就可以:
接下來的步驟跟快照中匯出後再建立虛機一樣,同樣的方式也可以支援跨region建立。
最後簡單總結下這幾種方式:
如何建立虛擬機器或 vhd 的映像:
從快照建立虛擬機器:
如何複製或匯出託管磁碟:
**azure的虛機複製:
sqlserver複製環境幾種常見錯誤的修復方法
場景1 應用複製的刪除命令時在訂閱伺服器上找不到該行。這種情況一般是發布庫存到分發庫丟包導致了訂閱伺服器上的記錄缺少,正好刪除缺少的記錄時觸發的故障。解決方案 1 先檢視是哪個表哪條記錄缺少所致 usedistribution go sp browsereplcmds 0x0000003000000...
java陣列複製的幾種常見用法
intsrc intdest 從src中的第乙個元素起複製三個元素,即1,3,5覆蓋到dest第2個元素開始的三個元素 system.arraycopy src,0,dest,1,3 system.out.println arrays.tostring dest 結果為 2,1,3,5,10,12,...
刪除Azure上的container
在使用azure時,當啟動hdinsight時,會產生一些container來儲存相關的日誌,這樣就導致會產生過多的無需儲存的container,乙個個刪除太過於麻煩,故這裡使用python通過迴圈進行刪除。由於container過多,我們可以反向思考,將部分container新增進白名單保留,其餘...