2012年8月14日

Windows Azure - 將本機的VHD傳到雲端上當作Virtual Machine Service的Image樣板

這個範例整整做了三天,老實說,其實滿簡單的,但為何需要三天呢,因為要把40G的OS傳到Windows Azure,傳了超久阿QQ。

前面幾篇,有介紹過如果使用MS提供給我們的Virtual Machine Image來建立VM,另外一篇寫到,如何將Windows Azure正在運作中的VM做成Image,但這兩篇都是建構在Windows Azure上,簡單的說,如果想把本機的VHD要變成Windows Azure的Image,有辦法嗎!!?,答案當然是有辦法,不然就不會出現這篇了XDDD,所以這篇,我們就來介紹,如何將在本地端的VM ( 必須是VHD檔 ),傳到Windows Azure上去!!

( 要注意一下,目前Windows Azure只支援Hyper-V出來的VHD檔案 )

準備VHD檔案

首先,我們先來看看下圖,下面這個是Windows 7的OS,也是小弟拿來利用RemoteFX來玩Final Fantasy XIV的VM,而今天,我們就準備把這套OS搬到Windows Azure上面去吧!!如果沒有VHD檔案的人,可能就需要用Hyper-V自行先建立一台VM出來,而這部份,小弟就不講了,請見諒。( 的確,小弟有想過,放在Windows Azure上的VM,是否有辦法支援RemoteFX,所以特別選擇了目前在跑RemoteFX的VM,但很遺憾的,目前Windows Azure上面的確不能跑RemoteFX,所以本來預計在Windows Azure上面Run 暗黑破壞神3的計畫,就這樣失敗了QQ )

另外,要特別注意,如果用Hyper-V安裝的新OS,預設遠端桌面是沒開啟的,也別忘記把遠端桌面開啟,如果是安裝Win 8和Win 7,預設Administrator也是不允許遠端登入的,需要的人,別忘記自己要開啟。

image

接下來,我們要執行一些動作,來設定一下這台OS,我們必須到C:\Windows\System32\sysprep這個目錄下執行sysprep這個應用程式。

image

這個應用程式的功用,可以幫我們清除一些帳號的設定等資訊,因為我們是要放到Windows Azure當作Image ( 也就是說可以利用此Image建立非常多台同樣的VM ),所以必須要使用Sysperp工具來清理這台OS,這樣建立VM的時候,就可以自行Key上新的Password之類的資訊了,這裡要選擇進入系統全新體驗,並勾選一般化,然後關機選項記得選擇關機;這邊要注意,當按下確定的時候,就會將整台VM給關閉了喔!! (  話是這樣講沒錯,但實際小弟在跑Win 7的時候,還是必須要用當初建立Win 7的帳號來進行登入,而不是用預設的Administrator,這點大家可能要注意一下。 )

image

到這邊,VHD的設定,就算是設定完畢了。

建立Storage Service

接下來,我們要把剛剛設定好的40G大的VHD傳到Windows Azure之前,必須要先啟用新的Storage Service ( 如果你已經有了Storage Service,也可以直接使用舊的,小弟這邊是為了未來刪除方便,所以建立一個新的 ),我們進入Windows Azure的管理介面,並選擇New。

image

然後大家應該都很熟悉,選擇Sotrage。

image

接下來,輸入URL、還有此服務的位置,並且勾選異地備援 ( 其實不勾選應該也是可以 )。

image

然後Storage Service建立完成,就會如下圖。

image

到這邊,我們就把Storage Service給建立好啦!!

使用csupload上傳VHD

是的,目前用Azure Storage Explorer 4.0工具來上傳是不行的!!如果使用Azure Storage Explorerg上傳上去,是使用Block Blob,但如果要製作成VM,則需要Page Blob,所以我們還是遵照官方文件,使用csupload工具來上傳吧!! ( 但這工具也是有好處,可以續傳喔!! )

首先,我們要先有csupload這個工具!!,這個工具其實是包含在Windows Azure SDK裡面,所以如果沒有使用過Visual Studio開發過Windows Azure的人,大概都沒有裝過此SDK,所以要先從這裡下載,進入後,我們這邊選擇的是Windows ( 別的OS,小弟沒測試過喔!! )。

image

當Windows Azure SDK安裝完之後,我們還要準備另外一個工具"makecert",這是建立憑證用的工具,同樣的,通常裝Visual Studio後,就會有這個工具,如果沒裝過Visual Studio可以透過這個網址下載;我們要利用makecert來建立憑證,讓Windows Azure知道這台電腦是被允許上傳檔案的!!

當安裝完後,我們必須要使用管理員權限進入cmd,如果是Win 7,我們可以在左下的"開始",並在搜尋框裡面打上"cmd",然後再從上面找到的cmd程式,按下滑鼠右鍵,並選擇使用管理員權限執行,我想Win 7大家應該都沒啥問題;所以下面這邊截圖擷取Win 8的畫面,我們可以使用Win 8的搜尋。

image

然後打入cmd,就可以找到應用程式,然後再按滑鼠右鍵,就可以在下面點選"以系統管理員身分執行”。

image

接下來,我們可以進入以下目錄執行makecert程式,但因為makecert的目錄可能不同,所以我們也可以使用搜尋功能找到我們要的makecert。( 要先選擇C:,表示搜尋C底下的程式。 )

image

找到後,我們就利用cmd進入此目錄吧,然後建入以下的命令,其中<CertificateName>記得要換上自己想要的名稱;此外-sky這是預設參數,不是因為我叫sky而下的命令…

makecert -sky exchange -r -n "CN=<CertificateName>" -pe -a sha1 -len 2048 -ss My "<CertificateName>.cer"

下面的截圖,是小弟的設定,給大家參考,到這邊,就已經建立好憑證了,要記得,這台電腦建立的憑證,就屬於這台電腦的喔!!

image

接下來,我們要設定Windows Azure的管理憑證,也就是說,要把剛剛建立好的憑證給Windows Azure,這樣Windows Azure就知道這台電腦是被允許的;這邊我們要先回到舊的介面,不知道怎樣回到舊管理介面的人,可以參考這篇;我們先選擇"託管服務、儲存體帳戶和CDN",然後選擇"管理憑證",接下來,再選擇加入憑證,最後出現的視窗,就可以選擇瀏覽,而剛剛建立好的憑證,基本上會和makecert應用程式同一個目錄下。

image

小弟是把它複製到桌面來。

image

匯入後,我們這邊如下圖,我們要記住憑證權杖,等下準備要用到。

image

然後還要知道訂用帳號的ID;這兩個位置要記得,因為等下我們就要用到。

image

同樣的,我們要使用administrator權限來執行cmd,並到csupload的目錄下,下圖是這個目錄的位置,有可能不一樣,這部份找不到的話,可以再用搜尋的方式。

C:\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\2012-06\bin

image

接下來,我們要先設定連線字串,我們要在<Subscriptionid>的地方輸入上面找到的帳號ID,而<Thumbprint>要輸入的是憑證權杖。

csupload Set-Connection "SubscriptionID=<Subscriptionid>;CertificateThumbprint=<Thumbprint>;ServiceManagementEndpoint=https://management.core.windows.net"

以下是小弟設定時畫面,當然,框框裡面的東西是小弟故意拿掉的。

image

最後一個步驟,就是準備要使用csupload進行上傳了,我把<BlobStorageURL>/<YourImagesFolder>/<VHDName>替換掉,BlobStorageURL就是一開始建立Storage Service所輸入的url,例如小弟使用的是study4vhds,所以這邊要填入http://study4vhds.blob.core.windows.net,而YourImagesFolder則是輸入你想要的目錄名稱,可以隨便取名,VHDName,則是上傳上去後VHD的名稱,也可以隨便取;其次Label後面接的VHDName也別忘記打上去,就VHD的名稱,最後PathToVHDFile代表的是本地端的VHD位置,像小弟很偷懶的把vhd拷貝到C:下,所以這邊就是輸入C:\AzureTest.vhd。

csupload Add-PersistentVMImage -Destination "<BlobStorageURL>/<YourImagesFolder>/<VHDName>" -Label <VHDName> -LiteralPath <PathToVHDFile> -OS Windows

完成後,就會開始漫長的等待,這次上傳的過程有中斷過,也有支援續傳,所以不用擔心,這時候就可以跑去聊聊天,打打電動,上上FB,等待下班!

image

如果我們使用Azure Storage Explorer工具,就可以發現我們已經傳上去了,如果沒有這工具的人,可以去這裡下載,不過因為這篇Azure Storage Explorer並不是主角,小弟我就不多做介紹了,沒有工具的人,也可以直接去Windows Azure管理中心,看看有沒有出現。

