前言
最近工作關係開始玩 CentOS 了,本次實作環境中採用的是 CentOS 7.4 (1709) Kernel 3.10.0-693.el7.x86_64)映像檔,也就是新版 CentOS 7.4 最小化安裝版本 (Minimal Install),那麼開始來玩玩吧。💪實作環境
匯入 CentOS 範本虛擬主機的問題?
在上一篇文章中,我們已經完成 CentOS 範本的「匯出」(Export) 作業,所以當需要產生 CentOS VM 時,我們只要透過 Hyper-V Manager 進行「匯入」(Import)作業即可。但是,最近要使用這些匯入的 CentOS VM 建立 K8S (Kubernetes) 環境時,卻發生匯入的 CentOS VM 在 product_uuid的部分是相同的💀,但是根據 Installing kubeadm | Kubernetes文件中提到,不管是 Kubernetes Master Node 或 Worker Node,每台 Node 都必須確認 MAC Address及 Product_UUID的值必須唯一。
- MAC Address:可以透過指令 ip link或 ifconfig -a 確認。
- Product_UUID:可以透過指令 cat /sys/class/dmi/id/product_uuid或 dmidecode -s system-uuid確認。
匯入的 CentOS 重新產生 Product_UUID 的方法?
因為,本文採用的是 CentOS 所以也可以直接參考 Red Hat 官方文件,但是因為我沒有 Red Hat subscriptions 所以無法看到下列文章的完整內容:- How to change UUID / serial for a guest running on Hyper V ? - Red Hat Customer Portal
- What is system UUID and how to change it? - Red Hat Customer Portal
- UUID displayed by dmidecode and lshal command is different - Red Hat Customer Portal
同時,在網路上我好像沒有找到簡單的方法,可以讓已經匯入運作的 CentOS 重新產生 Product_UUID的方式 (還請路過的高手指點迷津 😎)
怎麼為 CentOS 範本產生新的 Product_UUID?
因為,並沒有找到簡單的方法,可以讓已經匯入運作的 CentOS 重新產生 Product_UUID 的方式。同時,剛好找到這篇 Hyper-V : Unique Identifier or MachineGUID討論串,可以透過「新增」VM 虛擬主機的方式,然後掛載 CentOS Template .vhdx 的方式來達成重新產生新的 Product_UUID 的目的。但是,又遭遇到另 1 個問題 (怎麼就你問題最多 💢),因為並非採用「匯出 / 匯入」方式,而是以「新增」VM 虛擬主機的方式,然後掛載 CentOS Template .vhdx 的方式,所以便發生這個新增的 CentOS VM 因為沒有 UEFI 檔案而無法啟動。
圖、CentOS VM 因為沒有 UEFI 檔案而無法順利啟動
圖、CentOS VM 因為沒有 UEFI 檔案而無法順利啟動
新增 CentOS 範本虛擬主機重新產生 UEFI 檔案
簡單來說,以本文的實作環境必須要為 CentOS VM 產生「shimx64.efi」的 UEFI 檔案,便能夠順利讓 CentOS VM 啟動。重新產生 UEFI 檔案的相關資訊,請參考下列網址:- System Crash with message failed to open \efi\redhat\grubx64.efi - Red Hat Customer Portal
- 25.7. Reinstalling GRUB 2 - Red Hat Customer Portal
- zh-tw/HowTos/ManualInstall - CentOS Wiki
圖、為 CentOS VM 產生 UEFI 檔案便能順利啟動
首先,請將 CentOS VM 關機,然後放入 CentOS 7 安裝光碟後啟動,在 CentOS 7 安裝光碟開機畫面中選擇「Troubleshooting」項目。
圖、選擇 Troubleshooting 項目
接著,選擇「Rescue a CentOS system」項目。
圖、選擇 Rescue a CentOS system 項目
選擇「3) Skip to shell」項目。
圖、選擇 3) Skip to shell 項目
進入 Shell 模式後,鍵入指令「efibootmgr --create --label CentOS --disk /dev/sda1 --loader "\EFI\centos\shimx64.efi"」重新產生 UEFI 檔案。
圖、重新產生 UEFI 檔案
此時,開啟 CentOS VM 虛擬主機的設定視窗,便可以看到自動產生「shimx64.efi」的 UEFI 檔案,請調整至第 1 個開機順位便能夠順利讓 CentOS VM 啟動。
圖、為 CentOS VM 產生 UEFI 檔案便能順利啟動
開機完成後,可以透過「hostnamectl」指令查看 Machine ID / Boot ID、「ip a」指令查看 MAC Address、「cat /sys/class/dmi/id/product_uuid」指令查看 Product_UUID,可以發現都是不同的。💪
圖、不同的 CentOS VM 不同的 Product_UUID
補充、PowerShell 新增 CentOS 範本虛擬主機
由於是「新增」CentOS 範本虛擬主機,所以必須要幫新增的 VM 虛擬主機重新組態設定,例如,vCPU 數量、vRAM、Smart Paging File Location......等。所以,就寫個簡單的 PowerShell 來處理這段了,有興趣的朋友可以參考看看 😜。CentOS 7.4 基礎設定系列文章:
- CentOS 7.4 基礎設定 (1) - 安裝整合服務並建立一般使用者帳號
- CentOS 7.4 基礎設定 (2) - 組態設定網路功能
- CentOS 7.4 基礎設定 (3) - 簡述 SELinux 安全性增強機制
- CentOS 7.4 基礎設定 (4) - 組態設定 VIM 及 Bash Shell 操作環境
- CentOS 7.4 基礎設定 (5) - 設定 sudo 管理員帳號管理機制
- CentOS 7.4 基礎設定 (6) - 禁止 Root 帳號本機及 SSH 遠端登入
- CentOS 7.4 基礎設定 (7) - 簡述 YUM 套件管理工具
- CentOS 7.4 基礎設定 (8) - 擴充 YUM 套件數量
- CentOS 7.4 基礎設定 (9) - 簡述 Systemd 啟動模式等級
- CentOS 7.4 基礎設定 (10) - 調整 Firewalld 防火牆規則
- CentOS 7.4 基礎設定 (11) - 定期寄送 CentOS 主機系統資訊 Log
- CentOS 7.4 基礎設定 (12) - 關閉不必要的系統服務
- CentOS 7.4 基礎設定 (13) - 採用 I/O Scheduler Noop 加速 Disk I/O
- CentOS 7.4 基礎設定 (14) - 完成 CentOS Base VM 的製作
- (本文) CentOS 7.4 基礎設定 (15) - 範本 CentOS 重新產生 Product_UUID