準備適用於 Azure 的 Red Hat 型虛擬機器

適用於:✔️ Linux VM ✔️ 彈性擴展集 ✔️ 統一擴展集

在本文中,您將學習如何準備 Red Hat Enterprise Linux (RHEL) 虛擬機器以在 Azure 中使用。 本文涵蓋的 RHEL 版本為 6.X、7.X 和 8.X。 本文章所述之準備作業使用 Hyper-V、核心為基礎之虛擬機器 (KVM) 及 VMware 等 Hypervisor。 如需參加 Red Hat 雲端存取方案之資格需求的詳細資訊,請參閱 Red Hat 雲端存取網站在 Azure 上執行 RHEL。 如需自動化建置 RHEL 映像的方式,請參閱 Azure Image Builder

注意

請注意已屬於生命週期結束 (EOL),且 Red Hat 不再支援的版本。 於 EOL 或之後上傳的映像,將會根據合理的商務義務支援。 Redhat 的產品生命週期連結

Hyper-V 管理員

本節說明如何使用 Hyper-V 管理員準備 RHEL 6RHEL 7RHEL 8 虛擬機器。

必要條件

本節假設您已經從 Red Hat 網站取得 ISO 檔案並將 RHEL 映像安裝至虛擬硬碟 (VHD)。 如需有關如何使用 Hyper-V 管理員來安裝作業系統映像的詳細資訊,請參閱安裝 Hyper-V 角色和設定虛擬機器

RHEL 安裝注意事項

  • Azure 不支援 VHDX 格式。 Azure 只支援固定 VHD。 您可以使用 Hyper-V 管理員將磁碟轉換為 VHD 格式,或者使用 convert-vhd Cmdlet。 如果您使用 VirtualBox,請選取 [固定大小] ,而不是預設在建立磁碟時動態配置的選項。

  • Azure 支援 Gen1 (BIOS 開機) 和 Gen2 (UEFI 開機) 虛擬機器。

  • 允許的 VHD 大小上限為 1,023 GB。

  • 必須在核心中啟用 vfat 核心模組。

  • 邏輯磁碟區管理員 (LVM) 受到支援,而且可能會在 OS 磁碟或 Azure 虛擬機器中的資料磁碟上使用。 不過,通常建議在 OS 磁碟上使用標準磁碟分割,而不是 LVM。 此練習可避免 LVM 名稱與複製的虛擬機器發生衝突,特別是為了疑難排解而需要將作業系統磁碟連結至另一部相同虛擬機器時。 請參閱 LVMRAID 文件。

  • 需要掛接通用磁碟格式 (UDF) 檔案系統的核心支援。。 在 Azure 上第一次開機時,連結至客體的 UDF 格式媒體會將佈建組態傳遞至 Linux 虛擬機器。 Azure Linux 代理程式必須能夠掛接 UDF 檔案系統,才能讀取其組態並佈建虛擬機器,若未這麼做,佈建就會失敗!

  • 請勿在作業系統磁碟上設定交換磁碟分割。 在下列步驟中可以找到與此有關的詳細資訊。

  • Azure 上的所有 VHD 必須具有與 1 MB 對應的虛擬大小。 從未經處理的磁碟轉換成 VHD 時,您必須確定未經處理的磁碟大小在轉換前是 1 MB 的倍數。 如需更多詳細資料,請參閱以下步驟。 另請參閱 Linux 安裝注意事項以取得詳細資訊。

注意

Cloud-init >= 21.2 會移除 udf 需求。 不過,若未啟用 udf 模組,就無法在佈建期間掛接 cdrom,進而無法套用自訂資料。 此解決方案的因應措施是使用使用者資料來套用自訂資料。 然而,與自訂資料不同,使用者資料並未經過加密。 https://cloudinit.readthedocs.io/en/latest/topics/format.html

使用 Hyper-V 管理員的 RHEL 6

重要

從 2020 年 11 月 30 日起,Red Hat Enterprise Linux 6 將進入終止維護階段。 維護階段後面接著為延長生命階段。 當 Red Hat Enterprise Linux 6 從完整/維護階段轉換時,強烈建議升級至 Red Hat Enterprise Linux 7、8 或 9。 如果客戶必須留在 Red Hat Enterprise Linux 6 上,建議您新增 Red Hat Enterprise Linux 延伸生命週期支援 (ELS) 附加元件。

  1. 在 Hyper-V 管理員中,選取虛擬機器。

  2. 按一下 [連接] ,以開啟虛擬機器的主控台視窗。

  3. 在 RHEL 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 規則可防止產生乙太網路介面的靜態規則。 在 Microsoft Azure 或 Hyper-V 中複製虛擬機器時,這些規則會造成問題:

    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
    

注意

** 使用加速網路 (AN) 時,建立的合成介面必須設定為使用 udev 規則的非受控。 這可防止 NetworkManager 將與主要介面相同的 IP 指派給它。

加以套用:

sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
# Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
# This interface is transparentlybonded to the synthetic interface,
# so NetworkManager should just ignore any SRIOV interfaces.
SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION=="add", ENV{NM_UNMANAGED}="1"
EOF
  1. 若要確保開機時會啟動網路服務,可執行下列命令:

    sudo chkconfig network on
    
  2. 透過執行以下命令來註冊 Red Hat 訂用帳戶,以便從 RHEL 儲存機制安裝封裝:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  3. WALinuxAgent 套件 WALinuxAgent-<version> 已推送至 Red Hat extras 儲存機制。 執行下列命令以啟用 extras 儲存機制:

    sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
    
  4. 修改 grub 組態中的核心開機那一行,使其額外包含用於 Azure 的核心參數。 若要執行此修改,請在文字編輯器中開啟 /boot/grub/menu.lst,並確定預設核心包含以下參數:

    console=ttyS0 earlyprintk=ttyS0
    

    這也將確保所有主控台訊息都會傳送給第一個序列埠,以協助 Azure 支援團隊進行問題偵錯程序。

    此外,我們還建議您移除下列參數:

    rhgb quiet crashkernel=auto
    

    在雲端環境中,我們會將所有記錄傳送到序列埠,因此不適合使用圖形化和無訊息啟動。 您可以視需要保留 crashkernel 選項的設定。 請注意,此參數會減少虛擬機器中約 128 MB 或以上的可用記憶體數量。 此組態可能會對小型虛擬機器造成問題。

  5. 確定已安裝安全殼層 (SSH) 伺服器,並已設定為在開機時啟動 (這通常為預設值)。 修改 /etc/ssh/sshd_config 以包含下面一行:

    ClientAliveInterval 180
    
  6. 執行以下命令來安裝 Azure Linux 代理程式:

    sudo yum install WALinuxAgent
    sudo chkconfig waagent on
    

    如果 NetworkManager 和 NetworkManager-gnome 套件並未在步驟 3 中遭到移除,則在安裝 WALinuxAgent 套件時會將這兩個套件移除。

  7. 請勿在作業系統磁碟上建立交換空間。

    Azure Linux 代理程式可在虛擬機器佈建於 Azure 後,使用連結至虛擬機器的本機資源磁碟自動設定交換空間。 請注意,本機資源磁碟是暫存磁碟,可能會在虛擬機器取消佈建時清空。 在上一個步驟安裝 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.
    
  8. 執行下列命令以取消註冊訂用帳戶 (如有必要):

    sudo subscription-manager unregister
    
  9. 執行下列命令,以取消佈建虛擬機器,並準備將它佈建於 Azure 上:

注意

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

    sudo waagent -force -deprovision
    sudo export HISTSIZE=0
  1. 在 Hyper-V 管理員中,按一下 [動作]>[關閉]。 您現在可以將 Linux VHD 上傳至 Azure

使用 Hyper-V 管理員的 RHEL 7

  1. 在 Hyper-V 管理員中,選取虛擬機器。

  2. 按一下 [連接] ,以開啟虛擬機器的主控台視窗。

  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
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    
  5. 若要確保開機時會啟動網路服務,可執行下列命令:

    sudo systemctl enable network
    
  6. 透過執行以下命令來註冊 Red Hat 訂用帳戶,以便從 RHEL 儲存機制安裝封裝:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  7. 修改 grub 組態中的核心開機那一行,使其額外包含用於 Azure 的核心參數。 若要執行此修改,請在文字編輯器中開啟 /etc/default/grub,然後編輯 GRUB_CMDLINE_LINUX 參數。 例如:

    GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 earlyprintk=ttyS0 net.ifnames=0"
    GRUB_TERMINAL_OUTPUT="serial console"
    GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
    

    這也將確保所有主控台訊息都會傳送給第一個序列埠,並且啟用與序列主控台的互動,以協助 Azure 支援團隊進行問題偵錯程序。 此組太也會關閉新的 RHEL 7 對 NIC 的命名慣例。

    rhgb quiet crashkernel=auto
    

    在雲端環境中,我們會將所有記錄傳送到序列埠,因此不適合使用圖形化和無訊息啟動。 您可以視需要保留 crashkernel 選項的設定。 請注意,此參數會減少虛擬機器中約 128 MB 或以上的可用記憶體數量,這可能會對小型虛擬機器造成問題。

  8. 完成 /etc/default/grub 的編輯之後,請執行下列命令以重建 grub 組態:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    

    注意

    如果上傳已啟用 UEFI 的 VM,則更新 grub 的命令為 grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg

  9. 確定已安裝 SSH 伺服器,並已設定為在開機時啟動 (這通常為預設值)。 修改 /etc/ssh/sshd_config 以包含下面一行:

    ClientAliveInterval 180
    
  10. WALinuxAgent 套件 WALinuxAgent-<version> 已推送至 Red Hat extras 儲存機制。 執行下列命令以啟用 extras 儲存機制:

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  11. 執行下列命令,以安裝 Azure Linux 代理程式、cloud-init 和其他必要的公用程式:

    sudo yum install -y WALinuxAgent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    sudo systemctl enable waagent.service
    sudo systemctl enable cloud-init.service
    
  12. 設定 cloud-init 來處理佈建:

    1. 設定 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
    

    注意

    如果您要移轉特定的虛擬機器,但是不想建立一般化映像,請在 /etc/waagent.conf 設定中設定 Provisioning.Agent=disabled

    1. 設定掛接:
    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
    
    1. 設定 Azure 資料庫:
    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
    
    1. 如果已設定,請移除現有的 swapfile:
    if [[ -f /mnt/resource/swapfile ]]; then
    echo "Removing swapfile" #RHEL uses a swapfile by default
    swapoff /mnt/resource/swapfile
    rm /mnt/resource/swapfile -f
    fi
    
    1. 設定 cloud-init 記錄:
    sudo echo "Add console log file"
    sudo 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. 交換設定。 請勿在作業系統磁碟上建立交換空間。

    在過去,Azure Linux 代理程式會在虛擬機器佈建於 Azure 後,使用連結至虛擬機器的本機資源磁碟自動設定交換空間。 不過,cloud-init 現在已處理此情況,您不得使用 Linux 代理程式來格式化資源磁碟建立分頁檔,並在 /etc/waagent.conf 中適當地修改下列參數:

    ResourceDisk.Format=n
    ResourceDisk.EnableSwap=n
    

    如果您想要掛接、格式化和建立交換,您可以:

    • 每次透過 customdata 建立 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/resource"]
        - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]
      EOF
      
  14. 如果您要取消註冊訂用帳戶,請執行下列命令:

    sudo subscription-manager unregister
    
  15. 取消佈建

    執行下列命令,以取消佈建虛擬機器,並準備將它佈建於 Azure 上:

    警告

    如果您要移轉特定的虛擬機器,但是不想建立一般化映像,請略過取消佈建步驟。 執行 waagent -force -deprovision+user 命令會轉譯無法使用的來源電腦,此步驟僅供建立一般化映像。

    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
    
  16. 在 Hyper-V 管理員中,按一下 [動作]>[關閉]。 您現在可以將 Linux VHD 上傳至 Azure

