[Ubuntu]ZFSでSwap作成

TIPS

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 のスワップがマウントされるようにします。

  1. 設定ファイルを開く
    sudo nano /etc/fstab
  2. 以下の行を末尾に追記する
    /dev/zvol/tank/swap none swap defaults 0 0
  3. 保存して終了 (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)のリスクは大幅に軽減されます。

コメント

タイトルとURLをコピーしました