スワップ領域の追加方法

スワップ領域のサイズが足りなくなった場合等にサイズを追加する方法です。

swap用領域の作成

まずはswap領域として使用するためのファイルを作成します。

ファイルの作成には下記のような方法がありますが、ファイルシステムが「xfs」の場合は「fallocate」を使ってファイルを作成するとswapファイルを追加する際にエラー(Invalid argument)が発生してしまうので、「dd」コマンドでファイルを作成してください。

# dd if=/dev/zero of=作成ファイル bs=ブロックサイズ count=ブロック数
# fallocate -l サイズ 作成ファイル 

今回はファイルシステムが「xfs」のCentOS7でswap領域を追加していくので、「dd」コマンドを使用してサイズが2Gの「/swap_ext1」というファイルを作成します。

# cd /
# dd if=/dev/zero of=swap_ext1 bs=1M count=2048
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 1.70512 s, 1.3 GB/s

ファイルが作成されていることを確認します。

# ls -lah swap_ext1
-rw-r--r-- 1 root root 2.0G Nov 24 11:49 swap_ext1

ちなみに「fallocate」コマンドを使用して同様のファイルを作成する場合は下記のようになります。

fallocate -l 2G swap_ext1

パーミッション設定

セキュリティを考慮して作成したファイルのパーミッションを600へ変更します。

# chmod 600 swap_ext1

swap用ファイルに変換

作成したファイルは「mkswap」コマンドでswap領域として使用できるファイルに変換します。

# mkswap スワップファイル

実際に作成したファイルを「mkswap」コマンドでswap用に変換していきます。

# mkswap swap_ext1
Setting up swapspace version 1, size = 2097148 KiB
no label, UUID=b65c8b1e-5177-4db6-ae53-f9f98d0bcd67

swap領域の追加

作成したswap領域用のファイルは、「swapon」コマンドでswap領域に追加することが出来ます。

# swapon スワップ領域用ファイル

「mkswap」コマンドでswap領域用ファイルに変換したものを「swapon」でswap領域に追加していきます。

# swapon swap_ext1

swap領域追加の確認

swap領域が追加されたを確認するには下記の方法があります。

  • 「free」コマンドを実行
  • 「swapon -s」コマンドを実行
  • 「/proc/swaps」ファイルを確認

freeコマンド

「free」コマンドを実行すると、物理メモリ(Mem)とswap(Swap)のサイズ(total)と使用量(used)空き容量(free)等が表示されます。

Swapのtotal部分を確認することで、領域が追加されているか確認することができます。

# free
              total        used        free      shared  buff/cache   available
Mem:         997924      229124       65324        7852      703476      588676
Swap:       4194296           0     4194296

swapon -sコマンド

「swapon -s」コマンドを実行すると、swap領域の名前や種類、サイズ、使用量、優先順位等の情報が表示されますので、追加した領域が表示されていることを確認してください。

# swapon -s
Filename                                Type            Size    Used    Priority
/swap_ext1                              file            2097148 0       -2
/dev/dm-1                               partition       2097148 7872    -1

「/proc/swaps」ファイルを確認

「swapon -s」コマンドと同等の情報が表示されるので、こちらの場合も追加したswap用ファイルが記述されているか確認してください。

# cat /proc/swaps
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       2097148 0       -1
/swap_ext1                              file            2097148 0       -2

自動マウント設定

手動でswap領域を追加することができたら、次にサーバを再起動する度に手動で「swapon」コマンドを実行する必要が無いように、「/etc/fstab」を編集して自動でswap領域として追加されるようにしていきます。

# cp -p /etc/fstab /etc/fstab_yyyymmdd
# vi /etc/fstab

今回は追加するswap領域のファイル名が「/swap_ext1」なので、下記の内容を「/etc/fstab」に追記します。(ファイル名は環境にあわせて適宜読み替えてください)

/swap_ext1    swap    swap    defaults    0 0

追加後にサーバを再起動して、スワップ領域が追加されていることを確認しておいてください。

追加したswap領域の無効化方法

何らかの理由で追加したswap領域を無効化したい場合は、「swapoff」コマンドを使用します。

swapoff ファイル名

今回追加した「/swap_ext1」という領域を無効化する場合は、下記のようになります。

# swapoff /swap_ext1

無効化されたかどうかは「swapon -s」や「free」コマンドで確認するか、「/proc/swaps」のファイルを確認してください。

恒久的に無効化するのであれば、「/etc/fstab」からも追加した設定を削除するのを忘れないでください。

fallocateでファイルを作成するとエラーになる

「xfs」なファイルシステム上で「fallocate」を使って、追加swap用ファイルを作成した際にエラーとなった話です。

「df」コマンドでファイルシステムを確認すると、「/」のファイルシステムが「xfs」であることがわります。

# df -T
Filesystem              Type     1K-blocks    Used Available Use% Mounted on
/dev/mapper/centos-root xfs       17811456 4019240  13792216  23% /
devtmpfs                devtmpfs    486924       0    486924   0% /dev
tmpfs                   tmpfs       498960       0    498960   0% /dev/shm
tmpfs                   tmpfs       498960    7844    491116   2% /run
tmpfs                   tmpfs       498960       0    498960   0% /sys/fs/cgroup
/dev/sda1               xfs        1038336  193348    844988  19% /boot
tmpfs                   tmpfs        99796       0     99796   0% /run/user/1000
tmpfs                   tmpfs        99796       0     99796   0% /run/user/0

「fallocate」で「/swap_ext2」というswap領域用ファイルを作成して、「mkswap」の後に「swapon」でswap領域を追加を行ったのですが、「swapon failed: Invalid argument」とエラーになってしまいます。

# fallocate -l 2g /swap_ext2
# ls -lah /swap_ext2
-rw-r--r-- 1 root root 2.0G Nov 25 10:05 /swap_ext2
# chmod 600 /swap_ext2
# mkswap /swap_ext2
Setting up swapspace version 1, size = 2097148 KiB
no label, UUID=3e66dde0-ab72-4596-9169-f18339095a5e
# swapon /swap_ext2
swapon: /swap_ext2: swapon failed: Invalid argument

ということで、「xfs」なファイルシステムでswap領域用ファイルを作成する場合は「fallocate」コマンドは使用しないようにしましょう。

ですので、「xfs」ファイルシステムの場合は「dd」コマンドを使用してファイルを作成するようにしましょう。

# dd if=/dev/zero of=作成ファイル bs=ブロックサイズ count=ブロック数

作成例としては下記のようになります。

# dd if=/dev/zero of=/swap_ext1 bs=1M count=2048

これでサイズが2GBの「/swap_ext1」というファイルが作成されます。(ファイルのサイズやファイル名は適宜変更してください)

swapfile has holes

「swapon failed: Invalid argument」エラーが発生した際に「/var/log/messges」を確認すると下記のログを見つけることが出来ました。

Nov 25 10:06:27 localhost kernel: swapon: swapfile has holes

xfsファイルシステム上では「fallocate」を使用して作成されたファイルはスパ―スファイルとみなされているようです。

ext4ファイルシステムで確認

検証用に「ext4」フォーマットしたHDDを追加して、そこに「fallocate」でswap領域用ファイルを作成してエラーが発生しないか確認してみました。

ファイルシステムの確認

今回追加したHDD「/dev/sdb1」のファイルシステムが「ext4」であることを確認します。

# df -Th
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/centos-root xfs        17G  7.9G  9.2G  47% /
devtmpfs                devtmpfs  476M     0  476M   0% /dev
tmpfs                   tmpfs     488M     0  488M   0% /dev/shm
tmpfs                   tmpfs     488M  7.7M  480M   2% /run
tmpfs                   tmpfs     488M     0  488M   0% /sys/fs/cgroup
/dev/sdb1               ext4      9.8G  2.1G  7.2G  23% /ext_hdd1
/dev/sda1               xfs      1014M  189M  826M  19% /boot
tmpfs                   tmpfs      98M     0   98M   0% /run/user/1000

swap領域の追加

ファイルシステムが「ext4」の場合は「fallocate」コマンドでファイルを作成し、swap領域として追加してみましたが「Invalid argument」なエラーは発生しませんでした。

# fallocate -l 2G /ext_hdd1/swap_ext2
# ls -lh /ext_hdd1/swap_ext2
-rw-r--r-- 1 root root 2.0G Nov 26 16:14 /ext_hdd1/swap_ext2
# mkswap /ext_hdd1/swap_ext2
Setting up swapspace version 1, size = 2097148 KiB
no label, UUID=89a19a54-42c9-4847-a482-1971c388fa95
# chmod 600 /ext_hdd1/swap_ext2
# swapon /ext_hdd1/swap_ext2

「swapon -s」コマンドでswapの状況を確認してみましたが、問題なく作成した領域が追加されていることが確認できました。

# swapon -s
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       2097148 0       -1
/ext_hdd1/swap_ext2                     file    2097148 0       -2

同じ「fallocate」コマンドで作成しても「ext4」と「xfs」で結果が異なるのは、ファイルシステムの仕様なのですかね。

コメント

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