image

到這邊,完成上傳後,就可以利用剛剛建立好的Image來創建Windows Azure Visual Machine了。

建立Windows Azure Visual Machine

接下來,我們就可以建立新的Windows Azure Visual Machine了!!

image

一樣選擇購物車。

image

從My Images就可以發現我們剛剛傳上去的Image!! ( 其實ALL 裡面就可以找到了=V= ),後續的安裝流程,就和這篇的內容一樣了,就不多解釋了。

image

最後,登入進去後的樣子,這邊在提醒一下,我們使用剛剛我們上傳的Win 7 Image來建立Virtual Machine的過程中,雖然有叫我們Key Administrator的密碼,但實際上,遠端登入的時候,還是必須使用以前的Win 7帳號密碼來登入,例如之前安裝Win7時,使用的名稱為Sky,就必須使用Sky進行登入,而且當使用遠端桌面的時候,也別忘了在帳號前面加上domain,例如,這台Win7的電腦名稱為SkyGame,我們也必須使用SkyGame\Sky當作帳號;最後登入後,如下,我們可以發現,Diablo 3也還在,但很心酸的是跑不起來,其次,原本啟動的Win 7,也要重新啟動一次,最後原本有設定RemoteFX的顯示卡,也變成預設的顯示卡了。

image

基本上,到這邊就算完成了,花了三天時間,呼…

後記

像目前Windows Azure Virtual Machine Service就沒提供Win 7,我們就可以利用此方法部署Win 7的Image上去,以方便未來測試與建立,當然很可惜的,目前Windows Azure Virtual Machine也尚未提供RemoteFX,相信未來應該是有機會支援(吧);最後,上傳的過程是有點繁瑣,相信這部份,一定會有更好的解決方案,但不管怎樣說,現在的Windows Azure越來越方便了,也讓小弟一頭鑽進去,真的是太好玩了=v=

參考資料

3 則留言:

  1. 您好:
    在初學 Azure 常拜讀您的文章,受益良多
    這幾天嘗試上傳從 Hyper-V 出來的 VHD 檔一直失敗,
    想請教 Sky 大是不是哪裡做錯了…

    1、因為我在使用 csupload Set-Connection 時,它顯示說沒有這個指令了

    附圖如下:
    http://goo.gl/PxLeYs

    後來我照著這篇官方文章做也還是失敗了:
    https://www.windowsazure.com/en-us/documentation/articles/virtual-machines-create-upload-vhd-windows-server/?fb=zh-tw

    我的做法如下:
    http://1drv.ms/1kWxFEF

    雖然照著官方手冊做是成功上傳 VHD 至儲存體了,
    只是在我要新增新的虛擬機時,我上傳的 VHD 檔不會出現在「我的映像」之中
    想說是不是哪裡做錯了…

    謝謝您 再次感謝:)

    回覆刪除
    回覆
    1. 謝謝 SKY 大:

      後來我在社群上提問後

      馬上就得到解答了!

      原來是我少做一個步驟:「Add the image to your list of custom image」
      https://www.windowsazure.com/en-us/documentation/articles/virtual-machines-create-upload-vhd-windows-server/?fb=zh-tw

      而且後來還發現其實現在也不用以輸入指令的方式來上傳 VHD 檔

      可以使用諸如 CloudBerry 軟體,輸入「儲存體帳戶名稱」與「主要存取金鑰」,並且上傳為 Page Blob(Copy as Page Blob)

      並照著官方文件的「Add the image to your list of custom image」步驟即可完成

      感謝 SKY 大與幫助過我的人

      --------------------------------------------------

      附上 CloudBerry 下載點:
      http://www.cloudberrylab.com/microsoft-azure-explorer-pro.aspx

      社群連結:
      http://social.msdn.microsoft.com/Forums/windowsazure/zh-TW/ca8e5dc9-fa9e-440c-b2d7-f3d140820167/-windows-azure-powershell-addazurevhd-vhd-?forum=winazurevm

      刪除
  2. starfine 您好!~

    小弟我沒幫上甚麼忙啦,反而是要謝謝您提供了很好的資訊,讓未來的讀者能看到這更好的解決方案。
    感謝您~^^~

    回覆刪除