一昔前だと、スワップ領域といえば専用のパーティションを用意して作るものというイメージがあった。 しかし、どうやら最近はファイルシステム上に作成したファイルを使ったスワップファイルの利用も盛んなようだ。 スワップファイルには、サイズを柔軟に変更できるメリットがある。 今回はスワップファイルを使ってスワップ領域のサイズを変更する方法について見ていく。
使った環境は次のとおり。
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 24.04.2 LTS Release: 24.04 Codename: noble $ uname -srm Linux 6.8.0-59-generic x86_64 $ mkswap --version mkswap from util-linux 2.39.3 $ swapon --version swapon from util-linux 2.39.3 $ fallocate --version fallocate from util-linux 2.39.3
もくじ
スワップ領域の状況を確認する
スワップ領域の状況は procfs から確認できる。
具体的には /proc/swaps
から使用しているスワップパーティションやスワップファイルの情報が得られる。
$ cat /proc/swaps Filename Type Size Used Priority /swap.img file 3043324 0 -2
今回使用した環境では /swap.img
というスワップファイルがスワップ領域に使われている。
サイズは 3GB ほどのようだ。
スワップファイルを使ってスワップ領域を増やす
現状を確認したところで、試しにスワップ領域を 4GB に増やしてみよう。
まずは fallocate(1) や dd(1) を使って特定のサイズを持ったファイルを作る。
$ sudo fallocate -l 4G /swapfile $ ls -alF /swapfile -rw-r--r-- 1 root root 4294967296 May 13 10:46 /swapfile
上記では /swapfile
というファイルパスに 4GB のサイズでファイルを作っている。
スーパーユーザ以外に読み書きできないようにパーミッションを変更する。
$ sudo chmod 600 /swapfile
mkswap(1) でスワップ領域として使用できるように初期化する。
$ sudo mkswap /swapfile Setting up swapspace version 1, size = 4 GiB (4294963200 bytes) no label, UUID=b724dc3f-02ec-4b2d-b137-8072132179e7
新しく作ったスワップファイルを swapon(1) でスワップ領域として有効化する。
$ sudo swapon /swapfile
古いスワップファイルは swapoff(1) でスワップ領域として無効化しておく。
$ sudo swapoff /swap.img
これでスワップ領域が 4GB になる。
$ cat /proc/swaps Filename Type Size Used Priority /swapfile file 4194300 0 -2
スワップ領域の設定を fstab(5) で永続化する
先ほどのやり方では変更したスワップ領域の設定が永続化されない。 そのためマシンを再起動すると状況が元に戻ってしまう。
試しに再起動してみよう。
$ sudo shutdown -r now
もう一度ログインして確認すると /swap.img
が使われている。
$ cat /proc/swaps Filename Type Size Used Priority /swap.img file 3043324 0 -2
これは fstab(5) に設定を書き込んでいなかったために生じる。
$ grep "/swap.img" /etc/fstab /swap.img none swap sw 0 0
そこで fstab(5) を書き換えてスワップファイルとして /swapfile
が使われるようにしてみよう。
$ sudo sed -i.bak s:swap.img:swapfile: /etc/fstab
次のように /swapfile
を使う形になる。
$ grep "/swapfile" /etc/fstab /swapfile none swap sw 0 0
以前のファイルは /etc/fstab.bak
に残る。
何かあったときはこちらから元に戻そう。
$ grep "/swap.img" /etc/fstab.bak /swap.img none swap sw 0 0
この状態でマシンを再起動する。
$ sudo shutdown -r now
もう一度ログインして確認すると、ちゃんとスワップ領域に /swapfile
が使われている。
$ cat /proc/swaps Filename Type Size Used Priority /swapfile file 4194300 0 -2
ばっちり。
まとめ
今回はスワップファイルを使ってスワップ領域のサイズを柔軟に変更する方法について確認した。 スワップファイルであれば、たとえば後から増設した高速な SSD を使ってスワップ領域を構築するといったこともやりやすい。