kazmax - Linux で自宅サーバー

linux スワップ(swap)領域の作成

linuxでスワップ(swap)領域を作成するには、mkswapコマンドを使います。作成したスワップ(swap)領域を実際に使用するには、swaponコマンドを使います。また、スワップ(swap)領域の使用を停止するには、swapoffコマンドを使います。

ここでは、スワップ(swap)領域を作成し、利用するまでの手順を説明します。

Last Update : 2013年09月08日

linux スワップ(swap)領域の作成 項目

  1. スワップ(swap)領域を作成する - mkswap
  2. スワップ(swap)領域を有効化する - swapon
  3. スワップ(swap)領域を無効化する - swapoff
  4. スワップ(swap)領域の自動マウント

1. スワップ(swap)領域を作成する - mkswap

スワップ(swap)領域を作成するには、mkswapコマンドを使います。指定したパーティション全てをスワップ(swap)領域にすることもできるし、ファイルをスワップ(swap)領域とすることもできます。

mkswap書式

mkswap [オプション] device/swapfile

※ device/swapfile = ディスクパーティションか、スワップ用のファイル名

有用なオプション

オプション 意味
-c スワップ領域を作る前に、デバイスに対して不良ブロックのチェックを行う。不良ブロックが見つかった際は、そのカウント数を表示する。
-L label ラベルを指定し、そのラベルで swapon できるようにする。

deviceには、ディスクパーティションか、ファイルを指定します。

使用例

# mkswap /dev/sdb1 ← デバイスを指定した場合
# mkswap /swapfile ← ファイルを指定した場合

deviceにディスクパーティションを指定する場合は、fdiskコマンドで、パーティションのタイプ(領域のシステムID)を82(Linux スワップ)にしておきます。

deviceにファイルを指定する場合は、以下のように、ddコマンドを使って先にスワップ用のファイルを作成しておきます。

memo

fdiskコマンドで、パーティションのタイプ(領域のシステムID)を82(Linux スワップ)にする。

# fdisk /dev/sdb

コマンド (m でヘルプ): p  ←現在の状態を確認

ディスク /dev/sdb: 5368 MB, 5368709120 バイト
ヘッド 255, セクタ 63, シリンダ 652
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00000000

デバイス ブート      始点        終点     ブロック  Id  システム
/dev/sdb1               1         652     5237158+  83  Linux
 ↑/dev/sdb1の領域のシステムIDは83


コマンド (m でヘルプ): t  ←領域のシステムIDを変更する場合は「t」を入力
選択した領域 1
16進数コード (L コマンドでコードリスト表示): 82  ←Linuxスワップ領域用の82を入力
領域のシステムタイプを 1 から 82 (Linux スワップ / Solaris) に変更しました

コマンド (m でヘルプ): p ←再度状態を確認する

ディスク /dev/sdb: 5368 MB, 5368709120 バイト
ヘッド 255, セクタ 63, シリンダ 652
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00000000

デバイス ブート      始点        終点     ブロック  Id  システム
/dev/sdb1               1         652     5237158+  82  Linux スワップ / Solaris
 ↑領域のシステムIDが82のLinuxスワップに変更されている。
  「w」で変更内容を保存すること。

memo

ddコマンドでスワップ用ファイルを作成する

# dd if=/dev/zero of=/swapfile bs=1M count=50
※ 中身が0で埋め尽くされた50Mbyteのswapfileという名前のファイルができます

# mkswap /swapfile
mkswap: /swapfile: warning: don't erase bootbits sectors
        on whole disk. Use -f to force.
スワップ空間バージョン1を設定します、サイズ = 51196 KiB
ラベルはありません, UUID=10038d16-aea9-4b86-a895-a3fff55d2a25

ddコマンドの使い方

# dd if=/dev/zero of=作成するファイル名 bs=ブロックサイズ(byte) count=ブロック数

dd コマンドは、ifで指定したファイルを、ofで指定したファイルへ、bsに指定された入出力ブロックサイズ単位で、countに指定された回数コピーを実行するコマンドです。

