Amazon Linux で初期設定で swap ファイルをつくりマウントする

2016/11/15   #AWS 
このエントリーをはてなブックマークに追加

初期状態

$ free
             total       used       free     shared    buffers     cached
Mem:       1019328     240720     778608        156      19124     120528
-/+ buffers/cache:     101068     918260
Swap:            0          0          0

Swap: 0 0 0 !!

User Data で /etc/fstab に書き込むようにする

SWAPFILENAME=/swap.img
MEMSIZE=`cat /proc/meminfo | grep MemTotal | awk '{print $2}'`
if [ $MEMSIZE -lt 2097152 ]; then
  SIZE=$((MEMSIZE * 2))k
elif [ $MEMSIZE -lt 8388608 ]; then
  SIZE=${MEMSIZE}k
elif [ $MEMSIZE -lt 67108864 ]; then
  SIZE=$((MEMSIZE / 2))k
else
  SIZE=4194304k
fi
fallocate -l $SIZE $SWAPFILENAME && mkswap $SWAPFILENAME && chmod 600 $SWAPFILENAME && swapon $SWAPFILENAME
echo "${SWAPFILENAME}  swap  swap  defaults 0 0" >> /etc/fstab

基本的には クラスメソッドさんの記事 を拝借しつつ、そのままだといろいろ不具合あったので以下を修正。

  • ${((MEMSIZE * 2))} だと bash 的にエラーなので $((MEMSIZE * 2))
  • $((MEMSIZE / 2)) も同様
  • スワップファイルのパーミッションを 600 にしないとセキュアじゃないメッセージが出るので swapon の前に chmod 600 $SWAPFILENAME を追加

Swap 設定後

[ec2-user@ip-10-0-0-223 ~]$ free
             total       used       free     shared    buffers     cached
Mem:       1019328     243260     776068        156      19520     120876
-/+ buffers/cache:     102864     916464
Swap:      2038652          0    2038652

設定された。

参考: