次の方法で共有


cloud-init を使用して Linux VM 上のスワップ パーティションを構成する

適用対象: ✔️ Linux VM ✔️ フレキシブルなスケール セット

この記事では、cloud-init を使用してさまざまな Linux ディストリビューションのスワップ パーティションを構成する方法を示します。 従来、スワップ パーティションはそれを必要とするディストリビューションに基づいて Linux エージェント (WALA) によって構成されました。 このドキュメントでは、プロビジョニング時に cloud-init を使用してスワップ パーティションをオンデマンドで構築するプロセスについて説明します。 cloud-init が Azure およびサポートされている Linux ディストリビューションでネイティブに動作する方法の詳細については、cloud-init の概要に関するページをご覧ください

Ubuntu ベースのイメージ用のスワップ パーティションを作成する

Azure での既定動作として、Ubuntu ギャラリー イメージはスワップ パーティションを作成しません。 cloud-init を使用して VM のプロビジョニング中にスワップ パーティション構成を有効にするには、Ubuntu wiki 上の AzureSwapPartitions に関するドキュメントをご覧ください。

RHEL ベースのイメージ用のスワップ パーティションを作成する

現在のシェルで、cloud_init_swappart.txt という名前のファイルを作成し、次の構成を貼り付けます。 この例では、ローカル コンピューター上にない Cloud Shell でファイルを作成します。 任意のエディターを使用することができます。 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 リソースのデプロイと管理に使用する論理コンテナーです。 次の例では、myResourceGroup という名前のリソース グループを eastus に作成します。

az group create --name myResourceGroup --location eastus

ここで、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

myResourceGroupvmNameimageCIURN の値を適宜置き換えます。 cloud-init を含むイメージが選択されていることを確認してください。

既に実行中のマシンを変更する

サーバーを既にプロビジョニングしていて、エフェメラル ストレージのマウント ポイントを変更し、ディスクの一部をスワップ領域として構成したい場合は、以下の手順を使用します。

00-azure-swap.cfg ディレクトリ内に次の内容で /etc/cloud/cloud.cfg.d という名前の 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 パラメーター行の変更も反映するようにしてください。

変更が完了したら、変更を有効にするために、マシンを割り当て解除するか、再デプロイする必要があります。

スワップ パーティションが作成されたことを確認する

前述のコマンドからの出力に示すように、VM のパブリック IP アドレスに SSH 接続します。 実際の userpublicIpAddress を次のように入力します。

ssh <user>@<publicIpAddress>

VM に SSH 接続したら、スワップ パーティションが作成されたかどうかを確認します

sudo swapon -s

このコマンドからの出力は、次のようになります。

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

スワップ パーティションが構成された既存の Azure イメージがあり、新しいイメージのスワップ パーティション構成を変更する場合は、既存のスワップ パーティションを削除する必要があります。 詳しくは、cloud-init でイメージをカスタマイズしてプロビジョニングする方法に関するドキュメントをご覧ください。

次のステップ

構成変更の cloud-init の例については、以下を参照してください。