ブロックサイズ×ブロック数のサイズのファイルが作成されます。

if に、/dev/zero ファイルを指定しているので、ofで指定したファイルの中身はすべて0で埋め尽くされたファイルとなります。

memo

Linux は 32 個のスワップ領域を持つことができます。

2. スワップ(swap)領域を有効化する - swapon

mkswapコマンドで作成したswap領域を有効化するには、swaponコマンドを使用します。

swapon書式

swapon [オプション] device/swapfile

有用なオプション

オプション 意味
-a /etc/fstab の3番目のフィールドが、「swap」となっているデバイスをすべて有効にする。※noautoオプションがついているものは除く。
-s スワップの使用状況を表示する

device/swapfile には、mkswap コマンドで作成したswap領域を指定します。

使用例

# swapon /dev/sdb1  ← sdb1パーディションのスワップ領域を有効化
# swapon /swapfile  ← /swapfile というファイルのスワップ領域を有効化


# swapon -s ←swap状態を確認
Filename    Type          Size    Used    Priority
/dev/dm-1   partition     2064376   0       -1
/dev/sdb1   partition     5237148   0       -2  ← swap 領域として認識されている。
/swapfile   file          51192     0       -3  ← swap 領域として認識されている。

memo

proc/swaps ファイルからもswap領域を確認する事ができます。

# cat /proc/swaps
Filename    Type            Size    Used    Priority
/dev/dm-1   partition       2064376 0       -1
/dev/sdb1   partition       5237148 0       -2
/swapfile   file            51192   0       -3

3. スワップ(swap)領域を無効化する - swapoff

スワップ領域を無効化するには、swapoff コマンドを使用します。

swapoff書式

swapoff [オプション] device/swapfile

有用なオプション

オプション 意味
-a /proc/swaps, /etc/fstab の中のすべてのスワップデバイス、ファイルのスワッピングを無効にする。

使用例

# swapon -s ←swap状態を確認
Filename    Type        Size     Used    Priority
/dev/dm-1   partition   2064376  0       -1
/dev/sdb1   partition   5237148  0       -2
/swapfile   file        51192    0       -3

# swapoff /dev/sdb1   ← /dev/sdb1 をswapoff
# swapoff /swapfile   ← /swapfile をswapoff

# swapon -s ←swap状態を確認
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       2064376 0       -1
※スワップファイルが無効化され、表示されなくなった

4. スワップ(swap)領域の自動マウント

作成したスワップ(swap)領域が、OSの再起動時も自動的にマウントされるようにするには、/etc/fstabへ以下のように記述します。

# vi /etc/fstab

以下を追記
/dev/sdb1  swap   swap    defaults   0 0  ←/dev/sdb1をswap領域としてマウントさせる
/swapfile  swap   swap    defaults   0 0  ←/swapfileをswap領域としてマウントさせる

fstabファイルの各フィールドについて

フィールド 記述内容
第1フィールド マウントしたいデバイスファイルを書く。 ここでは、スワップ領域用のデバイス名、もしくはファイル名を記述します。
第2フィールド ファイルシステムのマウントポイントを記述する。スワップ領域(swap)を指定する場合は、「swap」と記述します。
第3フィールド ファイルシステムのタイプを記述する。 スワップ領域(swap)を指定する場合は、「swap」と記述します。
第4フィールド ファイルシステム毎のマウントオプションを記述する。
第5フィールド ファイルシステムを dump コマンドがダンプする必要があるかを記述する。1が必要。0が不要。記述がないのも不要とみなす。
第6フィールド fsckが、ブート時にファイルシステムのチェックを実行する順序を決定するために参照される。 ルートファイルシステムは、1と記述する必要がある。それ以外のパーティションは、2と記述する。 0の場合は、fsckによるチェックが不要とみなす。
Linuxファイルシステム 関連記事
Linux 基礎知識 関連記事