FreeBSD で NFS ファイルにスワップする2017年09月15日 11時56分57秒

FreeBSD では長らくの間、NFS ファイルをスワップに指定できるようになっている。FreeBSD の古いドキュメントを見付けると、4.x 以前はとても遅かったといった記述や、NFS はネットワークに左右されるので、勧められないとの記述もあることはある。

取り敢えず実例。NFS の export と mount の位置はあまり関係なく、個々の設定による。

$ mount -t nfs x.x.x.x:/swap /mnt/swap
$ dd if=/dev/zero of=/mnt/swap/swap1 count=1 seek=1200
$ swapon /mnt/swap/swap1
swapon にそのままファイルのパスを指定すれば良い。dd にて空のファイルを先に作った。
$ swapctl -l
$ systat -swap
Device:       1024-blocks     Used:
/dev/#NODEV     1229824    109580
Disk      1K-blocks   Used /0%  /10  /20  /30  /40  /50  /60  /70  /80  /90  /10
[NFS swap]  1229696 109580 XXXXX

sswapctl や systat などで、スワップの割り当てや利用量をみられる。しかし、残念ながらファイル名は表示されないので、覚えておかなければいけない。
$ swapoff /mnt/swap/swap1
スワップ領域を外す場合は、ファイル名で指定する。複数の NFS ファイルで複数の領域を割り当てる事は出来るが、swapoff はファイル名で指定なので、忘れたら swapoff 出来なくなる。

shutdown 時には、nfs の umount や swapoff -a のタイミングが結構微妙な様なので、出来るならば shutdown 前に swapoff をしておいた方が良さそうだ。