Azure Linux VM に cloud-init を使用して SWAP ファイルを作成する際に失敗する問題と対処法

Azure上に作成したRed Hat Enterprise Linux(以下、RHEL)にcloud-init を使用して SWAP ファイルを作成しようとしたところ、設定してもSWAPが作成されないという問題が発生しました。

調査したところ、原因と対処法が分かったので本記事でまとめます。

前提

今回の環境は以下の通りです。

  • OS:RHEL 9.6
  • 仮想マシンサイズ:Standard B2s
  • 接続方法:Azure Bastion(Webブラウザ経由)

また、su -によるrootへの切り替えを許可しておらず、管理権限が必要な操作はsudoを使う必要があります。

SWAPファイルの作成方法

今回、SWAPファイルは、Microsoft Learnの下記情報の中の、「オプション 2: cloud-init を使用してリソース ディスク パスの下に SWAP パーティションを作成する」に沿って行いました。

※ 本記事では設定の詳細は割愛します。

learn.microsoft.com

ただし、Microsoft Learnの情報ではsystem.confへの追記や00-azure-swap.cfgの作成をsudo echosudo catで行っているのですが、その方法ではPermission Errorになってしまったため、今回はsudo viにて追記や作成を行いました。

発生した問題

Microsoft Learnの情報通りに設定後、一度仮想マシンを停止して割り当て停止にして再度起動しましたが、SWAPファイルが作成されていません。freeコマンドでもlsblkコマンドでもSWAPを確認できませんでした。

sudo cloud-init statusを実行すると、下記の様なエラーが出力されます。

2025-07-16 00:28:49,620 - util.py[WARNING]: Failed loading yaml blob. Invalid format at line 9 column 19: "mapping values are not allowed here
  in "<unicode string>", line 9, column 19:
            filesystem: ext4
                      ^"
status: done

原因と対処法

00-azure-swap.cfgに記載する内容をAzure Bastion経由で貼り付けた際に意図しないスペースが入ってしまい、YAMLファイルとしての構造が崩れてしまう事が原因でした。

クリップボードから貼り付けた後で、不要なスペースを削除する事で問題は解決しました。

※ 修正後、改めて仮想マシンを停止して起動しなおす必要があります

なお、試行錯誤している中で、スペースの数や位置があっているように見えても同様の問題が発生するケースがありました。その際も、viでスペースを一度削除して入れなおすことで改善しました。

注意点

今回利用したMicrosoft Learnの00-azure-swap.cfgの内容は、仮想マシンにローカル一時ディスクがある事が前提となっています。

仮想マシンのシリーズによってはローカル一時ディスクがないものもあり、その場合は本記事の対処を行ってもSWAPファイルは作成できません。

おわりに

今回のケースはYAMLファイルを扱い慣れていればすぐ気づいたのかもしれませんが、普段あまり触っておらず原因特定に時間がかかってしまいました。

発生するケースは限定的かもしれませんが、同様の現象で困っている方の参考になれば幸いです。

執筆担当者プロフィール
舟越 匠

舟越 匠(日本ビジネスシステムズ株式会社)

人材開発部に所属。社内向けの技術研修をしつつ、JBS Tech Blog編集長を兼任。Power AutomateやLogic Appsが好きで、キーマンズネットPower Automateの記事を書いたり、YouTubeのTechLIVE by ITmediaチャンネルPower Automateの動画に出演したりもしています。好きなアーティストはZABADAKとSound Horizon。

担当記事一覧