你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
为 Azure 准备基于 Red Hat 的虚拟机
适用于:✔️ Linux VM ✔️ 灵活规模集 ✔️ 统一规模集
本文介绍如何准备 Red Hat Enterprise Linux (RHEL) 虚拟机 (VM),以供在 Azure 中使用。 本文介绍的 RHEL 版本为 6.X、7.X 和 8.X。 本文所述的用于准备工作的虚拟机监控程序为 Hyper-V、基于内核的 VM (KVM) 和 VMware。
有关参与 Red Hat 云访问计划的资格要求的详细信息,请参阅 Red Hat Cloud Access 网站和在 Azure 上运行 RHEL。 有关自动构建 RHEL 映像的方法,请参阅 Azure 映像生成器。
注意
请注意已终止生命周期 (EOL) 且不再受 Red Hat 支持的版本。 在合理的业务努力基础上,支持处于或超出 EOL 的上传映像。 有关详细信息,请参阅 Red Hat 产品生命周期。
Hyper-V 管理器
该部分介绍如何使用 Hyper-V 管理器准备 RHEL 6、RHEL 7 或 RHEL 8 VM。
先决条件
本部分假定已经从 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 引导)VM。
- VHD 允许的最大大小为 1,023 GB。
- 必须在内核中启用 vfat 内核模块。
- 支持逻辑卷管理器 (LVM),该管理器可以在 Azure VM 中的 OS 磁盘或数据磁盘上使用。 通常建议在 OS 磁盘而不是 LVM 上使用标准分区。 这种做法可以避免 LVM 名称与克隆的 VM 冲突,尤其是当需要将操作系统磁盘附加到另一台相同的 VM 进行故障排除时。 有关详细信息,请参阅 LVM 和 RAID 文档。
- 对装载通用磁盘格式 (UDF) 文件系统的内核支持是必需的。 在 Azure 上首次启动时,附加到来宾的 UDF 格式媒体会将预配配置传递给 Linux VM。 Azure Linux 代理必须能够装载 UDF 文件系统才能读取其配置和预配 VM。 如果不执行此步骤,预配会失败。
- 不要在操作系统磁盘上配置交换分区。 有关详细信息,请阅读以下步骤。
- Azure 上所有 VHD 的虚拟大小必须已按 1 MB 对齐。 从原始磁盘转换为 VHD 时,必须确保在转换前的原始磁盘大小是 1 MB 的倍数。 有关详细信息,请阅读以下步骤。 另请参阅 Linux 安装说明。
注意
Cloud-init >= 21.2 会删除 UDF 要求。 但如果未启用 UDF 模块,CD-ROM 将不会在预配期间装载,这会阻止应用自定义数据。 解决方法是使用用户数据应用自定义数据。 与自定义数据不同,用户数据不会加密。 有关详细信息,请参阅用户数据格式。
RHEL 6(使用 Hyper-V 管理器)
重要
2020 年 11 月 30 日,RHEL 6 已结束维护阶段。 维护阶段之后是扩展生命阶段。 由于 RHEL 6 结束了完整/维护阶段,因此强烈建议升级到 RHEL 7、8 或 9。 如果必须停留在 RHEL 6 上,建议添加 RHEL 扩展生命周期支持附加产品。
在 Hyper-V 管理器中选择 VM。
选择“连接”打开 VM 的控制台窗口。
在 RHEL 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 时,这些规则会引发问题:
警告
许多“v5”和更新的 VM 大小都需要加速网络。 如果未启用,NetworkManager 会将相同的 IP 地址分配给所有虚拟函数接口。 若要防止重复的 IP 地址,请确保在迁移到较新的大小时包含此 udev 规则。
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
注意
使用加速网络时,创建的合成接口必须使用 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!="remove", ENV{NM_UNMANAGED}="1" EOF
确保网络服务在引导时启动:
sudo chkconfig network on
注册 Red Hat 订阅,以启用来自 RHEL 存储库中的包的安装:
sudo subscription-manager register --auto-attach --username=XXX --password=XXX
WALinuxAgent 包
WALinuxAgent-<version>
已推送到 Red Hat extras 存储库。 启用额外的存储库:sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
在 grub 配置中修改内核引导行,以包含 Azure 的其他内核参数。 要执行此修改,请在文本编辑器中打开
/boot/grub/menu.lst
。 确保默认内核包含以下参数:console=ttyS0 earlyprintk=ttyS0
此操作还可确保所有控制台消息都发送到第一个串行端口,从而可以协助 Azure 支持人员调试问题。
我们还建议删除以下参数:
rhgb quiet crashkernel=auto
图形界面式引导和安静引导在云环境中不适用,在云环境中,需要将所有日志都发送到串行端口。 如果需要,可以保留配置的
crashkernel
选项。 此参数可以将 VM 中的可用内存量减少 128 MB 或更多。 在遇到较小的 VM 大小时,此配置可能会有问题。请确保安全外壳 (SSH) 服务器已安装且已配置为在引导时启动(默认采用此配置)。 修改
/etc/ssh/sshd_config
以包含以下行:ClientAliveInterval 180
安装 Azure Linux 代理:
sudo yum install WALinuxAgent sudo chkconfig waagent on
如果尚未在步骤 3 中移除
NetworkManager
包和NetworkManager-gnome
包,则安装 WALinuxAgent 包会移除它们。不要在操作系统磁盘上创建交换空间。
Azure Linux 代理可使用在 Azure 上预配 VM 后附加到 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.
取消注册订阅(如有必要):
sudo subscription-manager unregister
取消对 VM 的预配并且对其进行准备以便在 Azure 上进行预配:
注意
如果要迁移特定的 VM,但不希望创建通用化映像,请跳过取消预配步骤。
sudo waagent -force -deprovision sudo export HISTSIZE=0
在 Hyper-V 管理器中选择“操作”>“关闭”。 Linux VHD 现已准备好上传到 Azure。
RHEL 7(使用 Hyper-V 管理器)
在 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 PERSISTENT_DHCLIENT=yes NM_CONTROLLED=yes
注意
使用加速网络时,创建的合成接口必须使用 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!="remove", ENV{NM_UNMANAGED}="1" EOF
确保网络服务在引导时启动:
sudo systemctl enable network
注册 Red Hat 订阅,以启用来自 RHEL 存储库中的包的安装:
sudo subscription-manager register --auto-attach --username=XXX --password=XXX
在 grub 配置中修改内核引导行,以包含 Azure 的其他内核参数。 若要执行此修改,请在文本编辑器中打开
/etc/default/grub
并编辑GRUB_CMDLINE_LINUX
参数。 例如:GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0 net.ifnames=0" GRUB_TERMINAL_OUTPUT="serial console" GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1" ENABLE_BLSCFG=true
注意
如果
/etc/default/grub
中存在 ENABLE_BLSCFG=false,而不是ENABLE_BLSCFG=true
,则 grubedit 或 gubby 等依赖于启动加载程序规范 (BLS) 来管理启动条目和配置的工具在 RHEL 8 和 9 中可能无法正常工作。 如果ENABLE_BLSCFG
不存在,则默认行为是false
。此修改还可确保所有控制台消息都发送到第一个串行端口并启用与串行控制台的交互,从而可以协助 Azure 支持人员调试问题。 此配置还会禁用网络接口卡 (NIC) 的新 RHEL 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/redhat/grub.cfg
。请确保 SSH 服务器已安装且已配置为在引导时启动(默认采用此配置)。 修改
/etc/ssh/sshd_config
以包含以下行:ClientAliveInterval 180
WALinuxAgent 包
WALinuxAgent-<version>
已推送到 Red Hat extras 存储库。 启用额外的存储库:sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
安装 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
配置
cloud-init
来处理预配:为
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
注意
如果要迁移特定的 VM,但不希望创建通用化映像,请在
/etc/waagent.conf
配置上设置Provisioning.Agent=disabled
。配置装载:
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
配置 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
如果配置了现有交换文件,请将其移除:
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
配置
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
交换配置:
不要在操作系统磁盘上创建交换空间。
以前,Azure Linux 代理用于通过在 Azure 上预配 VM 后附加到 VM 的本地资源磁盘自动配置交换空间。 此操作现在由
cloud-init
处理。 你不能使用 Linux 代理来格式化资源磁盘或创建交换文件。 在/etc/waagent.conf
中适当地修改以下参数:ResourceDisk.Format=n ResourceDisk.EnableSwap=n
如果要装载、格式化和创建交换文件,可以:
请在每次通过自定义数据创建 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
如果想要取消注册订阅,运行以下命令:
sudo subscription-manager unregister
取消对 VM 的预配并且对其进行准备以便在 Azure 上进行预配:
注意
如果要迁移特定的 VM,但不希望创建通用化映像,请跳过取消预配步骤。 运行命令
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
在 Hyper-V 管理器中选择“操作”>“关闭”。 Linux VHD 现已准备好上传到 Azure。
RHEL 8+(使用 Hyper-V 管理器)
在 Hyper-V 管理器中选择 VM。
选择“连接”打开 VM 的控制台窗口。
确保网络管理器服务在引导时启动:
sudo systemctl enable NetworkManager.service
将网络接口配置为在引导时自动启动,并使用动态主机配置协议:
sudo nmcli con mod eth0 connection.autoconnect yes ipv4.method auto
注意
使用加速网络时,创建的合成接口必须使用 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!="remove", ENV{NM_UNMANAGED}="1" EOF
注册 Red Hat 订阅,以启用来自 RHEL 存储库中的包的安装:
sudo subscription-manager register --auto-attach --username=XXX --password=XXX
在 grub 配置中修改内核引导行,使其包含 Azure 的其他内核参数并启用串行控制台。
删除当前的 GRUB 参数:
sudo grub2-editenv - unset kernelopts
在文本编辑器中编辑
/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 的新命名约定。
建议同时移除以下参数:
rhgb quiet crashkernel=auto
图形界面式引导和安静引导在云环境中不适用,在云环境中,需要将所有日志都发送到串行端口。 如果需要,可以保留配置的
crashkernel
选项。 此参数可将 VM 中的可用内存量减少 128 MB 或更多,当 VM 较小时,这可能会造成问题。完成
/etc/default/grub
编辑后,运行以下命令以重新生成 grub 配置:sudo grub2-mkconfig -o /boot/grub2/grub.cfg
对于启用了 UEFI 的 VM,请运行以下命令:
sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
请确保 SSH 服务器已安装且已配置为在引导时启动(默认采用此配置)。 修改
/etc/ssh/sshd_config
以包含以下行:ClientAliveInterval 180
安装 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
配置
cloud-init
来处理预配:为
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
注意
如果要迁移特定的 VM,但不希望创建通用化映像,请在
/etc/waagent.conf
配置上设置Provisioning.Agent=disabled
。配置装载:
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
配置 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
如果配置了现有交换文件,请将其移除:
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
配置
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
交换配置:
不要在操作系统磁盘上创建交换空间。
以前,Azure Linux 代理用于通过在 Azure 上预配 VM 后附加到 VM 的本地资源磁盘自动配置交换空间。 此操作现在由
cloud-init
处理。 不得使用 Linux 代理来格式化资源磁盘以创建交换文件。 在/etc/waagent.conf
中适当地修改以下参数:ResourceDisk.Format=n ResourceDisk.EnableSwap=n
请在每次通过自定义数据创建 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
如果想要取消注册订阅,运行以下命令:
sudo subscription-manager unregister
运行以下命令可取消对 VM 的预配并且对其进行准备以便在 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
注意
如果要迁移特定的 VM,但不希望创建通用化映像,请跳过取消预配步骤。 运行命令
waagent -force -deprovision+user
会使源计算机不可用。 此步骤仅用于创建通用映像。在 Hyper-V 管理器中选择“操作”>“关闭”。 Linux VHD 现已准备好上传到 Azure。
KVM
本部分介绍如何使用 KVM 准备要上传到 Azure 的 RHEL 6 或 RHEL 7 发行版。
RHEL 6(使用 KVM)
重要
2020 年 11 月 30 日,RHEL 6 已结束维护阶段。 维护阶段之后是扩展生命阶段。 由于 RHEL 6 结束了完整/维护阶段,因此强烈建议升级到 RHEL 7、8 或 9。 如果必须停留在 RHEL 6 上,建议添加 RHEL 扩展生命周期支持附加产品。
从 Red Hat 网站上下载 RHEL 6 的 KVM 映像。
设置 root 密码。
生成加密密码,并复制命令的输出:
sudo openssl passwd -1 changeme
使用 guestfish 设置 root 密码:
sudo guestfish --rw -a <image-name> > <fs> run > <fs> list-filesystems > <fs> mount /dev/sda1 / > <fs> vi /etc/shadow > <fs> exit
将根用户的第二个字段从
!!
更改为加密密码。从 qcow2 映像创建 KVM 中的 VM。 将磁盘类型设置为 qcow2,将虚拟网络接口设备型号设置为 virtio。 然后启动 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
移动(或删除)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
注意
使用加速网络时,创建的合成接口必须使用 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!="remove", ENV{NM_UNMANAGED}="1" EOF
确保网络服务在引导时启动:
sudo chkconfig network on
注册 Red Hat 订阅,以启用来自 RHEL 存储库中的包的安装:
sudo subscription-manager register --auto-attach --username=XXX --password=XXX
在 grub 配置中修改内核引导行,以包含 Azure 的其他内核参数。 要执行此配置,请在文本编辑器中打开
/boot/grub/menu.lst
。 确保默认内核包含以下参数:console=ttyS0 earlyprintk=ttyS0
此步骤还可确保所有控制台消息都发送到第一个串行端口,从而可以协助 Azure 支持人员调试问题。
我们还建议删除以下参数:
rhgb quiet crashkernel=auto
图形界面式引导和安静引导在云环境中不适用,在云环境中,需要将所有日志都发送到串行端口。 如果需要,可以保留配置的
crashkernel
选项。 此参数可将 VM 中的可用内存量减少 128 MB 或更多,当 VM 较小时,这可能会造成问题。将 Hyper-V 模块添加到 initramfs 中:
编辑
/etc/dracut.conf
并添加以下内容:add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
重新生成 initramfs:
sudo dracut -f -v
卸载
cloud-init
:sudo yum remove cloud-init
确保已安装 SSH 服务器且已将其配置为在引导时启动。
sudo chkconfig sshd on
修改
/etc/ssh/sshd_config
以包含以下行:PasswordAuthentication yes ClientAliveInterval 180
WALinuxAgent 包
WALinuxAgent-<version>
已推送到 Red Hat extras 存储库。 启用额外的存储库:sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
安装 Azure Linux 代理:
sudo yum install WALinuxAgent sudo chkconfig waagent on
Azure Linux 代理可使用在 Azure 上预配 VM 后附加到 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.
取消注册订阅(如有必要):
sudo subscription-manager unregister
运行以下命令可取消对 VM 的预配并且对其进行准备以便在 Azure 上进行预配。
注意
如果要迁移特定的 VM,但不希望创建通用化映像,请跳过取消预配步骤。
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
关闭 KVM 中的 VM。
将 qcow2 映像转换为 VHD 格式。
注意
2.2.1 和更高版本的 qemu-img 中有一个已知 bug,会导致 VHD 格式不正确。 QEMU 2.6 中已修复此问题。 建议使用 qemu-img 2.2.0 或更低版本,或者更新到 2.6 或更高版本。 有关详细信息,请参阅此网站。
首先将此映像转换为原始格式:
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
RHEL 7(使用 KVM)
从 Red Hat 网站上下载 RHEL 7 的 KVM 映像。 此过程以 RHEL 7 为例。
设置 root 密码。
生成加密密码,并复制命令的输出:
sudo openssl passwd -1 changeme
使用 guestfish 设置 root 密码:
sudo guestfish --rw -a <image-name> > <fs> run > <fs> list-filesystems > <fs> mount /dev/sda1 / > <fs> vi /etc/shadow > <fs> exit
将根用户的第二个字段从
!!
更改为加密密码。从 qcow2 映像创建 KVM 中的 VM。 将磁盘类型设置为 qcow2,将虚拟网络接口设备型号设置为 virtio。 然后启动 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 PERSISTENT_DHCLIENT=yes NM_CONTROLLED=yes
注意
使用加速网络时,创建的合成接口必须使用 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!="remove", ENV{NM_UNMANAGED}="1" EOF
确保网络服务在引导时启动:
sudo systemctl enable network
注册 Red Hat 订阅,以启用来自 RHEL 存储库中的包的安装:
sudo subscription-manager register --auto-attach --username=XXX --password=XXX
在 grub 配置中修改内核引导行,以包含 Azure 的其他内核参数。 若要执行此配置,请在文本编辑器中打开
/etc/default/grub
并编辑GRUB_CMDLINE_LINUX
参数。 例如:GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
此命令还会确保所有控制台消息都发送到第一个串行端口,从而可以协助 Azure 支持人员调试问题。 此命令还会关闭 NIC 的新 RHEL 7 命名约定。 我们还建议删除以下参数:
rhgb quiet crashkernel=auto
图形界面式引导和安静引导在云环境中不适用,在云环境中,需要将所有日志都发送到串行端口。 如果需要,可以保留配置的
crashkernel
选项。 此参数可将 VM 中的可用内存量减少 128 MB 或更多,当 VM 较小时,这可能会造成问题。完成
/etc/default/grub
编辑后,运行以下命令以重新生成 grub 配置:sudo grub2-mkconfig -o /boot/grub2/grub.cfg
将 Hyper-V 模块添加到 initramfs 中。
编辑
/etc/dracut.conf
并添加以下内容:add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
重新生成 initramfs:
sudo dracut -f -v
卸载
cloud-init
:sudo yum remove cloud-init
确保已安装 SSH 服务器且已将其配置为在引导时启动。
sudo systemctl enable sshd
修改
/etc/ssh/sshd_config
以包含以下行:PasswordAuthentication yes ClientAliveInterval 180
WALinuxAgent 包
WALinuxAgent-<version>
已推送到 Red Hat extras 存储库。 启用额外的存储库:sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
安装 Azure Linux 代理:
sudo yum install WALinuxAgent
启用
waagent
服务:sudo systemctl enable waagent.service
安装
cloud-init
。执行“从 Hyper-V 管理器准备 RHEL 7 VM”中的步骤 12“安装
cloud-init
来处理预配”。交换配置:
- 不要在操作系统磁盘上创建交换空间。
- 执行“从 Hyper-V 管理器准备 RHEL 7 VM”中的步骤 13“交换配置”。
取消注册订阅(如有必要):
sudo subscription-manager unregister
通过执行“从 Hyper-V 管理器准备 RHEL 7 VM”中的步骤 15“取消预配”来取消预配。
关闭 KVM 中的 VM。
将 qcow2 映像转换为 VHD 格式。
注意
1.1.1 和更高版本的 qemu-img 中有一个已知 bug,会导致 VHD 格式不正确。 QEMU 1.6 中已修复此问题。 建议使用 qemu-img 1.1.0 或更低版本,或者更新到 1.6 或更高版本。 有关详细信息,请参阅此网站。
首先将此映像转换为原始格式:
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 版本 1.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 6 或 RHEL 7 发行版。
先决条件
本部分假设已在 VMware 中安装了 RHEL VM。 有关如何在 VMware 中安装操作系统的信息,请参阅 VMware 来宾操作系统安装指南。
- 在安装 Linux 操作系统时,建议使用标准分区而不是 LVM,这通常是许多安装的默认设置。 使用分区可避免 LVM 与克隆 VM 发生名称冲突,特别是在操作系统磁盘需要连接到另一台 VM 以进行故障排除的情况下。 如果需要,可以在数据磁盘上使用 LVM 或 RAID。
- 不要在操作系统磁盘上配置交换分区。 可将 Linux 代理配置为在临时资源磁盘上创建交换文件。 有关详细信息,请阅读以下步骤。
- 创建 VHD 时,选择“将虚拟磁盘存储为单个文件”。
RHEL 6(使用 VMware)
重要
2020 年 11 月 30 日,RHEL 6 已结束维护阶段。 维护阶段之后是扩展生命阶段。 由于 RHEL 6 结束了完整/维护阶段,因此强烈建议升级到 RHEL 7、8 或 9。 如果必须停留在 RHEL 6 上,建议添加 RHEL 扩展生命周期支持附加产品。
在 RHEL 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
注意
使用加速网络时,创建的合成接口必须使用 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!="remove", ENV{NM_UNMANAGED}="1" EOF
确保网络服务在引导时启动:
sudo chkconfig network on
注册 Red Hat 订阅,以启用来自 RHEL 存储库中的包的安装:
sudo subscription-manager register --auto-attach --username=XXX --password=XXX
WALinuxAgent 包
WALinuxAgent-<version>
已推送到 Red Hat extras 存储库。 启用额外的存储库:sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
在 grub 配置中修改内核引导行,以包含 Azure 的其他内核参数。 若要执行此步骤,请在文本编辑器中打开
/etc/default/grub
并编辑GRUB_CMDLINE_LINUX
参数。 例如:GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0"
此步骤还可确保所有控制台消息都发送到第一个串行端口,从而可以协助 Azure 支持人员调试问题。 我们还建议删除以下参数:
rhgb quiet crashkernel=auto
图形界面式引导和安静引导在云环境中不适用,在云环境中,需要将所有日志都发送到串行端口。 如果需要,可以保留配置的
crashkernel
选项。 此参数可将 VM 中的可用内存量减少 128 MB 或更多,当 VM 较小时,这可能会造成问题。将 Hyper-V 模块添加到 initramfs 中:
编辑
/etc/dracut.conf
并添加以下内容:add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
重新生成 initramfs:
sudo dracut -f -v
请确保 SSH 服务器已安装且已配置为在引导时启动(默认采用此配置)。 修改
/etc/ssh/sshd_config
以包含以下行:ClientAliveInterval 180
安装 Azure Linux 代理:
sudo yum install WALinuxAgent sudo chkconfig waagent on
不要在操作系统磁盘上创建交换空间。
Azure Linux 代理可使用在 Azure 上预配 VM 后附加到 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.
取消注册订阅(如有必要):
sudo subscription-manager unregister
运行以下命令可取消对 VM 的预配并且对其进行准备以便在 Azure 上进行预配:
注意
如果要迁移特定的 VM,但不希望创建通用化映像,请跳过取消预配步骤。
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
关闭 VM,并将 VMDK 文件转换为 .vhd 文件。
注意
2.2.1 和更高版本的 qemu-img 中有一个已知 bug,会导致 VHD 格式不正确。 QEMU 2.6 中已修复此问题。 建议使用 qemu-img 2.2.0 或更低版本,或者更新到 2.6 或更高版本。 有关详细信息,请参阅此网站。
首先将此映像转换为原始格式:
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
RHEL 7(使用 VMware)
创建或编辑
/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 PERSISTENT_DHCLIENT=yes NM_CONTROLLED=yes
注意
使用加速网络时,创建的合成接口必须使用 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!="remove", ENV{NM_UNMANAGED}="1" EOF
确保网络服务在引导时启动:
sudo systemctl enable network
注册 Red Hat 订阅,以启用来自 RHEL 存储库中的包的安装:
sudo subscription-manager register --auto-attach --username=XXX --password=XXX
在 grub 配置中修改内核引导行,以包含 Azure 的其他内核参数。 若要执行此修改,请在文本编辑器中打开
/etc/default/grub
并编辑GRUB_CMDLINE_LINUX
参数。 例如:GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
此配置还会确保所有控制台消息都发送到第一个串行端口,从而可以协助 Azure 支持人员调试问题。 此外,还会关闭 NIC 的新 RHEL 7 命名约定。 除此之外,建议删除以下参数:
rhgb quiet crashkernel=auto
图形界面式引导和安静引导在云环境中不适用,在云环境中,需要将所有日志都发送到串行端口。 如果需要,可以保留配置的
crashkernel
选项。 此参数可将 VM 中的可用内存量减少 128 MB 或更多,当 VM 较小时,这可能会造成问题。完成
/etc/default/grub
编辑后,运行以下命令以重新生成 grub 配置:sudo grub2-mkconfig -o /boot/grub2/grub.cfg
将 Hyper-V 模块添加到 initramfs 中:
编辑
/etc/dracut.conf
,添加内容:add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
重新生成 initramfs:
sudo dracut -f -v
请确保已安装 SSH 服务器且将其配置为在引导时启动。 此设置通常是默认设置。 修改
/etc/ssh/sshd_config
以包含以下行:ClientAliveInterval 180
WALinuxAgent 包
WALinuxAgent-<version>
已推送到 Red Hat extras 存储库。 启用额外的存储库:sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
安装 Azure Linux 代理:
sudo yum install WALinuxAgent sudo systemctl enable waagent.service
安装
cloud-init
:执行“从 Hyper-V 管理器准备 RHEL 7 VM”中的步骤 12“安装
cloud-init
来处理预配”。交换配置:
- 不要在操作系统磁盘上创建交换空间。
- 执行“从 Hyper-V 管理器准备 RHEL 7 VM”中的步骤 13“交换配置”。
如果想要取消注册订阅,运行以下命令:
sudo subscription-manager unregister
通过执行“从 Hyper-V 管理器准备 RHEL 7 VM”中的步骤 15“取消预配”来取消预配。
关闭 VM,并将 VMDK 文件转换为 VHD 格式。
注意
2.2.1 和更高版本的 qemu-img 中有一个已知 bug,会导致 VHD 格式不正确。 QEMU 2.6 中已修复此问题。 建议使用 qemu-img 2.2.0 或更低版本,或者更新到 2.6 或更高版本。 有关详细信息,请参阅此网站。
首先将此映像转换为原始格式:
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
Kickstart 文件
本部分介绍如何使用 kickstart 文件从 ISO 准备 RHEL 7 发行版。
RHEL 7(使用 kickstart 文件)
创建包括以下内容的 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 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!="remove", ENV{NM_UNMANAGED}="1" 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
将 kickstart 文件放在安装系统可以访问的位置。
在 Hyper-V 管理器中,创建新的 VM。 在“连接虚拟硬盘”页上,选择“稍后附加虚拟硬盘”,并完成“新建虚拟机”向导。
打开 VM 设置:
将新 VHD 附加到 VM。 请务必选择“VHD 格式”和“固定大小” 。
将安装 ISO 附加到 DVD 光驱。
将 BIOS 设置为从 CD 启动。
启动 VM。 当安装指南出现时,请选择 Tab 键来配置启动选项。
在启动选项的末尾输入
inst.ks=<the location of the kickstart file>
,并选择 Enter 键。等待安装完成。 完成后,VM 自动关闭。 现在,准备将 Linux VHD 上传到 Azure。
已知问题
以下问题是已知的。
使用非 Hyper-V 虚拟机监控程序时,初始 RAM 磁盘未包含 Hyper-V 驱动程序
在某些情况下,Linux 安装程序可能无法在初始 RAM 磁盘(initrd 或 initramfs)中包含 Hyper-V 驱动程序,除非 Linux 检测到它正在 Hyper-V 环境中运行。
使用不同虚拟化系统(如 VirtualBox 或 Xen)来准备 Linux 映像时,可能需要重新生成 initrd,以确保至少 hv_vmbus
和 hv_storvsc
内核模块可在初始 RAM 磁盘上使用。 至少在基于上游 Red Hat 分发的系统上这是一个已知问题。
要解决此问题,请将 Hyper-V 模块添加到 initramfs 并进行重新生成:
编辑 /etc/dracut.conf
并添加以下内容:
add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
重新生成 initramfs:
sudo dracut -f -v
有关详细信息,请参阅重新生成 initramfs。
相关内容
- 现在可以使用 RHEL VHD 在 Azure 中创建新的 VM 了。 如果是首次将 .vhd 文件上传到 Azure,请参阅从自定义磁盘创建 Linux VM。
- 有关经认证可运行 RHEL 的虚拟机监控程序的详细信息,请参阅 Red Hat 网站。
- 若要详细了解如何使用生产就绪的 RHEL BYOS 映像,请查看自带订阅的文档页面。