Code Section

Showing posts with label virtual machine. Show all posts
Showing posts with label virtual machine. Show all posts

Wednesday, August 8, 2018

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 字串並不影響判斷。

方法 (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 了。



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

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


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

Tuesday, July 31, 2018

VMware 小技巧 - 縮小 Workstation 的虛擬機 Virtual Disk 來釋放磁碟空間

VMware Workstation 可以安裝在 Windows 或 Linux 上,可用來建立各種作業系統的 Guest OS ,做 Lab 使用非常方便,從以前到現在的版本 14.1,一路走來應該超過 15 年有囉,算是相當老牌且執行穩定的虛擬軟體。

在使用 VMware Workstation 在 New Virtual Machine 新建虛擬機時,如果是選擇 Custom (advanced),在過程中精靈會詢問 Virtual Disk 的建立格式:

Virtual Disk 選項說明:
(勾選) ✔ Allocate all disk space now.:建立為 Thick Virtual Disk,建立速度較慢,需等待數十秒至數分鐘的建立時間。
(不勾) □ Allocate all disk space now.:建立為 Thin Virtual Disk,建立速度較快,不需等待。

Thick Virtual Disk:會一開始就取得 disk size 的磁碟空間,設定的數字是多少,就佔多大的磁碟空間。
Thin Virtual Disk:一開始先不取得磁碟空間,待 Guest OS 真的要放入資料時再向 Host 要求磁碟空間。
因為 Workstation 上的環境多半為測試性質,不需要太好的寫入效能,通常建議採用 Thin Virtual Disk 會比較恰當,可節省磁碟空間,也可以用來建立較多個 VM 及 Virtual Disk。

Store virtual disk as single file:存為單一個 VMDK。
Split virtual disk into multiple files:存成多個 VMDK,每個檔案最大為 2GB,寫滿 2GB 之後再產生一個新檔案繼續寫入。這個選項當初應該是為了 FAT32 檔案格式,單檔無法超過 2GB 而生,不過在 Win7 之後普遍是採用 NTFS 或 exFAT 格式,FAT32 已經較少使用,而且對於空間較大的磁碟,Win7 在格式化選項也會把 FAT32 藏起來,所以現在比較少會遇到這個問題。

今天來討論的是如何善用磁碟空間,讓你可以在有限空間內,建立更多個 Virtual Machine。主要是針對 Thin Virtual Disk 才會有壓縮 (Compact) 或清理 (Clean Up) 功能,Thick Virtual Disk 並不提供,因此 Thick 種類不在此次討論內。

Virtual Disk 狀態說明:
Current size:目前佔用的實際容量。
System free:存放此VM及虛擬硬碟的磁碟可用空間。
Maximum size:可存放的最大容量,也就是在建立虛擬硬碟時指定的容量。

Thin Virtual Disk 的特性,是在 Guest OS 寫入資料時,才會真實佔用 Host 的磁碟空間,但在 Guest OS 刪除資料時,並不會自動歸還 Host 的磁碟空間。所以我們的目的,就是縮小 Virtual Disk 的 Current size,讓它與 Guest OS 內存放的真實資料容量接近,以節省 Host 不必要的磁碟空間消耗。

要釋放 Thin Virtual Disk 佔用的磁碟空間有兩種方法,注意虛擬機必須是 Power Off 狀態:
(1) Defragment (重組虛擬硬碟) >>> Compact (壓縮虛擬硬碟)。
(2) VM >>> Manage >>> Clean Up Disks...,會提供使用空間 (used by this VM)及可回收空間 (Reclaimable space)資訊,確定要做按下 Clean Up now 就會開始進行。
[註1] 方法(2) 只適用 Windows Guest OS,且需安裝 VMware Tools。
[註2] 在更久之前的版本 (before VMW 8.x),VM 要在 Power On 狀態,先在 Guest OS 內做磁碟重整後,再利用 VMware Tools 來進行 Shrink disk,但這個舊方法已被淘汰,而且通常只有 Windows 才有提供磁碟重組工具。

方法(1) Defragment → Compact:

方法(2) Windows Guest OS 做 Clean Up Disks:

方法(2) Linux Guest OS 沒有 Clean Up Disks 功能:

Clean Up Disks 是在 VMware Workstation 9 之後的新功能,包括 VMware Fusion 及 VMware Player 也有提供,幾個原因推薦大家使用:
(1) 提供預估可回收空間 (Reclaimable space)這點我覺得很貼心,可以讓你判斷效果後再決定是否要做。
(2) Clean Up Disks 的壓榨效果會比 Compact & Shrink 更好,而且連同 Snapshots 也會一併壓榨。
(3) Clean Up Disks 可直接對現有 VMDK 進行處理,不需要額外磁碟空間做 Virtual Disk 的搬移運作。
(4) 稍嫌可惜的是僅適用於 Windows Guest OS。
(詳細可看<<參考資料>>的 VMware Documentatoin 說明)


<<參考資料>>
Clean Up a Virtual Hard Disk on Windows Hosts - VMware Workstation Documentation Center

How to Shrink a VMware Virtual Machine and Free Up Disk Space

幫 VMware 9 磁碟檔減肥 & 阿伯ㄚ的部落格 - lan14 # 天空部落 TIAN #

Defragmenting and shrinking VMware Workstation virtual machine disks (2019649)

Reduce the Size of Virtual Machine Disk in VMware Workstation


〈本文同步刊載於痞客邦部落格〉
VMware 小技巧 - 縮小 Workstation 的虛擬機 Virtual Disk 來釋放磁碟空間 @ 狸貓先生愛廢話講堂 :: 痞客邦 ::

Tuesday, July 24, 2018

VMware 豆知識 - 虛擬環境的 Virtual Machine 組成元件有哪些

在實體的世界中,眼睛看得到的都是就是各個硬體元件,例如一台電腦,拆開之後看得到就是主機板 (包含內建的顯示卡、磁碟控制器、網路卡、音效卡…等)、處理器、記憶體、硬碟等組成元件。

而轉換到了虛擬世界,由於每台實體機器都變成了虛擬機 (Virtual Machine, VM),不論是 Host OS 型態或是 Hypervisor 型態的虛擬化,在虛擬化平台上,每個虛擬機都只是由底層執行的一個程序 (Process),所以每台虛擬機就變成了一個資料夾,裡面有著這個虛擬機的許多組成檔案,對應到實體環境所看到的各個硬體組成元件。

Host OS 型態的 Virtualization,在原來的作業系統上,執行虛擬化軟體,模擬出數個 VM。(如下圖)

Hypervisor 型態的 Virtualization,這層 Hypervisor 就是底層的作業系統,它本身具備虛擬化功能,可直接模擬出數個 VM。(如下圖)

簡單來說,實體與虛擬的常用零組件對照方式為:
(實體)處理器 CPU --> (虛擬)描述設定檔
(實體)記憶體 Memory --> (虛擬)描述設定檔
(實體)顯示卡 VGA --> (虛擬)描述設定檔
(實體)磁碟控制器 --> (虛擬)描述設定檔
(實體)網路卡 NIC --> (虛擬)描述設定檔
(實體)音效卡 Audio --> (虛擬)描述設定檔
(實體)光碟機 DVD-ROM --> (虛擬)描述設定檔
(實體)硬碟 Hard Disk --> (虛擬)虛擬硬碟檔案 Virtual Disk File
也就是虛擬機的組成元件,主體就是一個描述設定檔,以及一個或數個的虛擬硬碟檔。

談到 Virtual Machine 的各項組成元件,在 VMware vSphere/ESXi 環境下,各種的組成檔案包括 (依副檔名說明):
vmx:configuration files,虛擬硬體元件組成設定檔。
vmdk:virtual disk,虛擬硬碟。
nvram:virtual BIOS state,BIOS狀態檔。
vswp:virtual swap file,虛擬記憶體交換檔。
vmsd:snapshot infomation database,快照資訊資料庫。
vmsn:snapshot state file,快照狀態檔。
-xxxxx.vmdk、-xxxxx-delta.vmdk:delta disk,作完快照後新產生的差異硬碟。
.lck:lock file,目前被系統鎖定禁止從外部更動的檔案 (通常是在執行中會鎖定),會產生檔名對應的.lck。

一般在操作或管理時不需要瞭解這麼多,但有些元件在操作時的變動,會跟儲存空間的消耗息息相關,這就需要管理者多多注意。
佔據較多儲存空間的檔案類型有以下幾種 (通常空間消耗是 GB 等級起跳):
(1)vswp:在 Power on VM 後就會產生的檔案,與該台 VM 的 virtual memory 的大小相同。
(2)vmsn:如果 Take Snapshot 時,勾選 Snapshot the virtual machine's memory,則產生的檔案會包含該 VM 的 configuration+active state+memory,也就是說會比 virtual memory 的大小還要大一些。
(3)-xxxxx.vmdk、-xxxxx-delta.vmdk:在快照後的資料變動,都會改寫到 delta disk,如果這個 VM 的資料異動量大,就會讓 delta disk 的尺寸激升。

上述的情況 (2) 提到,在Take Snapshot 時,勾選 Snapshot the virtual machine's memory。(如下圖)

另外關於 VMware Snapshot 快照還有很多可以談的,會再另開文章來寫,敬請期待。


<<參考資料>>
What Files Make Up a Virtual Machine?

What Files Make Up a Virtual Machine in ESXi 5.5? … in VMware Workstation 10? | TechRant


〈本文同步刊載於痞客邦部落格〉
VMware 豆知識 - 虛擬世界中的 Virtual Machine 是什麼? @ 狸貓先生愛廢話講堂 :: 痞客邦 ::