Condividi tramite


Linux 仮想マシンでのスワップ領域設定

最近、「Azure 上で Linux 使ってるんだけどちょっと教えて」的なお問い合わせをいただくことが増えてきました。あちらとこちらの架け橋目指す、相互運用ウェルカムな私にはとても嬉しい状況です。SFU 3.5 で苦労していた頃には、まさかこんな時代が来ようとは想像しておりませんでした…

さて。やや唐突に本題へと入りますが、現状 Azure 仮想マシンで標準提供されている Linux イメージから VM を作ると、

スワップ領域がありません

ほらこの通り、

# cat /proc/swaps
Filename Type Size Used Priority
#

こうなっていることを理解した上で使う分には問題ありませんが、予想外にメモリ負荷が高まった場合の安全ネットとして、スワップ領域を確保しておくことが適切な状況もあろうかと思います。そこで、この記事ではスワップ領域の有効化方法をお伝えします。

どこにつくる?

ゲスト OS の種類を問わず、Windows Azure 仮想マシンのローカルディスクは次の3種類に分類できます。

  • OS ディスク
    • Windows なら C ドライブ
    • Linux では /dev/sda
  • 作業用ディスク
    • BLOB ストレージに永続化されない、Hyper-V ホストローカルなディスク。別のホストに VM が移動すると、当然中身は空っぽになります。
    • Windows なら D ドライブ
    • Linux では /dev/sdb
  • データディスク
    • 追加で接続できる永続ディスク。実体は BLOB ストレージ上の VHD ファイル。
    • Windows なら E ドライブ以降
    • Linux では /dev/sd[cdefg…..]

さて、どこにしましょうか。ページングされるのは RAM の内容ですから、OS の起動からシャットダウンの間まで確実に保持されていれば問題なさそうです。というわけで、BLOB に永続されない分アクセスの速い、作業用ディスクを使うのが良さそうだ、ということになります。実際 Windows インスタンスでは、 pagefile.sys が D ドライブに配置されるようになっています。

いざ mkswap?

ちょっと待ってください。実は mkswap や swapon を自分でカチャカチャ打たなくても良いのです。Azure 仮想マシン上の Linux インスタンスには、Windows Azure Linux Agent というのが入っておりまして、これがスワップ領域(ファイル)の面倒も見てくれます。

/etc/waagent.conf をちょっと開いてみてください。こんな部分があると思います。

ResourceDisk.EnableSwap=n
ResourceDisk.SwapSizeMB=0

これを、こんな風に編集します↓

ResourceDisk.EnableSwap=y
ResourceDisk.SwapSizeMB=4096

再起動してみると、見事スワップファイルが有効になっています。ほらこの通り、

# swapon -s
Filename Type Size Used Priority
/mnt/resource/swapfile file 4194296 0 -1
#

というわけで、Linux 仮想マシンでのスワップ領域設定方法でした。

HTH.

関連情報

SWAP space in Linux VM’s on Windows Azure – Part 1
https://blogs.msdn.com/b/piyushranjan/archive/2013/05/31/swap-space-in-linux-vm-s-on-windows-azure-part-1.aspx

SWAP space in Linux VM’s on Windows Azure – Part 2
https://blogs.msdn.com/b/piyushranjan/archive/2013/05/31/swap-space-in-linux-vm-s-on-windows-azure-part-2.aspx

Linux Virtual Machines
https://www.windowsazure.com/en-us/manage/linux/?fb=ja-jp

How to guides for Linux virtual machines
https://www.windowsazure.com/en-us/manage/linux/how-to-guides/?fb=ja-jp

__END__