ZFS 環境でスワップを増設する場合、「ZVOL(ZFS Volume)」 というブロックデバイスを作成するのが正解です。
なぜファイルではなく ZVOL なのか?
ZFS 上のファイルにスワップを作成すると、書き込み時のデッドロックが発生するリスクがあるため、公式でも「ZVOL」の使用が推奨されています。
手順:50GB のスワップを ZVOL で作成する
1. ZVOL の作成
tank プール内に、スワップ専用の 50GB の領域を確保します。
※スワップでは圧縮やキャッシュが不要なため、最適化オプションを付けて作成します。
sudo zfs create -V 50G -b $(getconf PAGESIZE) \
-o compression=off \
-o logbias=throughput \
-o sync=always \
-o primarycache=metadata \
-o secondarycache=none \
tank/swap
2. スワップ領域として初期化
作成した ZVOL をスワップ形式でフォーマットします。
sudo mkswap -f /dev/zvol/tank/swap
3. スワップを有効化
一時的に有効化して、正しく認識されるか確認します。
sudo swapon /dev/zvol/tank/swap
4. 確認
free -g でスワップが 51GB(元の1G + 追加の50G)程度になっているか確認してください。
free -g
再起動後も有効にする設定
/etc/fstab に追記して、OSが起動したときに自動で 50GB のスワップがマウントされるようにします。
- 設定ファイルを開く
sudo nano /etc/fstab - 以下の行を末尾に追記する
/dev/zvol/tank/swap none swap defaults 0 0 - 保存して終了 (Ctrl+O -> Enter -> Ctrl+X)
補足:どうしても「ファイル」として作成したい場合
もし /home が ZFS ではなく、標準的な ext4 などのファイルシステムであれば、以下の手順になります(ただし、現在のあなたの環境では上記 ZVOL 手順を強く推奨します)。
# ※ZFS上では失敗する可能性が高いコマンドです
sudo fallocate -l 50G /home/system/swapfile
sudo chmod 600 /home/system/swapfile
sudo mkswap /home/system/swapfile
sudo swapon /home/system/swapfile
まとめ
今回の設定で 50GB のバッファが確保されたため、メモリ不足によるフリーズ(OOM Killer)のリスクは大幅に軽減されます。

コメント