在 Linux VM 上使用 cloud-init 配置交换分区

注意

本文引用了 CentOS,这是一个接近生命周期结束 (EOL) 状态的 Linux 发行版。 请相应地考虑你的使用和规划。

适用于:✔️ Linux VM ✔️ 灵活规模集

本文介绍如何使用 cloud-init 在各种 Linux 分发版中配置交换分区。 在传统上,交换分区由 Linux 代理 (WALA) 根据分发版的需要进行配置。 本文档概述了在预配期间使用 cloud-init 按需生成交换分区的过程。 有关 cloud-init 如何在 Azure 以及受支持的 Linux 发行版中本机工作的详细信息,请参阅 cloud-init 概述

为基于 Ubuntu 的映像创建交换分区

在 Azure 上,Ubuntu 库映像默认不会创建交换分区。 若要在预配 VM 期间使用 cloud-init 启用交换分区配置,请参阅 Ubuntu wiki 中的 AzureSwapPartitions 文档

为基于 CentOS 的映像创建交换分区

在当前 shell 中,创建名为 cloud_init_swappart.txt 的文件并粘贴以下配置。 对于此示例,请在本地计算机中创建文件。 可使用任何想要使用的编辑器。 请确保已正确复制整个 cloud-init 文件,尤其是第一行。

#cloud-config
disk_setup:
  ephemeral0:
    table_type: gpt
    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", "0", "0"]

装载通过 nofail 选项创建,以确保即使装载未成功完成,启动过程也会继续。

在部署此映像之前,需要使用 az group create 命令创建资源组。 Azure 资源组是在其中部署和管理 Azure 资源的逻辑容器。 以下示例在“chinaeast” 位置创建名为“myResourceGroup” 的资源组。

az group create --name myResourceGroup --location chinaeast

现在,使用 az vm create 创建 VM,并通过 --custom-data cloud_init_swappart.txt 指定 cloud-init 文件,如下所示:

az vm create \
  --resource-group myResourceGroup \
  --name vmName \
  --image imageCIURN \
  --custom-data cloud_init_swappart.txt \
  --generate-ssh-keys

注意

相应地替换“myResourceGroup”、“vmName”和“imageCIURN”值。 确保选择了包含 Cloud-init 的映像。

修改正在运行的计算机

如果已预配服务器,想要修改临时存储的装入点,并且想要将磁盘的一部分配置为交换空间,请按以下步骤操作。

使用以下内容在 /etc/cloud/cloud.cfg.d 目录中创建名为 00-azure-swap.cfg 的 cloud-init 配置文件:

#cloud-config
disk_setup:
  ephemeral0:
    table_type: gpt
    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", "0", "0"]

接下来,在 /etc/systemd/system.conf 文件中追加一行,包含以下内容:

DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"

注意

文件的名称是完全任意的,可以将其替换为你偏好的任何特定名称,它只需要以 .cfg 后缀,并确保反映 CLOUD_CFG 参数行中的更改。

完成更改后,需要解除分配或重新部署计算机才能使更改生效。

验证是否已创建交换分区

通过 SSH 连接到 VM 的公共 IP 地址显示在先前命令的输出中。 按如下所示输入自己的“user”和“publicIpAddress”:

ssh <user>@<publicIpAddress>

通过 SSH 连接到 VM 后,请验证是否已创建交换分区

sudo swapon -s

此命令的输出应如下所示:

Filename                Type        Size    Used    Priority
/dev/sdb2  partition   2494440 0   -1

注意

如果在现有的 Azure 映像中配置了交换分区,而你想要更改新映像的交换分区配置,则应删除现有的交换分区。 有关更多详细信息,请参阅通过 cloud-init 自定义要进行预配的映像

后续步骤

有关更多配置更改的 cloud-init 示例,请参阅以下内容: