準備適用於 Azure 的 CentOS 型虛擬機器
警告
本文參考 CentOS,這是即將結束生命週期 (EOL) 狀態的 Linux 發行版本。 請據以考慮您的使用和規劃。 如需詳細資訊,請參閱 CentOS 生命週期結束指導。
適用於:✔️ Linux VM ✔️ 彈性擴展集
了解如何建立及上傳包含 CentOS 型 Linux 作業系統 (OS) 的 Azure 虛擬硬碟 (VHD)。 如需詳細資訊,請參閱
必要條件
本文假設您已將 CentOS (或類似的衍生物件) Linux OS 安裝到 VHD。 有多項工具可用來建立 .vhd 檔案。 一個範例是虛擬化解決方案,例如 Hyper-V。 如需指示,請參閱安裝 Hyper-V 角色及設定 VM。
CentOS 安裝注意事項
- 如需有關針對 Azure 準備 Linux 的更多秘訣,請參閱一般 Linux 安裝注意事項。
- Azure 不支援 VHDX 格式,只支援固定 VHD。 您可以使用 Hyper-V 管理員或
convert-vhd
Cmdlet,將磁碟轉換為 VHD 格式。 如果您使用 VirtualBox,請選取 [固定大小],而不是在建立磁碟時動態配置的預設值。 - 必須在核心中啟用 vfat 核心模組。
- 安裝 Linux 系統時,我們建議您使用標準磁碟分割而不是邏輯磁碟區管理員 (LVM),其經常是許多安裝的預設設定。 使用磁碟分割可避免 LVM 與複製之 VM 的名稱衝突,特別是為了疑難排解而需要將作業系統磁碟連接至另一個相同的 VM 時。 您也可以在資料磁碟上使用 LVM 或 RAID。
- 需要裝載了使用者定義函式 (UDF) 檔案系統的核心支援。 在 Azure 上初次開機時,會使用連接客體的 UDF 格式媒體,將佈建設定傳遞至 Linux VM。 Azure Linux 代理程式或
cloud-init
必須裝載 UDF 檔案系統,才能讀取其設定並佈建 VM。 - Linux Kernel 2.6.37 以下的版本不支援較大 VM 大小 Hyper-V 上的 NUMA。 這個問題主要影響使用上游 Centos 2.6.32 核心的較舊發行版本,Centos 6.6 (kernel-2.6.32-504) 已加以修正。 執行的自訂核心是 2.6.37 以前版本的系統,或 2.6.32-504 以前的 Red Hat Enterprise Linux (RHEL) 型核心必須在 grub.conf 的核心命令列設定開機參數
numa=off
。 如需詳細資訊,請參閱 Red Hat KB 436883 \(英文\)。 - 請勿在 OS 磁碟上設定交換磁碟分割。
- Azure 上的所有 VHD 必須具有與 1 MB 對應的虛擬大小。 從原始磁碟轉換成 VHD 時,您必須在轉換前先確保原始磁碟大小是 1 MB 的倍數。 如需詳細資訊,請參閱 Linux 安裝注意事項。
注意
Cloud-init >= 21.2 會移除 UDF 需求。 不過,若未啟用 UDF 模組,就無法在佈建期間裝載 CD-ROM,進而無法套用自訂資料。 此解決方案的因應措施是利用使用者資料來套用自訂資料。 與自訂資料不同,使用者資料並未經過加密。 如需詳細資訊,請參閱使用者資料格式。
CentOS 6.x
重要
CentOS 6 已達到其 EOL,且不再受到 CentOS 社群的支援。 這表示不會針對此版本發行任何進一步的更新或安全性修補程式,使其容易受到潛在安全性風險的影響。 我們強烈建議您升級至較新版本的 CentOS,以確保系統的安全性與穩定性。 如需進一步的協助,請洽詢 IT 部門或系統管理員。
在 Hyper-V 管理員中,選取 VM。
選取 [連線],以開啟 VM 的主控台視窗。
在 CentOS 6 中,
NetworkManager
可能會對 Azure Linux 代理程式造成干擾。 解除安裝此套件:sudo rpm -e --nodeps NetworkManager
建立或編輯檔案
/etc/sysconfig/network
並新增下列文字:NETWORKING=yes HOSTNAME=localhost.localdomain
建立或編輯檔案
/etc/sysconfig/network-scripts/ifcfg-eth0
並新增下列文字:DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet USERCTL=no PEERDNS=yes IPV6INIT=no
修改 udev 角色可防止產生乙太網路介面的靜態規則。 在 Azure 或 Hyper-V 中複製 VM 時,這些規則可能會造成問題:
sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
確定網路服務在開機時啟動:
sudo chkconfig network on
如果您想要使用在 Azure 資料中心內託管的 OpenLogic 鏡像,請使用下列存放庫來取代
/etc/yum.repos.d/CentOS-Base.repo
檔案。 此動作也會新增包括額外套件 (例如 Azure Linux 代理程式) 的 [openlogic] 存放庫:[openlogic] name=CentOS-$releasever - openlogic packages for $basearch baseurl=http://olcentgbl.trafficmanager.net/openlogic/$releasever/openlogic/$basearch/ enabled=1 gpgcheck=0 [base] name=CentOS-$releasever - Base #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 #released updates [updates] name=CentOS-$releasever - Updates #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/updates/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 #additional packages that might be useful [extras] name=CentOS-$releasever - Extras #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/extras/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 #additional packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever - Plus #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/centosplus/$basearch/ gpgcheck=1 enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 #contrib - packages by Centos Users [contrib] name=CentOS-$releasever - Contrib #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/contrib/$basearch/ gpgcheck=1 enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
注意
本文其他部分將假設您至少會使用
[openlogic]
存放庫,此存放庫會用來安裝 Azure Linux 代理程式。將下面這行新增至
/etc/yum.conf
:http_caching=packages
清除目前的 yum 中繼資料並使用最新的套件更新系統:
sudo yum clean all
除非您要為舊版 CentOS 建立映像,否則我們建議您將所有套件更新到最新版本:
sudo yum -y update
執行此命令之後可能需要重新開機。
選擇性:安裝 Linux Integration Services (LIS) 的驅動程式。
重要
此步驟對 CentOS 6.3 與更舊版本而言為必要步驟,但對較新的版本而言為選擇性步驟。
sudo rpm -e hypervkvpd ## (might return an error if not installed, that's OK) sudo yum install microsoft-hyper-v
或者,您可以依照 LIS 下載頁面上的手動安裝指示執行,以在您的 VM 上安裝該 RPM。
安裝 Azure Linux 代理程式與相依性。 啟動並啟用
waagent
服務:sudo yum install python-pyasn1 WALinuxAgent sudo service waagent start sudo chkconfig waagent on
如果
NetworkManager
和NetworkManager-gnome
套件沒有如步驟 3 所述遭到移除,則 WALinuxAgent 套件會將這兩個套件移除。修改 grub 設定中的核心開機那一行,使其包含其他用於 Azure 的核心參數。 若要執行此步驟,請在文字編輯器中開啟
/boot/grub/menu.lst
,並確定預設核心包含以下參數:console=ttyS0 earlyprintk=ttyS0 rootdelay=300
此修改作業也會確保所有主控台訊息都會傳送給第一個序列埠,以協助 Azure 支援團隊進行問題偵錯程序。
我們也建議您「移除」下列參數:
rhgb quiet crashkernel=auto
在雲端環境中,您會將所有記錄傳送到序列埠,因此不適合使用圖形化和無訊息開機。 如果您需要,可以保留設定
crashkernel
選項。 但此參數會減少 VM 中約 128 MB 或以上的可用記憶體數量,這可能會對較小型的 VM 造成問題。重要
CentOS 6.5 與較舊版本也必須設定核心參數
numa=off
。 如需詳細資訊,請參閱 Red Hat KB 436883 \(英文\)。確定安全殼層伺服器已安裝並設定為在開機時啟動。 此設定通常是預設值。
請不要在 OS 磁碟上建立交換空間。
Azure Linux 代理程式可在 VM 佈建於 Azure 後,使用連結至 VM 的本機資源磁碟自動設定交換空間。 本機資源磁碟是暫存磁碟,可能會在 VM 取消佈建時清空。 安裝 Azure Linux 代理程式 (請參閱上一個步驟) 後,請在
/etc/waagent.conf
中適當修改下列參數:ResourceDisk.Format=y ResourceDisk.Filesystem=ext4 ResourceDisk.MountPoint=/mnt/resource ResourceDisk.EnableSwap=y ResourceDisk.SwapSizeMB=2048 ## NOTE: set this to whatever you need it to be.
取消佈建 VM,並準備將其佈建於 Azure 上:
sudo waagent -force -deprovision+user sudo export HISTSIZE=0
注意
如果您要移轉特定的 VM,但不想建立一般化映像,請略過取消佈建步驟。
在 Hyper-V 管理員中,選取 [動作]>[關閉]。 您現在可以將 Linux VHD 上傳至 Azure。
CentOS 7.0+
如果您使用 CentOS 7.0+,請遵循後續各節中的步驟。
CentOS 7 (和類似的衍生項目) 中的變更
為 Azure 準備 CentOS 7 VM 類似於 CentOS 6。 值得注意的幾個重大差異包括:
NetworkManager
套件不會再與 Azure Linux 代理程式發生衝突。 預設會安裝此套件,建議您不要將它移除。GRUB2 現已作為預設的開機載入器使用,因此我們已變更編輯核心參數的程序 (請參閱「設定步驟」一節。)
XFS 現為預設的檔案系統。 如果需要,您仍可使用 ext4 檔案系統。
由於 CentOS 8 Stream 和更新版本預設不再包含
network.service
,因此您必須手動安裝:sudo yum install network-scripts sudo systemctl enable network.service
設定步驟
在 Hyper-V 管理員中,選取 VM。
選取 [連線],以開啟 VM 的主控台視窗。
建立或編輯檔案
/etc/sysconfig/network
並新增下列文字:NETWORKING=yes HOSTNAME=localhost.localdomain
建立或編輯檔案
/etc/sysconfig/network-scripts/ifcfg-eth0
並新增下列文字:DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet USERCTL=no PEERDNS=yes IPV6INIT=no NM_CONTROLLED=no
修改 udev 角色可防止產生乙太網路介面的靜態規則。 在 Azure 或 Hyper-V 中複製 VM 時,這些規則可能會造成問題:
sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
如果您想要使用在 Azure 資料中心內託管的
OpenLogic
鏡像,請使用下列存放庫取代 /etc/yum.repos.d/CentOS-Base.repo 檔案。 此動作也會新增包括 Azure Linux 代理程式套件的 [openlogic] 存放庫:[openlogic] name=CentOS-$releasever - openlogic packages for $basearch baseurl=http://olcentgbl.trafficmanager.net/openlogic/$releasever/openlogic/$basearch/ enabled=1 gpgcheck=0 [base] name=CentOS-$releasever - Base #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #released updates [updates] name=CentOS-$releasever - Updates #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/updates/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #additional packages that might be useful [extras] name=CentOS-$releasever - Extras #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/extras/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #additional packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever - Plus #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/centosplus/$basearch/ gpgcheck=1 enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
注意
本文其他部分將假設您至少會使用
[openlogic]
存放庫,此存放庫會用來安裝 Azure Linux 代理程式。清除目前的 yum 中繼資料並安裝任何更新:
sudo yum clean all
除非您要為舊版 CentOS 建立映像,否則我們建議您將所有套件更新到最新版本:
sudo yum -y update
執行此命令之後可能需要重新開機。
修改 grub 設定中的核心開機那一行,使其包含其他用於 Azure 的核心參數。 若要執行此步驟,請在文字編輯器中開啟
/etc/default/grub
並編輯GRUB_CMDLINE_LINUX
參數。 例如:GRUB_CMDLINE_LINUX="rootdelay=300 console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
此修改作業也會確保所有主控台訊息都會傳送給第一個序列埠,以協助 Azure 支援團隊進行問題偵錯程序。 這也會關閉新的 CentOS 7 對網路介面卡的命名慣例。 我們也建議您「移除」下列參數:
rhgb quiet crashkernel=auto
在雲端環境中,您會將所有記錄傳送到序列埠,因此不適合使用圖形化和無訊息開機。 如果您需要,可以保留設定
crashkernel
選項。 但此參數會減少 VM 中約 128 MB 或以上的可用記憶體數量,這可能會對較小型的 VM 造成問題。編輯完
/etc/default/grub
之後,請重建 grub 設定:sudo grub2-mkconfig -o /boot/grub2/grub.cfg
注意
如果您要上傳已啟用 UEFI 的 VM,則更新 grub 的命令為
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
。 也必須在核心中啟用 vfat 核心模組。 否則佈建會失敗。請確定 udf 模組已啟用。 移除或停用該模組將導致佈建或開機失敗。 (_Cloud-init>= 21.2 會移除 udf 需求。如需詳細資訊,請參閱文件頂端)。
如果您要從 VMware、VirtualBox 或 KVM 建置映像:請確定 initramfs 中已包括 Hyper-V 驅動程式:
編輯
/etc/dracut.conf
並加入內容:add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
重建 initramfs:
sudo dracut -f -v
安裝 Azure VM 延伸模組的 Azure Linux 代理程式和相依性:
sudo yum install python-pyasn1 WALinuxAgent sudo systemctl enable waagent
安裝
cloud-init
來處理佈建:sudo yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
- 設定
cloud-init
的waagent
:
sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=auto/g' /etc/waagent.conf sudo sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf sudo sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
sudo echo "Adding mounts and disk_setup to init stage" sudo sed -i '/ - mounts/d' /etc/cloud/cloud.cfg sudo sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg sudo sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg sudo sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg
sudo echo "Allow only Azure datasource, disable fetching network setting via IMDS" sudo cat > /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg <<EOF datasource_list: [ Azure ] datasource: Azure: apply_network_config: False EOF if [[ -f /mnt/swapfile ]]; then echo Removing swapfile - RHEL uses a swapfile by default swapoff /mnt/swapfile rm /mnt/swapfile -f fi echo "Add console log file" cat >> /etc/cloud/cloud.cfg.d/05_logging.cfg <<EOF # This tells cloud-init to redirect its stdout and stderr to # 'tee -a /var/log/cloud-init-output.log' so the user can see output # there without needing to look on the console. output: {all: '| tee -a /var/log/cloud-init-output.log'} EOF
- 設定
交換設定:
請不要在 OS 磁碟上建立交換空間。
之前會使用 Azure Linux 代理程式,在 VM 佈建於 Azure 後,使用連結至 VM 的本機資源磁碟自動設定交換空間。 不過,
cloud-init
現在會處理此步驟。 您不得使用 Linux 代理程式格式化資源磁碟來建立分頁檔。 適當修改/etc/waagent.conf
中的下列參數:sudo sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf sudo sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
如果您想要裝載、格式化和建立交換分頁檔,您可以:
每次建立 VM 時,將此命令當做
cloud-init
設定傳入。使用模擬到映像中的
cloud-init
指示詞,每次建立 VM 時都會執行此步驟:sudo echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf sudo cat > /etc/cloud/cloud.cfg.d/00-azure-swap.cfg << EOF #cloud-config # Generated by Azure cloud image build disk_setup: ephemeral0: table_type: mbr layout: [66, [33, 82]] overwrite: True fs_setup: - device: ephemeral0.1 filesystem: ext4 - device: ephemeral0.2 filesystem: swap mounts: - ["ephemeral0.1", "/mnt"] - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"] EOF
執行下列命令取消佈建 VM,並準備將其佈建於 Azure 上。
注意
如果您要移轉特定的 VM,但不想建立一般化映像,請略過取消佈建步驟。
sudo rm -f /var/log/waagent.log sudo cloud-init clean sudo waagent -force -deprovision+user sudo rm -f ~/.bash_history sudo export HISTSIZE=0
在 Hyper-V 管理員中,選取 [動作]>[關閉]。 您現在可以將 Linux VHD 上傳至 Azure。
相關內容
您現在可以開始使用您的 CentOS Linux VHD 在 Azure 中建立新的 VM。 如果您是第一次將 .vhd 檔案上傳至 Azure,請參閱從自訂磁碟建立 Linux VM。