Windows Server P2V 實體轉虛擬 防踩雷筆記 (Windows Server 2012, Hyper V)
公司有一部多年前建置的Windows Server 2012 STD主機,是安裝在實體2U伺服器上。因為評估服務即將封存,硬體毀損的風險偏高,決定轉為虛擬化,比較方便營運。
先講結論:
第一,直接使用 StarWind的軟體 V2V Converter / P2V Converter ,可以節省寶貴的時間。轉換結果在權限足夠的前提下,直接掛載到另一部HyperV主機上。
第二,同一部主機上有多個磁區,選擇複製整部實體機器,
不要"個別分開"轉換虛擬磁碟,以免節外生枝。
前情提要:
ChatGpt跟網路上微軟提供的P2V轉換工具大多是Disk2vhd(連結)。他可以在Windows不關機的前提下執行安裝並轉換。多數早期的文章(10年前)都指向用這個工具。我考慮虛擬磁碟會太大,因此將救援磁區跟C槽存一個VHD,有資料庫的D槽存另一個VHD。
症狀(現象):
系統很快就將Windows Server 2012轉換成VHD。掛載到HyperV上並建立HyperV的第一代虛擬機器,加入虛擬硬碟後。結果發生黑色螢幕下游標一直閃的問題。不能開機。
Lab1 :Disk2vhd失敗處理與Trouble Shooting
問了Copilot(微軟家的Chatgpt),他給我的答案是利用Windows Server的 ISO開機,進入修復模式,然後利用diskpart等工具找到一個99MB左右的隱藏磁區,要手動格式化為Fat32格式,並利用他來重建開機磁區。結果,是經歷數小時、令人崩潰的反覆失敗。而且,在diskpart中使用list volume指令觀察,居然會看到好幾組重複的磁區;磁碟目錄找不到.....
嗯,這看起來很不對呀。
Disk2vhd畢竟是針對比較早期如XP、Win7、Server 2008等的舊系統,對於開機磁區的辨識不那麼聰明。Windows Server 2012已經使用UEFI/GPT 型硬碟磁碟分割。心想再試下去決不是辦法,若之後上面執行的服務(SQL Server)讀取硬碟有問題就慘了。改弦易轍選用 Starwind V2V Converter / P2V Converter。
Lab12 : V2V Converter / P2V Converter
V2V Converter / P2V Converter 使用起來非常方便,不過他不提供轉存至本機硬碟的選項,而是直接掛載到HyperV上;相關的CPU、記憶體設定等等都會一併轉到虛擬機器內。在轉換上比起Disk2vhd會花比較多的時間,而且需要較高的系統權限。不過轉換結果非常完美,是完整度極高的推薦方案(機器預設是關閉狀態,建議先拿掉V Switch將網卡設定改好,以免發生IP衝突)。
根據轉換的結果,他會設定為第2代虛擬機器。因此網路上流傳,Disk2vhd選擇後轉第1代虛擬機的解法根本完全不可信。V2V Converter / P2V Converter才是真正老機器的續命神器。
不過,在實作過程中我自踩了一個自己製造的坑: 在轉換時沒有選擇整部機器,而是自做主張只轉換C跟保留磁區;然後用之前Disk2VHD笨方法做好的D槽,掛載在同一台虛擬機上。這樣雖然能開機,但系統管理工具內的磁碟管理,又會看到奇怪的幽靈現象:虛擬磁碟1跟虛擬磁碟二各有一套分割區,然後 D槽被掛上奇怪的磁碟代號。
Vdisk1 300MB recovery | 99MB UFI | C:drive 128G | unused 1TB...
Vdisk2 300MB recovery | 99MB UFI | unused 128G | D:drive 128G
這樣的結果,讓我看到所有DBA生平會恐懼的字眼之一: XXX資料庫 復原暫止。簡單說,資料庫引擎掛載不到資料庫的mdf跟ldf,完蛋了。
雖然手動修改磁碟機代號並重開機,SQL Server的病就好了(誤)。但在事件檢視器卻見到大量的ntfs :50 {延遲寫入失敗} Windows 無法儲存檔案<>的所有數據。 數據已遺失。 此錯誤可能是計算機硬體或網路連線失敗所造成
看起來像是寫入快取問題,實際上就是磁碟分割區亂掉了。SQL Server雖然能正常運作,但分割區就是給他亂七八糟。
Lab13 : 亂搞磁碟區的悲劇
以工程師的個性而言,看到磁碟區很亂,真的很受不了。
Vdisk1 300MB recovery | 99MB UFI | C:drive 128G | unused 1TB...
Vdisk2 300MB recovery | 99MB UFI | unused 128G | D:drive 128G
於是心一橫想改成這樣
Vdisk1 300MB recovery | 99MB UFI | C:drive 128G | D:drive 128G
Vdisk2 300MB recovery | 99MB UFI | unused 128G | unused 1TB...
(1)把第1顆的未使用空間格式化,改個磁碟代號H,
(2)把第2顆的D資料搬到H,
(3)把第2顆的D移除代號,最後移除第2顆,
結果重開機後,SQL Server就讀不到所有資料庫了,XXX資料庫 復原暫止。
悲劇至此畫上句點。
Lab14 : 重新轉換,順利成功
最後,決定用V2V Converter / P2V Converter重新轉換一次,選擇整個機器一起轉換。除了時間比較長,後續開機第一次搜尋裝置比較久,機器終於無痛在新環境快樂奔跑。
那麼,到底為什麼會看到上面的幽靈現象呢?在Disk2vhd的頁面其實有提示:
如果您打算從 VHD 開機,請勿在建立 VHD 的相同系統上附加 VHD。 如果您這樣做,Windows 就會將新的磁碟簽章指派給 VHD,以避免與 VHD 來源磁碟簽章發生衝突。 Windows 會依磁碟簽章參考開機設定資料庫 (BCD) 中的磁碟,因此在 VM 中啟動 Windows 時,將無法找到開機磁碟。
雖然我並不是把我複製的D資料碟掛載到原來的實體主機上,但這D資料碟在Disk2vhd轉換的當下,其實是把分割表跟開機磁區給包進"去"的。因此我將這個D槽跟V2V Converter / P2V Converter轉出的C槽合體時,兩者衝突的磁區就發生了干擾。
結論:這種牽涉磁區的轉換工作,不要刻意混搭,以免自討苦吃。
留言
張貼留言