[Linux] スワップ領域を作成する

AWS EC2でインスタンスを新規に作成すると、もれなくスワップ領域が存在しません。 まぁ…スワップ使い始めると劇的にパフォーマンスが落ちるので、足りなくなったらメモリ増やすなり、AutoScalingなりでインスタンス数を増やせってことなんだと思いますが、例えばmakeコマンドなどでビルド中に微妙にメモリが足りなくなった場合は普通にスワップ使ってもらった方が面倒事が少なくて助かる場合もあります。

というわけで今回はLinuxにスワップ領域を作成しマウントするところまでをメモしておきます。

スワップ領域の作成

初期状態

インスタンス作成直後の状態です。スワップはゼロです。

$ free -h
             total       used       free     shared    buffers     cached
Mem:          481M       163M       318M        60K       8.4M        98M
-/+ buffers/cache:        56M       425M
Swap:           0B         0B         0B

ファイルの準備

スワップは簡単に言うと物理的なファイルをメモリ代わりに利用する仕組みです。というわけでメモリ代わりにするファイルを準備します。

$ sudo mkdir /var/swap/
$ sudo dd if=/dev/zero of=/var/swap/swap0 bs=1M count=1024
1024+0 レコード入力
1024+0 レコード出力
1073741824 バイト (1.1 GB) コピーされました、 15.084 秒、 71.2 MB/秒

上記コマンドで/var/swap/swap0というファイルを作成しました。ここでは約1Gbyte分の領域を作成していますが、ddコマンドのオプションcountで指定している値を減らしたり増やしたりします。

なおまだスワップ領域にはなっていません。ここでは中身が空だが1Gbyte分の容量があるファイルを作成しただけです。

$ od -h /var/swap/swap0
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
10000000000

誤って編集しないようパーミションも変更しておきます。

$ sudo chmod 600 /var/swap/swap0

スワップ領域に変換

mkswapでスワップ領域に変換します。

$ sudo mkswap /var/swap/swap0
スワップ空間バージョン1を設定します、サイズ = 1048572 KiB
ラベルはありません, UUID=f801211b-52ab-478e-959c-f6482770552b

swaponで有効にします。

$ sudo swapon /var/swap/swap0

ここでおもむろにfreeコマンドを打つと、無事にスワップ領域として認識されました。

$ free -h
             total       used       free     shared    buffers     cached
Mem:          481M       164M       317M        60K       8.5M        98M
-/+ buffers/cache:        57M       424M
Swap:         1.0G         0B       1.0G

どうでも良いのですが、ずっと心の中で「すわぽん」と呼んでいて、かわいいなこいつと思っていたのですが、これ冷静に考えるとswaponにするコマンドなので呼称としては「すわっぷおん」が正しいわけですね。スワップ領域を無効にするコマンドがswapoffなのを見て気が付きましたw

再起動後もマウントする

最後に/etc/fstabの最後の行に以下を追記しておきます。

$ sudo vi /etc/fstab
/var/swap/swap0 swap swap defaults 0 0

関連

https://blog.katsubemakito.net/monacoin/build_monacoind