使用 Hyper-V 管理員的 RHEL 8

  1. 在 Hyper-V 管理員中,選取虛擬機器。

  2. 按一下 [連接] ,以開啟虛擬機器的主控台視窗。

  3. 若要確保開機時會啟動網路管理員服務,可執行下列命令:

    sudo systemctl enable NetworkManager.service
    
  4. 將網路介面設定為在開機時自動啟動,並使用 DHCP:

    sudo nmcli con mod eth0 connection.autoconnect yes ipv4.method auto
    
  5. 透過執行以下命令來註冊 Red Hat 訂用帳戶,以便從 RHEL 儲存機制安裝封裝:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  6. 修改 grub 組態中的核心開機那一行,使其額外包含用於 Azure 並且啟用序列主控台的核心參數。

    1. 移除目前的 GRUB 參數:
    sudo grub2-editenv - unset kernelopts
    
    1. 在文字編輯器中編輯 /etc/default/grub,然後新增下列參數:
    GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 earlyprintk=ttyS0 net.ifnames=0"
    GRUB_TERMINAL_OUTPUT="serial console"
    GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
    

    這也將確保所有主控台訊息都會傳送給第一個序列埠,並且啟用與序列主控台的互動,以協助 Azure 支援團隊進行問題偵錯程序。 此組態也會關閉對 NIC 的新命名慣例。

    1. 此外,我們還建議您移除下列參數:
    rhgb quiet crashkernel=auto
    

    在雲端環境中,我們會將所有記錄傳送到序列埠,因此不適合使用圖形化和無訊息啟動。 您可以視需要保留 crashkernel 選項的設定。 請注意,此參數會減少虛擬機器中約 128 MB 或以上的可用記憶體數量,這可能會對小型虛擬機器造成問題。

  7. 完成 /etc/default/grub的編輯之後,請執行下列命令以重建 grub 組態:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    

    針對已啟用 UEFI 的 VM,請執行下列命令:

    sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
    
  8. 確定已安裝 SSH 伺服器,並已設定為在開機時啟動 (這通常為預設值)。 修改 /etc/ssh/sshd_config 以包含下面一行:

    ClientAliveInterval 180
    
  9. 執行下列命令,以安裝 Azure Linux 代理程式、cloud-init 和其他必要的公用程式:

    sudo yum install -y WALinuxAgent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    sudo systemctl enable waagent.service
    sudo systemctl enable cloud-init.service
    
  10. 設定 cloud-init 來處理佈建:

    1. 設定 cloud-init 的 waagent:
    sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-init/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
    

    注意

    如果您要移轉特定的虛擬機器,但是不想建立一般化映像,請在 /etc/waagent.conf 設定中設定 Provisioning.Agent=disabled

    1. 設定掛接:
    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
    
    1. 設定 Azure 資料庫:
    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
    
    1. 如果已設定,請移除現有的 swapfile:
    if [[ -f /mnt/resource/swapfile ]]; then
    echo "Removing swapfile" #RHEL uses a swapfile by defaul
    swapoff /mnt/resource/swapfile
    rm /mnt/resource/swapfile -f
    fi
    
    1. 設定 cloud-init 記錄:
    sudo echo "Add console log file"
    sudo 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
    
  11. 交換設定「不會」在作業系統磁碟上建立交換空間。

    在過去,Azure Linux 代理程式會在虛擬機器佈建於 Azure 後,使用連結至虛擬機器的本機資源磁碟自動設定交換空間。 不過,cloud-init 現在已處理此情況,您不得使用 Linux 代理程式來格式化資源磁碟建立分頁檔,並在 /etc/waagent.conf 中適當地修改下列參數:

    ResourceDisk.Format=n
    ResourceDisk.EnableSwap=n
    
    • 每次透過 customdata 建立 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/resource"]
        - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.device-timeout=2,x-systemd.requires=cloud-init.service", "0", "0"]
      EOF
      
  12. 如果您要取消註冊訂用帳戶,請執行下列命令:

    sudo subscription-manager unregister
    
  13. 取消佈建

    執行下列命令,以取消佈建虛擬機器,並準備將它佈建於 Azure 上:

    sudo cloud-init clean
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo sudo rm -f /var/log/waagent.log
    sudo export HISTSIZE=0
    

    警告

    如果您要移轉特定的虛擬機器,但是不想建立一般化映像,請略過取消佈建步驟。 執行 waagent -force -deprovision+user 命令會轉譯無法使用的來源電腦,此步驟僅供建立一般化映像。

  14. 在 Hyper-V 管理員中,按一下 [動作]>[關閉]。 您現在可以將 Linux VHD 上傳至 Azure

