Ubuntu+ZFSにSwapを追加

Ubuntu+ZFSにSwapを追加

先日,Ubuntuを搭載しているマシンで大量のメモリを使用するアプリケーションを動作させようと思い,SwapFileを追加しようとしたところ,

swapon: /sw: skipping - it appears to have holes.

というエラーが出て SwapFile を追加することができなかった.

調べてみると,原因はファイルシステムにZFSを使用していることだった.ZFSでは, SwapFile はファイルではなく,ボリュームとして提供しなくてはいけないらしい.

(ZFSについては,この記事を参照.)

この解決方法を調べたので,以下に記載しようと思う.

目次

  1. 忙しい人へ
  2. エラーが出るまでに実施したこと
  3. 解決方法

1. 忙しい人へ

以下のコマンドを実行してください.

$ sudo zfs create -V [任意の数字]G rpool/swap
$ sudo mkswap /dev/zvol/rpool/swap
$ sudo swapon /dev/zvol/rpool/swap
$ sudo swapon --show

sudo swapon --show の結果,Swapファイルが増えていればOKです.

swapが正常に追加されている例

2. エラーが出るまでに実施したこと

エラーが出るまでに試したコマンドは以下になります.

$ sudo fallocate -l 1G /swapfile    # ddコマンドを使用してもよい
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile

実際に試した際の画像は以下になります.

エラーが出るパターンのコマンド

3. 解決方法

基本的には

  1. ZFSのプールを確認する
  2. ZFSのボリュームを作成
  3. swap領域の作成と追加

ということをやります.

ZFSのプールを確認

まず初めに,ZFSのストレージプールの一覧を確認します.以下のコマンドを入力し,ZFSのプールの一覧を表示します.

$ sudo zpool list

以下の画像のような出力がされるはずです.この出力からSIZEの値が大きいプールの名前を憶えておきましょう.下の画像なら,「rpool」になります.

zpool listの結果例

ZFSのボリュームを作成

次に,ZFSのボリュームを作成します.作成するためのコマンドは以下です.

$ sudo zfs create -V [容量] [プール名]/swap

上記のコマンドにおける[]は,個人の環境によって置き換えるべきものです.

  • [容量]: 追加したいSwap領域の大きさを指定する.
    • 「1G」と書けば1Giga Byte,「1M」と書けば1 Mega Byte追加されます.
  • [プール名]: 先ほど確認した最もSIZEが大きいプール名

例えば,rpoolに1GのSwap領域を追加するなら,コマンドは以下になります.

$ sudo zfs create -V 1G rpool/swap

Swap領域の作成と追加

ボリュームさえ追加してしまえば,後は他のファイルシステムの場合と変わりません.

ボリュームのデバイスパス「/dev/zvol/rpool/swap」に対して,swap関連のコマンドを実行しましょう.

$ sudo mkswap /dev/zvol/rpool/swap
$ sudo swapon /dev/zvol/rpool/swap

最後に,以下のコマンドで,Swap領域が追加されているのかを確認すれば完成です!

$ sudo swapon --show
swapが正常に追加されている例

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です