close

〈本文同步刊載於Blogger〉
狸貓先生愛廢話講堂: VMware 動手做 - 採用樣板佈署方式正確複製 Windows 虛擬機

使用 VM 的好處之一,就是能迅速的複製現有虛擬機產生出新的虛擬機,也就是以現有的 VM 為藍本,複製產生出相同的 VM,包括它原有 VM 所有的一切。
在 VMware vSphere 的 Web Client 操作界面提供的 Clone to Virtual Machine 功能,可以在幾分鐘內產生另外一個一模一樣的 VM,這是在以往實體機的世界所無法想像的。

Web Client >>> 選取 VM >>> Clone >>> Clone to Virtual Machine...

一般來說複製虛擬機 (Clone VM)不會有什麼問題,每台 VM 有供 vCenter Server 辨識的 UID,將複製出來的虛擬機首次開機時,它會產生新的 UID,接下來便能正常使用。除了 UID 之外,虛擬硬體卡片 (較常使用的是網路卡)也會產生新的 MAC Address,所以也不會與原有 VM 發生網路卡號衝突的問題,看起來一切都很好。

但是!在 Windows 系統內有個叫 SID 的東西,它會牽涉到 Windows 的管理機制及架構運作,如果環境內有 Windows AD 網域 (Active Directory)就會更加重要。因為在每台電腦加入 Windows AD 網域時,會產生對應的電腦物件,而在 Windows AD 的網域控制器 (Domain Contrlller) 實際運作看的是 SID,而非單純只有電腦名稱。

在每台都是全新安裝 Windows 的環境中,不需要擔心這個問題,因為在安裝程式進行過程中,SID 是全新動態產生,不會發生兩台電腦的 SID 相同的事;但如果是用 Clone VM 產生出來的新虛擬機,因為虛擬硬碟 (Virtual Disk)也是完全複製,也就是說原來的羊長什麼樣子,複製羊就長得一模一樣,當然 SID 也是相同,這件事會導致以後管理上的麻煩。

要查詢目前 Windows 的 SID 有很多種方式,介紹較簡單不需額外加裝套件的兩種方法:
(1) PsGetSid:原本為 Sysinternals 公司的小工具,後來被微軟併購,在微軟官網可下載,下載後不需安裝直接執行即可。
(2) vbs script:<<附檔收錄>>有提供檔案直接下載,需修改第一行變數的 MyComputerName 改成自己的電腦名稱。
[註] SID 的差異點是在 S-1-5-21 之後的那串數字,最後結尾有沒有 -500 字串並不影響判斷。
strComputer = "MyComputerName"
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colAccounts = objWMIService.ExecQuery _
    ("Select * From Win32_UserAccount Where Domain = '" & strComputer & "'")
For Each objAccount in colAccounts
    If Left (objAccount.SID, 6) = "S-1-5-" and Right(objAccount.SID, 4) = "-500" Then
        Wscript.Echo objAccount.Name
        Wscript.Echo objAccount.SID
    End If
Next

方法 (1):PsGetSid 無圖形介面,在命令提示字元執行 psgetsid.exe (第一次執行需同意軟體條款)。
下圖為 PsGetsid 執行結果,SID 是那一串黃色數字。↓ ↓

方法 (2):執行 vbs script,在命令提示字元執行 cscript GetComputerSID.vbs。
下圖為 vbs script 執行結果,SID 是那一串黃色數字。↓ ↓

我們可以試想,如果是採用 Clone VM 產生新的虛擬機,產生出來的新 VM 的電腦名稱、IP 相關網路設定值、Administrator 密碼、Windows 金鑰、SID…等設定值都與原有 VM 相同,這些都需要管理者登入 Guest OS 後,手動修改每個項目,相當花費時間,而且有可能會修改遺漏。往後還有可能會衍生出因為 Clone VM 時虛擬網路卡異動,造成 Guest OS 的舊網路卡變成隱藏 (因為裝置消失),新網路卡無法設定與舊網路卡相同的 IP (因為已經被用掉)的複雜問題,處理起來就更加棘手。
[註] 雖然 vCenter Server 6.0 的新功能,提供選項在 Clone VM 時也可選擇作 Custumization ,但此處還是講適用於大部分 vCenter Server 版本的通則作法。

其實 vCenter Server 提供的從樣板佈署新虛擬機 (Deploy New VM from Template)功能,在設定得當的情況下,可避免發生 SID 相同的問題,並且可做到更完善的流程,可以替管理者節省很多工夫。在 Deploy VM 的過程中,需依照要佈署的 Guest OS 內 Windows Server 版本,準備好對應的 Sysprep 環境,才能為新的 VM 產生新的 SID,否則會讓 Deploy VM 過程發生錯誤而無法順利完成。