KVM

本節說明如何使用 KVM 來準備 RHEL 6RHEL 7 散發版本以上傳至 Azure。

使用 KVM 的 RHEL 6

重要

從 2020 年 11 月 30 日起,Red Hat Enterprise Linux 6 將進入終止維護階段。 維護階段後面接著為延長生命階段。 當 Red Hat Enterprise Linux 6 從完整/維護階段轉換時,強烈建議升級至 Red Hat Enterprise Linux 7、8 或 9。 如果客戶必須留在 Red Hat Enterprise Linux 6 上,建議您新增 Red Hat Enterprise Linux 延伸生命週期支援 (ELS) 附加元件。

  1. 從 Red Hat 網站下載 RHEL 6 的 KVM 映像。

  2. 設定根密碼。

    產生加密的密碼,並複製命令的輸出:

    sudo openssl passwd -1 changeme
    

    使用 guestfish 設定根密碼:

    sudo guestfish --rw -a <image-name>
    > <fs> run
    > <fs> list-filesystems
    > <fs> mount /dev/sda1 /
    > <fs> vi /etc/shadow
    > <fs> exit
    

    將根使用者的第二個欄位從 "!!" 變更為加密的密碼。

  3. 在 KVM 中從 qcow2 映像建立虛擬機器。 將磁碟類型設定為 qcow2,再將虛擬網路介面裝置模型設定為 virtio。 然後啟動虛擬機器並以 root 身分登入。

  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 中複製虛擬機器時,這些規則會造成問題:

    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
    

注意

** 使用加速網路 (AN) 時,建立的合成介面必須設定為使用 udev 規則的非受控。 這可防止 NetworkManager 將與主要介面相同的 IP 指派給它。

加以套用:

sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
# Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
# This interface is transparently bonded to the synthetic interface,
# so NetworkManager should just ignore any SRIOV interfaces.
SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION=="add", ENV{NM_UNMANAGED}="1"
EOF
  1. 若要確保開機時會啟動網路服務,可執行下列命令:

    sudo chkconfig network on
    
  2. 透過執行以下命令來註冊 Red Hat 訂用帳戶,以便從 RHEL 儲存機制安裝封裝:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  3. 修改 grub 組態中的核心開機那一行,使其額外包含用於 Azure 的核心參數。 若要進行此設定,請在文字編輯器中開啟 /boot/grub/menu.lst,並確定預設核心包含以下參數:

    console=ttyS0 earlyprintk=ttyS0
    

    這也將確保所有主控台訊息都會傳送給第一個序列埠,以協助 Azure 支援團隊進行問題偵錯程序。

    此外,我們還建議您移除下列參數:

    rhgb quiet crashkernel=auto
    

    在雲端環境中,我們會將所有記錄傳送到序列埠,因此不適合使用圖形化和無訊息啟動。 您可以視需要保留 crashkernel 選項的設定。 請注意,此參數會減少虛擬機器中約 128 MB 或以上的可用記憶體數量,這可能會對小型虛擬機器造成問題。

  4. 將 Hyper-V 模組新增至 initramfs:

    編輯 /etc/dracut.conf 檔案並新增下列內容:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    重建 initramfs:

    sudo dracut -f -v
    
  5. 解除安裝 cloud-init:

    sudo yum remove cloud-init
    
  6. 確定您已安裝 SSH 伺服器,並已設定為在開機時啟動:

    sudo chkconfig sshd on
    

    修改 /etc/ssh/sshd_config 以包含下面一行:

    PasswordAuthentication yes
    ClientAliveInterval 180
    
  7. WALinuxAgent 套件 WALinuxAgent-<version> 已推送至 Red Hat extras 儲存機制。 執行下列命令以啟用 extras 儲存機制:

    sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
    
  8. 執行以下命令來安裝 Azure Linux 代理程式:

    sudo yum install WALinuxAgent
    sudo chkconfig waagent on
    
  9. Azure Linux 代理程式可在虛擬機器佈建於 Azure 後,使用連結至虛擬機器的本機資源磁碟自動設定交換空間。 請注意,本機資源磁碟是暫存磁碟,可能會在虛擬機器取消佈建時清空。 在上一個步驟安裝 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.
    
  10. 執行下列命令以取消註冊訂用帳戶 (如有必要):

    sudo subscription-manager unregister
    
  11. 執行下列命令,以取消佈建虛擬機器,並準備將它佈建於 Azure 上:

    注意

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

    sudo rm -rf /var/lib/waagent/
    sudo rm -f /var/log/waagent.log
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo export HISTSIZE=0
    
  12. 在 KVM 中關閉虛擬機器。

  13. 將 qcow2 映像轉換成 VHD 格式。

    注意

    qemu-img 版本 >=2.2.1 中已知的錯誤會導致 VHD 的格式不正確。 此問題已在 QEMU 2.6 中修正。 建議使用 qemu-img 2.2.0 或更舊版本,或更新至 2.6 或更新版本。 參考: https://bugs.launchpad.net/qemu/+bug/1490611

    先將映像轉換成原始格式:

    sudo qemu-img convert -f qcow2 -O raw rhel-6.9.qcow2 rhel-6.9.raw
    

    確認原始映像的大小符合 1 MB, 否則將大小四捨五入為 1 MB︰

    MB=$((1024*1024))
    size=$(qemu-img info -f raw --output json "rhel-6.9.raw" | \
    gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    rounded_size=$((($size/$MB + 1)*$MB))
    sudo qemu-img resize rhel-6.9.raw $rounded_size
    

    將原始磁碟轉換成固定大小的 VHD:

    sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-6.9.raw rhel-6.9.vhd
    

    或者,qemu 版本 2.6 + 包含 force_size 選項︰

    sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-6.9.raw rhel-6.9.vhd
    

使用 KVM 的 RHEL 7

  1. 從 Red Hat 網站下載 RHEL 7 的 KVM 映像。 此程序會使用 RHEL 7 做為範例。

  2. 設定根密碼。

    產生加密的密碼,並複製命令的輸出:

    sudo openssl passwd -1 changeme
    

    使用 guestfish 設定根密碼:

    sudo  guestfish --rw -a <image-name>
    > <fs> run
    > <fs> list-filesystems
    > <fs> mount /dev/sda1 /
    > <fs> vi /etc/shadow
    > <fs> exit
    

    將根使用者的第二個欄位從 "!!" 變更為加密的密碼。

  3. 在 KVM 中從 qcow2 映像建立虛擬機器。 將磁碟類型設定為 qcow2,再將虛擬網路介面裝置模型設定為 virtio。 然後啟動虛擬機器並以 root 身分登入。

  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
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    
  6. 若要確保開機時會啟動網路服務,可執行下列命令:

    sudo systemctl enable network
    
  7. 透過執行以下命令來註冊 Red Hat 訂用帳戶,以便從 RHEL 儲存機制安裝封裝:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  8. 修改 grub 組態中的核心開機那一行,使其額外包含用於 Azure 的核心參數。 若要進行此設定,請在文字編輯器中開啟 /etc/default/grub,然後編輯 GRUB_CMDLINE_LINUX 參數。 例如:

    GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
    

    此命令也會確保所有主控台訊息都會傳送給第一個序列埠,以協助 Azure 支援團隊進行問題偵錯程序。 而且也會關閉新的 RHEL 7 對 NIC 的命名慣例。 此外,我們還建議您移除下列參數:

    rhgb quiet crashkernel=auto
    

    在雲端環境中,我們會將所有記錄傳送到序列埠,因此不適合使用圖形化和無訊息啟動。 您可以視需要保留 crashkernel 選項的設定。 請注意,此參數會減少虛擬機器中約 128 MB 或以上的可用記憶體數量,這可能會對小型虛擬機器造成問題。

  9. 完成 /etc/default/grub的編輯之後,請執行下列命令以重建 grub 組態:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  10. 將 Hyper-V 模組新增至 initramfs。

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

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    重建 initramfs:

    sudo dracut -f -v
    
  11. 解除安裝 cloud-init:

    sudo yum remove cloud-init
    
  12. 確定您已安裝 SSH 伺服器,並已設定為在開機時啟動:

    sudo systemctl enable sshd
    

    修改 /etc/ssh/sshd_config 以包含下面一行:

    PasswordAuthentication yes
    ClientAliveInterval 180
    
  13. WALinuxAgent 套件 WALinuxAgent-<version> 已推送至 Red Hat extras 儲存機制。 執行下列命令以啟用 extras 儲存機制:

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  14. 執行以下命令來安裝 Azure Linux 代理程式:

    sudo yum install WALinuxAgent
    

    啟用 waagent 服務:

    sudo systemctl enable waagent.service
    
  15. Install cloud-init Follow the steps in 'Prepare a RHEL 7 virtual machine from Hyper-V Manager', step 12, 'Install cloud-init to handle the provisioning.'

  16. 交換組態

    請勿在作業系統磁碟上建立交換空間。 Follow the steps in 'Prepare a RHEL 7 virtual machine from Hyper-V Manager', step 13, 'Swap configuration'

  17. 執行下列命令以取消註冊訂用帳戶 (如有必要):

    sudo subscription-manager unregister
    
  18. 取消佈建

    Follow the steps in 'Prepare a RHEL 7 virtual machine from Hyper-V Manager', step 15, 'Deprovision'

  19. 在 KVM 中關閉虛擬機器。

  20. 將 qcow2 映像轉換成 VHD 格式。

    注意

    qemu-img 版本 >=2.2.1 中已知的錯誤會導致 VHD 的格式不正確。 此問題已在 QEMU 2.6 中修正。 建議使用 qemu-img 2.2.0 或更舊版本,或更新至 2.6 或更新版本。 參考: https://bugs.launchpad.net/qemu/+bug/1490611

    先將映像轉換成原始格式:

    sudo qemu-img convert -f qcow2 -O raw rhel-7.4.qcow2 rhel-7.4.raw
    

    確認原始映像的大小符合 1 MB, 否則將大小四捨五入為 1 MB︰

    MB=$((1024*1024))
    size=$(qemu-img info -f raw --output json "rhel-7.4.raw" | \
    gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    rounded_size=$((($size/$MB + 1)*$MB))
    sudo qemu-img resize rhel-7.4.raw $rounded_size
    

    將原始磁碟轉換成固定大小的 VHD:

    sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-7.4.raw rhel-7.4.vhd
    

    或者,qemu 版本 2.6 + 包含 force_size 選項︰

    sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-7.4.raw rhel-7.4.vhd
    

VMware

本節說明如何從 VMware 準備 RHEL 6RHEL 7 散發版本。

必要條件

本節假設您已在 VMware 中安裝 RHEL 虛擬機器。 如需有關如何在 VMware 中安裝作業系統的詳細資訊,請參閱 VMware 客體作業系統安裝指南

  • 安裝 Linux 作業系統時,我們建議您使用標準磁碟分割而不是 LVM (這通常是許多安裝的預設設定)。 這可避免 LVM 名稱與複製的虛擬機器發生衝突,特別是為了疑難排解而需要將作業系統磁碟連結至另一部虛擬機器時。 如果願意,您可以在資料磁碟上使用 LVM 或 RAID。
  • 請勿在作業系統磁碟上設定交換磁碟分割。 您可以設定 Linux 代理程式以在暫存資源磁碟上建立交換檔。 您可以在以下步驟中找到與此相關的詳細資訊。
  • 建立虛擬硬碟時,請選取 [將虛擬磁碟儲存為單一檔案]

使用 VMware 的 RHEL 6

重要

從 2020 年 11 月 30 日起,Red Hat Enterprise Linux 6 將進入終止維護階段。 維護階段後面接著為延長生命階段。 當 Red Hat Enterprise Linux 6 從完整/維護階段轉換時,強烈建議升級至 Red Hat Enterprise Linux 7、8 或 9。 如果客戶必須留在 Red Hat Enterprise Linux 6 上,建議您新增 Red Hat Enterprise Linux 延伸生命週期支援 (ELS) 附加元件。

  1. 在 RHEL 6 中,NetworkManager 可能會對 Azure Linux 代理程式造成干擾。 執行下列命令以將此套件解除安裝:

    sudo rpm -e --nodeps NetworkManager
    
  2. 在 /etc/sysconfig/ 目錄中,建立名為 network 、且包含下列文字的檔案:

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

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  4. 移動 (或移除) udev 規則可防止產生乙太網路介面的靜態規則。 在 Azure 或 Hyper-V 中複製虛擬機器時,這些規則會造成問題:

    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
    

注意

** 使用加速網路 (AN) 時,建立的合成介面必須設定為使用 udev 規則的非受控。 這可防止 NetworkManager 將與主要介面相同的 IP 指派給它。

加以套用:

sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
# Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
# This interface is transparently bonded to the synthetic interface,
# so NetworkManager should just ignore any SRIOV interfaces.
SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION=="add", ENV{NM_UNMANAGED}="1"
EOF
  1. 若要確保開機時會啟動網路服務,可執行下列命令:

    sudo chkconfig network on
    
  2. 透過執行以下命令來註冊 Red Hat 訂用帳戶,以便從 RHEL 儲存機制安裝封裝:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  3. WALinuxAgent 套件 WALinuxAgent-<version> 已推送至 Red Hat extras 儲存機制。 執行下列命令以啟用 extras 儲存機制:

    sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
    
  4. 修改 grub 組態中的核心開機那一行,使其額外包含用於 Azure 的核心參數。 若要這樣做,請在文字編輯器中開啟 /etc/default/grub 並編輯 GRUB_CMDLINE_LINUX 參數。 例如:

    GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0"
    

    這也將確保所有主控台訊息都會傳送給第一個序列埠,以協助 Azure 支援團隊進行問題偵錯程序。 此外,我們還建議您移除下列參數:

    rhgb quiet crashkernel=auto
    

    在雲端環境中,我們會將所有記錄傳送到序列埠,因此不適合使用圖形化和無訊息啟動。 您可以視需要保留 crashkernel 選項的設定。 請注意,此參數會減少虛擬機器中約 128 MB 或以上的可用記憶體數量,這可能會對小型虛擬機器造成問題。

  5. 將 Hyper-V 模組新增至 initramfs:

    編輯 /etc/dracut.conf 檔案並新增下列內容:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    重建 initramfs:

    sudo dracut -f -v
    
  6. 確定已安裝 SSH 伺服器,並已設定為在開機時啟動 (這通常為預設值)。 修改 /etc/ssh/sshd_config 以包含下面一行:

    ClientAliveInterval 180
    
  7. 執行以下命令來安裝 Azure Linux 代理程式:

    sudo yum install WALinuxAgent
    sudo chkconfig waagent on
    
  8. 請勿在作業系統磁碟上建立交換空間。

    Azure Linux 代理程式可在虛擬機器佈建於 Azure 後,使用連結至虛擬機器的本機資源磁碟自動設定交換空間。 請注意,本機資源磁碟是暫存磁碟,可能會在虛擬機器取消佈建時清空。 在上一個步驟安裝 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.
    
  9. 執行下列命令以取消註冊訂用帳戶 (如有必要):

    sudo subscription-manager unregister
    
  10. 執行下列命令,以取消佈建虛擬機器,並準備將它佈建於 Azure 上:

    注意

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

    sudo rm -rf /var/lib/waagent/
    sudo rm -f /var/log/waagent.log
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo export HISTSIZE=0
    
  11. 關閉虛擬機器,然後將 VMDK 檔案轉換成 .vhd 檔案。

    注意

    qemu-img 版本 >=2.2.1 中已知的錯誤會導致 VHD 的格式不正確。 此問題已在 QEMU 2.6 中修正。 建議使用 qemu-img 2.2.0 或更舊版本,或更新至 2.6 或更新版本。 參考: https://bugs.launchpad.net/qemu/+bug/1490611

    先將映像轉換成原始格式:

    sudo qemu-img convert -f vmdk -O raw rhel-6.9.vmdk rhel-6.9.raw
    

    確認原始映像的大小符合 1 MB, 否則將大小四捨五入為 1 MB︰

    MB=$((1024*1024))
    size=$(qemu-img info -f raw --output json "rhel-6.9.raw" | \
    gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    rounded_size=$((($size/$MB + 1)*$MB))
    sudo qemu-img resize rhel-6.9.raw $rounded_size
    

    將原始磁碟轉換成固定大小的 VHD:

    sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-6.9.raw rhel-6.9.vhd
    

    或者,qemu 版本 2.6 + 包含 force_size 選項︰

    sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-6.9.raw rhel-6.9.vhd
    

使用 VMware 的 RHEL 7

  1. 建立或編輯 /etc/sysconfig/network 檔案,然後新增下列文字:

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

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    
  3. 若要確保開機時會啟動網路服務,可執行下列命令:

    sudo systemctl enable network
    
  4. 透過執行以下命令來註冊 Red Hat 訂用帳戶,以便從 RHEL 儲存機制安裝封裝:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  5. 修改 grub 組態中的核心開機那一行,使其額外包含用於 Azure 的核心參數。 若要執行此修改,請在文字編輯器中開啟 /etc/default/grub,然後編輯 GRUB_CMDLINE_LINUX 參數。 例如:

    GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
    

    此組態也會確保所有主控台訊息都會傳送給第一個序列埠,以協助 Azure 支援團隊進行問題偵錯程序。 也會關閉新的 RHEL 7 對 NIC 的命名慣例。 此外,我們還建議您移除下列參數:

    rhgb quiet crashkernel=auto
    

    在雲端環境中,我們會將所有記錄傳送到序列埠,因此不適合使用圖形化和無訊息啟動。 您可以視需要保留 crashkernel 選項的設定。 請注意,此參數會減少虛擬機器中約 128 MB 或以上的可用記憶體數量,這可能會對小型虛擬機器造成問題。

  6. 完成 /etc/default/grub的編輯之後,請執行下列命令以重建 grub 組態:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  7. 將 Hyper-V 模組新增至 initramfs。

    編輯 /etc/dracut.conf,新增內容:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    重建 initramfs:

    sudo dracut -f -v
    
  8. 確定您已安裝 SSH 伺服器,並已設定為在開機時啟動。 此設定通常是預設值。 修改 /etc/ssh/sshd_config 以包含下面一行:

    ClientAliveInterval 180
    
  9. WALinuxAgent 套件 WALinuxAgent-<version> 已推送至 Red Hat extras 儲存機制。 執行下列命令以啟用 extras 儲存機制:

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  10. 執行以下命令來安裝 Azure Linux 代理程式:

    sudo yum install WALinuxAgent
    sudo systemctl enable waagent.service
    
  11. Install cloud-init

    Follow the steps in 'Prepare a RHEL 7 virtual machine from Hyper-V Manager', step 12, 'Install cloud-init to handle the provisioning.'

  12. 交換組態

    請勿在作業系統磁碟上建立交換空間。 Follow the steps in 'Prepare a RHEL 7 virtual machine from Hyper-V Manager', step 13, 'Swap configuration'

  13. 如果您要取消註冊訂用帳戶,請執行下列命令:

    sudo subscription-manager unregister
    
  14. 取消佈建

    Follow the steps in 'Prepare a RHEL 7 virtual machine from Hyper-V Manager', step 15, 'Deprovision'

  15. 關閉虛擬機器,然後將 VMDK 檔案轉換成 VHD 格式。

    注意

    qemu-img 版本 >=2.2.1 中已知的錯誤會導致 VHD 的格式不正確。 此問題已在 QEMU 2.6 中修正。 建議使用 qemu-img 2.2.0 或更舊版本,或更新至 2.6 或更新版本。 參考: https://bugs.launchpad.net/qemu/+bug/1490611

    先將映像轉換成原始格式:

    sudo qemu-img convert -f vmdk -O raw rhel-7.4.vmdk rhel-7.4.raw
    

    確認原始映像的大小符合 1 MB, 否則將大小四捨五入為 1 MB︰

    MB=$((1024*1024))
    size=$(qemu-img info -f raw --output json "rhel-7.4.raw" | \
    gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    rounded_size=$((($size/$MB + 1)*$MB))
    sudo qemu-img resize rhel-7.4.raw $rounded_size
    

    將原始磁碟轉換成固定大小的 VHD:

    sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-7.4.raw rhel-7.4.vhd
    

    或者,qemu 版本 2.6 + 包含 force_size 選項︰

    sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-7.4.raw rhel-7.4.vhd
    

啟動檔案

本節說明如何使用啟動檔案從 ISO 準備 RHEL 7 散發版本。

從啟動檔案的 RHEL 7

  1. 建立包含以下內容的 kickstart 檔案,然後儲存此檔案。 如需有關 kickstart 安裝的詳細資訊,請參閱 Kickstart 安裝指南

    # Kickstart for provisioning a RHEL 7 Azure VM
    
    # System authorization information
      auth --enableshadow --passalgo=sha512
    
    # Use graphical install
    text
    
    # Don't run the Setup Agent on first boot
    firstboot --disable
    
    # Keyboard layouts
    keyboard --vckeymap=us --xlayouts='us'
    
    # System language
    lang en_US.UTF-8
    
    # Network information
    network  --bootproto=dhcp
    
    # Root password
    rootpw --plaintext "to_be_disabled"
    
    # System services
    services --enabled="sshd,waagent,NetworkManager"
    
    # System timezone
    timezone Etc/UTC --isUtc --ntpservers 0.rhel.pool.ntp.org,1.rhel.pool.ntp.org,2.rhel.pool.ntp.org,3.rhel.pool.ntp.org
    
    # Partition clearing information
    clearpart --all --initlabel
    
    # Clear the MBR
    zerombr
    
    # Disk partitioning information
    part /boot --fstype="xfs" --size=500
    part / --fstyp="xfs" --size=1 --grow --asprimary
    
    # System bootloader configuration
    bootloader --location=mbr
    
    # Firewall configuration
    firewall --disabled
    
    # Enable SELinux
    selinux --enforcing
    
    # Don't configure X
    skipx
    
    # Power down the machine after install
    poweroff
    
    %packages
    @base
    @console-internet
    chrony
    sudo
    parted
    -dracut-config-rescue
    
    %end
    
    %post --log=/var/log/anaconda/post-install.log
    
    #!/bin/bash
    
    # Register Red Hat Subscription
    subscription-manager register --username=XXX --password=XXX --auto-attach --force
    
    # Install latest repo update
    yum update -y
    
    # Enable extras repo
    subscription-manager repos --enable=rhel-7-server-extras-rpms
    
    # Install WALinuxAgent
    yum install -y WALinuxAgent
    
    # Unregister Red Hat subscription
    subscription-manager unregister
    
    # Enable waaagent at boot-up
    systemctl enable waagent
    
    # Install cloud-init
    yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
    
    # Configure waagent for cloud-init
    sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-init/g' /etc/waagent.conf
    sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf
    sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
    
    echo "Adding mounts and disk_setup to init stage"
    sed -i '/ - mounts/d' /etc/cloud/cloud.cfg
    sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg
    sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg
    sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg
    
    # Disable the root account
    usermod root -p '!!'
    
    # Configure swap using cloud-init
    echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf
    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.device-timeout=2,x-systemd.requires=cloud-init.service", "0", "0"]
    EOF
    
    # Set the cmdline
    sed -i 's/^\(GRUB_CMDLINE_LINUX\)=".*"$/\1="console=tty1 console=ttyS0 earlyprintk=ttyS0"/g' /etc/default/grub
    
    # Enable SSH keepalive
    sed -i 's/^#\(ClientAliveInterval\).*$/\1 180/g' /etc/ssh/sshd_config
    
    # Build the grub cfg
    grub2-mkconfig -o /boot/grub2/grub.cfg
    
    # Configure network
    cat << EOF > /etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    EOF
    
    # Deprovision and prepare for Azure if you are creating a generalized image
    sudo cloud-init clean --logs --seed
    sudo rm -rf /var/lib/cloud/
    sudo rm -rf /var/lib/waagent/
    sudo rm -f /var/log/waagent.log
    
    sudo waagent -force -deprovision+user
    rm -f ~/.bash_history
    export HISTSIZE=0
    
    %end
    
  2. 將 kickstart 檔案放在可存取它的安裝系統。

  3. 在 Hyper-V 管理員中建立新的虛擬機器。 在 [連線虛擬硬碟] 頁面上,選取 [稍後連接虛擬硬碟],並完成 [新增虛擬機器精靈]。

  4. 開啟虛擬機器設定:

    1. 將新的虛擬硬碟連結至虛擬機器。 請務必選取 [VHD 格式] 和 [固定大小]

    2. 將安裝 ISO 連接到 DVD 光碟機。

    3. 將 BIOS 設定成從 CD 開機。

  5. 啟動虛擬機器。 當安裝指南出現時,請按 Tab 鍵以設定開機選項。

  6. 在開機選項結尾輸入 inst.ks=<the location of the kickstart file> ,然後按 Enter鍵。

  7. 等待安裝完成。 完成後,虛擬機器將會自動關閉。 您現在可以將 Linux VHD 上傳至 Azure。

已知問題

使用非 Hyper-V Hypervisor 時,初始 RAM 磁碟未包含 Hyper-V 驅動程式

在某些情況下,Linux 安裝程式可能不會在初始 RAM 磁碟 (initrd 或 initramfs) 中包含 Hyper-V 的驅動程式,除非 Linux 偵測到自己在 Hyper-V 環境中執行。

使用不同的虛擬化系統 (即 VirtualBox、Xen 等) 來準備 Linux 映像時,您可能需要重新建置 initrd,以確保在初始 RAM 磁碟上至少有 hv_vmbus 和 hv_storvsc 核心模組可以使用。 目前至少已知在以上游 Red Hat 散發套件為基礎的系統上有此問題。

若要解決這個問題,請將 Hyper-V 模組新增至 initramfs 並加以重建︰

編輯 /etc/dracut.conf 檔案並新增下列內容:

add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "

重建 initramfs:

sudo dracut -f -v

如需詳細資訊,請參閱 重建 initramfs的相關資訊。

下一步

  • 您現在可以開始使用您的 Red Hat Enterprise Linux 虛擬硬碟在 Azure 建立新的虛擬機器。 如果您是第一次將 .vhd 檔案上傳至 Azure,請參閱從自訂磁碟建立 Linux VM
  • 如需已通過認證可執行 Red Hat Enterprise Linux 之 Hypervisor 的詳細資訊,請參閱 Red Hat 網站
  • 若要深入了解如何使用生產環境就緒的 RHEL BYOS 映像,請移至 BYOS 的文件頁面。