FreeBSDのswapファイルがうまく作成できなかったので調べてみた

FreeBSDにてswapファイルを作成する場合

/etc/rc.confに以下のような行を記述するという手法がググると多数ヒットしますがこの手法はobsoluteです。最新(現時点で14.0)のFreeBSDでは使えません。

swapfile="/swapfile"

いつから使えないかよくわかりませんが2013/6/27のコミットで単純にwarningを出すようになったと書いてますので相当前から使えなかったのではないかと思います。
そこで man fstabを参考に以下のような記述をfstabに追加しました。

md90 none swap sw,file=/swapfile 0 0

この状態で swapon -a をすると確かにswapが作成されます。しかし再起動をしてみるとswapinfoで見ても作成されていません。再起動した状態でswaponをしようとすると

swapon: md90 on /swap90: Device already in use 

のようなエラーが発生して止まってしまいます。この原因を調べたところエラーになる原因が判明しました。

上記のようにfstabを記述し起動をすると早い段階で /etc/rc.d/swapが実行されます。このときにmdが作成されるのですがこの時点では/swapfileはリードオンリーです。このためデバイスが作成されどもswapができなくなりエラーなっているようでした。これを解決するには

md90 none swap sw,file=/swapfile,late 0 0

とmount optionにlateをつけることで解決できます。lateをつけることにより後から遅れてこの部分の処理が /etc/rc.d/swaplateでされるからです。このときにはボリュームはRWでマウントされているでしょうから正常にswapをすることができるというわけです。
Posted by issei

カテゴリ: BSD