在 Windows Server 2003 R2 以前的版本,需要從微軟網站另外下載 Sysprep 工具,並放在 vCenter Server 內的版本對應目錄,才能讓 Generate SID 功能生效;但在 Windows Server 2008 之後,微軟已將 Sysprep 工具內建在 OS 內,不需要額外安裝或下載。
下圖為 VMware KB: Sysprep file locations and versions 資訊,各版本 Windows Server 的下載點或所在位置:

先從建立樣板 (Template)開始,在建立 VM 並安裝乾淨的 Windows Server OS 完成之後,一定要安裝 VMware Tools,並作 Windows Update 到最新的修正,完成後就可以關機,並將 VM 轉換成 Template。
Web Client >>> 選取 VM >>> Template >>> Convert to Template...

使用轉換後的樣板,開始做新 VM 的佈署。
Web Client >>> VM Templates in Folders >>> 選取 Template >>> New VM from This Template...

Web Client >>> Deploy From Template 精靈
(1) 新建的 VM 取名稱
(2) 選擇新的 VM 要放置的 Datacenter
(3) 選擇新的 VM 要放置的 Host
(4) 選擇新的 VM 要放置的 Datastore
(5) 切記一定要勾 Customize the operating system
(6) 如果之前沒有建立 Customization Specification,這裡可以直接新增一組;如果已建立,可以直接選擇要使用的設定值,跳過 New Customization Specification 步驟。

Web Client >>> New VM Guest Customization Spec 精靈
(1) 新建的 Spec 取名,加上描述方便以後辨識。
(2) Windows Server 的使用者姓名、使用單位,單純是系統資訊提供辨識。
(3) 選 Enter a name in the Clone/Deploy wizard,以後在使用這個 Spec 時可自訂電腦名稱。
(4) 輸入 Windows Server 金鑰。
(5) 依照自己擁有的 Windows 授權種類,選擇適當的選項。
(6) 輸入 Administrator 帳號的密碼兩次,確認沒有手誤打錯。

Web Client >>> New VM Guest Customization Spec 精靈
(1) 時間選擇 (GMT+08:00)Taipei。
(2) Run Once 可輸入在 Sysprep 過程中想要執行的指令,若不需要請留白。
(3) 預設值是所有的網路卡都設定為 DHCP,也可依需求選擇 Manual 指定各張網卡的 IP 設定值。
(4) 預設電腦群組為 Workgroup: WORKGROUP。
(5) 一定要勾選 Generate New Security ID (SID),才會在佈署新的 VM 時產生新的 SID。
若 Guest OS 為 Windows Server 2003 R2 或更舊的版本,記得參考上一段 Sysprep 套件及環境要先準備好。

Web Client >>> New VM Guest Customization Spec 精靈
最後會列出所有步驟設定值,檢查過沒有錯誤就可以按 Finish 新增完成。

Web Client >>> Deploy From Template 精靈
(1) 選擇剛才新建的 Customization Specification。
[註] 這邊有個小 bug,可能會無法立刻看到新建的 Spec,請退出 Deploy From Template 精靈,重新做一次到這個步驟就能看到。
(2) 還記得剛才新建 Spec 時我們選可自訂電腦名稱,這邊可自行輸入新建 VM 所要用的電腦名稱。
(3) 檢查設定值摘要,如果沒有問題按 Finish 就會開始 Deploy VM。

在 Deploy New VM From Template 的複製工作完成之後,就可以將新的 VM 開機,它會依據我們給予的 Customization Specification 設定值,開始作 Windows Server 的初始化,過程中大約會重開機 2-3 次,請耐心等候幾分鐘,不要急著登入以免影響背景作業,等它做完後就可以開始使用這個新 VM 了。

 

<<參考資料>>
Sysprep file locations and versions (1005593)

How to get a computer SID using a doss command

PsGetSid - Windows Sysinternals | Microsoft Docs

How To Sysprep – Sysprep is a Great And powerful tool And Easy Too If You Know How (Step-By-Step) – ITProGuru Blog by Systems Management Expert Dan Stolts

Deploy a Virtual Machine from a Template in the vSphere Web Client

<<附檔收錄>>
GetComputerSID.vbs:因為用 .vbs 檔名可能因安裝性無法下載,因此改為 .vb_,請下載後自行修改副檔名為 .vbs,並修改第一行變數的 MyComputerName 改成自己的電腦名稱。

PsGetsid_145.zip:PsGetSid 1.45,zip 檔內含 PsGetsid.exe (32-bit)及 PsGetsid64.exe (64-bit)。

arrow
arrow
    創作者介紹
    創作者 狸貓先生 的頭像
    狸貓先生

    狸貓先生愛廢話講堂

    狸貓先生 發表在 痞客邦 留言(0) 人氣()