共用方式為


準備適用於 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 時。 您也可以在資料磁碟上使用 LVMRAID
  • 需要裝載了使用者定義函式 (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 部門或系統管理員。

  1. 在 Hyper-V 管理員中,選取 VM。

  2. 選取 [連線],以開啟 VM 的主控台視窗。

  3. 在 CentOS 6 中,NetworkManager 可能會對 Azure Linux 代理程式造成干擾。 解除安裝此套件:

    sudo rpm -e --nodeps NetworkManager
    
  4. 建立或編輯檔案 /etc/sysconfig/network 並新增下列文字:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. 建立或編輯檔案 /etc/sysconfig/network-scripts/ifcfg-eth0 並新增下列文字:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  6. 修改 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
    
  7. 確定網路服務在開機時啟動:

    sudo chkconfig network on
    
  8. 如果您想要使用在 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 代理程式。

  9. 將下面這行新增至 /etc/yum.conf

    http_caching=packages
    
  10. 清除目前的 yum 中繼資料並使用最新的套件更新系統:

    sudo yum clean all
    

    除非您要為舊版 CentOS 建立映像,否則我們建議您將所有套件更新到最新版本:

    sudo yum -y update
    

    執行此命令之後可能需要重新開機。

  11. 選擇性:安裝 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。

  12. 安裝 Azure Linux 代理程式與相依性。 啟動並啟用 waagent 服務:

    sudo yum install python-pyasn1 WALinuxAgent
    sudo service waagent start
    sudo chkconfig waagent on
    

    如果 NetworkManagerNetworkManager-gnome 套件沒有如步驟 3 所述遭到移除,則 WALinuxAgent 套件會將這兩個套件移除。

  13. 修改 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 \(英文\)。

  14. 確定安全殼層伺服器已安裝並設定為在開機時啟動。 此設定通常是預設值。

  15. 請不要在 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.
    
  16. 取消佈建 VM,並準備將其佈建於 Azure 上:

    sudo waagent -force -deprovision+user
    sudo export HISTSIZE=0
    

    注意

    如果您要移轉特定的 VM,但不想建立一般化映像,請略過取消佈建步驟。

  17. 在 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
    

設定步驟

  1. 在 Hyper-V 管理員中,選取 VM。

  2. 選取 [連線],以開啟 VM 的主控台視窗。

  3. 建立或編輯檔案 /etc/sysconfig/network 並新增下列文字:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  4. 建立或編輯檔案 /etc/sysconfig/network-scripts/ifcfg-eth0 並新增下列文字:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    NM_CONTROLLED=no
    
  5. 修改 udev 角色可防止產生乙太網路介面的靜態規則。 在 Azure 或 Hyper-V 中複製 VM 時,這些規則可能會造成問題:

    sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
    
  6. 如果您想要使用在 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 代理程式。

  7. 清除目前的 yum 中繼資料並安裝任何更新:

    sudo yum clean all
    

    除非您要為舊版 CentOS 建立映像,否則我們建議您將所有套件更新到最新版本:

    sudo yum -y update
    

    執行此命令之後可能需要重新開機。

  8. 修改 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 造成問題。

  9. 編輯完 /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 需求。如需詳細資訊,請參閱文件頂端)。

  10. 如果您要從 VMware、VirtualBox 或 KVM 建置映像:請確定 initramfs 中已包括 Hyper-V 驅動程式:

    1. 編輯 /etc/dracut.conf 並加入內容:

      add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
      
    2. 重建 initramfs:

      sudo dracut -f -v
      
  11. 安裝 Azure VM 延伸模組的 Azure Linux 代理程式和相依性:

    sudo yum install python-pyasn1 WALinuxAgent
    sudo systemctl enable waagent
    
  12. 安裝 cloud-init 來處理佈建:

    sudo yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
    
    • 設定 cloud-initwaagent
    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
    
  13. 交換設定:

    1. 請不要在 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
      
    2. 如果您想要裝載、格式化和建立交換分頁檔,您可以:

      • 每次建立 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
        
  14. 執行下列命令取消佈建 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
    
  15. 在 Hyper-V 管理員中,選取 [動作]>[關閉]。 您現在可以將 Linux VHD 上傳至 Azure

您現在可以開始使用您的 CentOS Linux VHD 在 Azure 中建立新的 VM。 如果您是第一次將 .vhd 檔案上傳至 Azure,請參閱從自訂磁碟建立 Linux VM