Linux(Ubuntu)のswap領域を拡張する

Odroidを組み立てて色々確認していたら、どうも初期設定ではSWAPの設定がされていないようだった。

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           1.9G        380M         46M        1.9M        1.5G        1.5G

単純にファイルサーバとして使うだけだったら、そのままでも問題ないんだけど、目的が”bitcoind”を動かすために組み立てたのもあって、流石に2Gのメモリだけだと溢れるだろうなと思ったので、拡張しました。

swap(スワップ)とは?

ハードディスク上に「スワップファイル」あるいは「スワップ領域」と呼ばれる専用の保存領域を用意して、メモリ容量が不足してきたら現在使われていないプログラム(プロセス)を一時的にスワップファイルに書き出して消去し、占有していたメモリを開放する。メモリからハードディスクに退避する動作を「スワップアウト」(swap-out)、ハードディスクからメモリに書き戻す動作を「スワップイン」(swap-in)という。

引用:IT用語辞典(スワップ 【 swap 】 メモリスワップ )

メモリが溢れてしまっても、一時的に利用されるファイルです。設定なしでメモリが溢れると、稼働中のアプリケーションが強制終了されちゃいます…

swapの設定はパーテーションを作成してそこをswap設定にするか、swap用のファイルを作成して設定するかで、パーテーションの方がスピードは早いと思うけど、後から変更するのが大変なのでswapファイルを作成しました。∠( ‘ω’)/

ここから先の方法は起動中のプログラムを止める必要はなく、設定後にOS自体の再起動も必要ないので、何かのプログラム動作中に「swap領域ヤバイ」とか、「メモリ溢れそうだけどswap設定してない」という時でも拡張できる。

swapファイルを作成

以下のコマンドで、”/(ルート)”配下に、2Gバイトの”swapfile”という名前のファイルを作成。

$ sudo fallocate -l 2G /swapfile

通常は「メモリの2倍だ!」とか言われている本当は4Gぐらいが良いみたいだけど、eMMCの容量が8Gと一番小さいのを選んでしまっていて、4Gの容量を確保するとSSDの空き容量が1Gを下回りそうだったので、2Gにしてます。ちなみに、必ずしもメモリの2倍にしなければいけないわけではない。

“swapfile”の容量を調節したい場合は”2G”の部分を変更してね!

続いて”swapfile”の権限を”root”のみに変更する。

$ sudo chmod 600 /swapfile

swapファイルをswap領域として設定

上記で作成した”swapfile”をswap領域として設定する。

$ sudo mkswap /swapfile

swap領域に設定しただけではダメなので、有効化をします。

$ sudo swapon /swapfile

これですぐにswap領域として反映されます。

設定したswap領域の恒久処理

ここまでの設定はあくまで一時的に今稼働中のOSに設定した状態なので、OS再起動をかけるとswap領域が外れる。一時的な対応として実施したのであれば、そのままでもいいと思うけど、「今後もそのままにしておきたい。」と思うなら、恒久的に反映されるように設定しておきましょう。

$ sudo cp -p /etc/fstab /etc/fstab.bak
$ sudo vim /etc/fstab
※どこでも良いので以下の1行を追加
~
/swapfile none swap sw 0 0
~

これでOSを再起動しても同じようにswap領域が割り当てられるようになる。

設定したswap領域の割り当て解除

割り当てを解除する場合は逆順で処理をすれば外れる。

$ sudo swapoff /swapfile
$ sudo mv /etc/fstab.bak /etc/fstab
$ sudo rm /swapfile

恒久処理をしていない場合は2行目の”fstab”ファイルを戻すところはやらなくて良いよ(。・ω・)ノ゙