將 ESXi 的 CentOS 虛擬機移轉到 Proxmox VE 無法用 virtio block 或 virtio scsi 解決方法

這兩天,幫朋友公司將原本 ESXi 虛擬化架構,轉換為 Proxmox VE,同樣都是免費,可免費的 EXSi 實在不好用,而且功能也差很多,ESXi 沒有買授權也不能做到即時移轉,這是比較煩的事情,於是就開始搞 Proxmox VE Cluster 架構。

移轉過程中,會遇到 vmdk 怎麼轉成 KVM 用的 disk 問題,轉成功了,還會遇到 driver 問題,過去要讓 KVM 效能好,會用 virtio block(舊架構) 或 virtio scsi 來當作硬碟的驅動,用 virtio scsi 的好處是,支援 TRIM 可讓 host 層回收空間。

移轉 Windows 反而沒有甚麼大問題,只需要新增一顆 1G virtio-scsi 的硬碟,原本開機碟設定 IDE 來驅動,只要能正常開機,就會被 OS 識別到不支援的裝置,然後就可以安裝 virtio driver ,讓下次使用新 driver 後效能大增。

反而移轉 CentOS 問題比較大,主要還是要手動打命令比較麻煩,所以特別紀錄之

我的移轉步驟如下

新虛擬機的配置

Proxmox VE 建立一個虛擬機,內含硬碟的大小要與 EXSi 虛擬的一樣,預設先用 IDE 驅動這樣才能保證能開機,先不開機

然後到虛擬機中的 Options 將 SCSI Controller 改為 Virtio SCSI

再去新增一個 1G 大小的硬碟,驅動是 SCSI ,此時如圖,會顯示 Controller 是 Virtio SCSI

將 vmdk 轉換成 KVM 的 disk

我的機器存 KVM 磁碟是採用 LVM-Thin 方式,所以必須要用 dd 指令來轉換,假設 VM ID 是 100 , 那麼實際硬碟應該會找到 /dev/pve/vm-100-disk-1 ,那就可以用 dd 來轉換,注意 vmdk 如果有分割,必須去用 vmware 提供的工具合併成單檔,但如果 vmdk 已經是單檔,就是直接轉了

 dd if=Test.vmdk of=/dev/pve/vm-100-disk-1

成功寫完後,可以將新的 VM 開機看看

重新建立開機時會載入的驅動程式

用 root 權限執行(適用 CentOS 6/7)

dracut -f

這裡說明一下,原本若是在 EXSi 灌好的 CentOS , 是沒有 virtio scsi 或 virtio block driver , 所以無法驅動,而前面有個步驟是新增一個 1G 的硬碟,是為了讓新 VM 正常開機後,能夠讓 CentOS 也載入相對應的 driver,如此執行 dracut 的時候,就會把所有當前有用到的驅動都寫入了

將所有硬碟換成 virtio scsi

接著回到 Hard Ware 選項

將原本的 1G 硬碟移除,移除完後,會出現 unused disk ,也一併移除

然後移除原本的 CentOS 硬碟,又出現一次 unused disk ,這次不能移除 unuserd disk ,否則就真的刪掉資料了,這時候滑鼠要點到該 unused disk 選按鈕 EDIT,將硬碟的驅動改為 SCSI

回到 Options,把開機的順序改為 scsi0

試試看重開機能不能啟動,若能啟動可以再優化一下

回到 hard disk 那邊把 discard 的選項打勾,這個可以幫助回收沒用到的空間

然後進入 centos 虛擬機中,可以啟動 systemctl enable fstrim.timer,這樣會定時的讓 Host 回收硬碟使用空間

也手動可以執行 fstrim -a (CentOS 7 才有 -a 參數),然後觀察 host 上面磁碟空間用量是否減少,可於 host 執行 lvs 命令先後觀察數字的變動就知道了。

發佈留言