第15章 swap領域

Linux の swap 領域は、物理メモリー (RAM) の空き容量がなくなると使用されます。システムがより多くのメモリーリソースを必要とする場合、RAM に空き容量がないとメモリーの非アクティブなページが swap 領域に移されます。RAM の容量が小さいマシンでは swap 領域が役に立ちますが、容量の大きい RAM の代わりとしてはなりません。swap 領域は、物理メモリーよりもアクセスに時間がかかるハードドライブ上にあります。swap 領域は、専用のスワップパーティション (推奨)、スワップファイル、またはスワップパーティションとスワップファイルの組み合わせにすることができます。Btrfs は swap 領域をサポートしないため注意してください。
過去数年、推奨される swap 領域のサイズは、システムの RAM サイズとともに直線的に増加していました。しかし、最近のシステムのメモリーサイズは数百ギガバイトまで増加したため、現在推奨される swap 領域の容量は、システムメモリーではなくシステムメモリーのワークロードの関数であると考えられています。
表15.1「システムの推奨 swap 領域」 は、ご使用のシステムの RAM 容量別に、システムがハイバネートするために十分なメモリーが不要な場合と必要な場合のスワップパーティションの推奨サイズをまとめています。推奨の swap 領域はインストール中に自動的に確定されますが、ハイバネーションも可能にするには、カスタムパーティション分割の段階で swap 領域の編集が必要となります。
表15.1「システムの推奨 swap 領域」 の推奨情報は、メモリーの容量が小さいシステム (1 GB 以下) で特に重要になります。システムで十分な swap 領域を割り当てできないと、安定性の問題や、インストールされたシステムが起動できない問題などが発生する原因となることがあります。
ご使用のシステムが 表15.1「システムの推奨 swap 領域」 に記載されている境界線上 (RAM が 2GB、 8GB または 64GB) になる場合、swap サイズやハイバネートへの対応を決める際は慎重に行なってください。システムリソースに余裕がある場合は、swap 領域を大きくするとパフォーマンスが向上することがあります。140 個を超える論理プロセッサーまたは 3 TB を超える RAM があるシステムには、最低でも 100 GB の swap 領域を確保することが推奨されます。
高速のドライブ、コントローラー、およびインターフェイスを搭載したシステムでは、複数のストレージデバイスに swap 領域を分散すると、swap 領域のパフォーマンスも向上します。

重要

swap 領域として割り当てたファイルシステムおよび LVM2 ボリュームは使用中に変更してはいけません。システムプロセスやカーネルが swap 領域を使用しているときに swap を変更しようとしても変更に失敗します。swap の使用量とその使用場所を確認するには、free および cat /proc/swaps コマンドを使用します。
システムが rescue モードで起動している間に swap 領域を変更してください。詳細は 『Red Hat Enterprise Linux 7 インストールガイド』 の レスキューモードでコンピューターを起動するを参照してください。ファイルシステムのマウントを要求されたら Skip を選択してください。

15.1. Swap 領域の追加

場合によっては、インスト-ルした後にさらに swap 領域の追加が必要になることもあります。例えば、システムの RAM の容量を 1 GB から 2 GB にアップグレードした時点に swap 領域が 2 GB のままかも知れません。メモリー集中型の操作や大容量のメモリーを必要とするアプリケーションを実行する場合には、swap 領域を 4 GB に増加することが有効な対処法となります。
選択肢が3つあります: 新規の swap パーティションの作成、新規の swap ファイルの作成、あるいは、既存の LVM2 論理ボリューム上で swap の拡張。この中で既存論理ボリュームの拡張を推奨致します。

15.1.1. LVM2 論理ボリュームでの swap 領域の拡張

Red Hat Enterprise Linux 7 は、デフォルトで、使用可能なすべての領域をインストール時に使用します。この設定を選択している場合、まず swap 領域として使用するボリュームグループに新しい物理ボリュームを追加しなければなりません。
swap 領域のボリュームグループにストレージを追加した後に、それを拡張することができるようになります。これを実行するには、次の手順に従います (/dev/VolGroup00/LogVol01 ボリュームのサイズを 2 GB 拡張するとします)。

手順15.1 LVM2 論理ボリュームでの swap 領域の拡張

  1. 関連付けられている論理ボリュームの swap 機能を無効にします。
    # swapoff -v /dev/VolGroup00/LogVol01
  2. LVM2 論理ボリュームをサイズ変更して 2 GB 拡張します。
    # lvresize /dev/VolGroup00/LogVol01 -L +2G
  3. 新しい swap 領域をフォーマットします。
    # mkswap /dev/VolGroup00/LogVol01
  4. 縮小した論理ボリュームを有効にします。
    # swapon -v /dev/VolGroup00/LogVol01
  5. swap 論理ボリュームの拡張に成功したかどうかをテストするには、アクティブな swap 容量を調べます。
    $ cat /proc/swaps
    $ free -h

15.1.2. swap の LVM2 論理ボリュームの作成

2 GB の swap ボリュームグループを追加します (/dev/VolGroup00/LogVol02 が追加する swap ボリュームであるとします)。
  1. サイズが 2 GB の LVM2 論理ボリュームを作成します。
    # lvcreate VolGroup00 -n LogVol02 -L 2G
  2. 新しい swap 領域をフォーマットします。
    # mkswap /dev/VolGroup00/LogVol02
  3. 次のエントリーを /etc/fstab ファイルに追加します。
    /dev/VolGroup00/LogVol02   swap     swap    defaults     0 0
  4. システムが新しい設定を登録するように、マウントユニットを再生成します。
    # systemctl daemon-reload
  5. 論理ボリュームで swap をアクティブ化します。
    # swapon -v /dev/VolGroup00/LogVol02
  6. swap 論理ボリュームの作成に成功したかどうかをテストするには、アクティブな swap 容量を調べます。
    $ cat /proc/swaps
    $ free -h

15.1.3. swap ファイルを作成する

swap ファイルを追加します。

手順15.2 スワップファイルの追加

  1. 新しい swap ファイルのサイズをメガバイト単位で決定してから 1024 をかけてブロック数を確定します。たとえば swap ファイルのサイズが 64 MB の場合、ブロック数は 65536 になります。
  2. 空のファイルの作成:
    # dd if=/dev/zero of=/swapfile bs=1024 count=65536
    希望のブロックサイズと同等の値に count を置き換えます。
  3. 以下のコマンドでスワップファイルをセットアップします。
    # mkswap /swapfile
  4. スワップファイルのセキュリティを変更して、全ユーザーに読み込みできなくします。
    # chmod 0600 /swapfile
  5. ブート時にスワップファイルを有効化するには、/etc/fstab を root として編集して、以下のエントリーを含めます。
    /swapfile          swap            swap    defaults        0 0
    次にシステムが起動すると新しい swap ファイルが有効になります。
  6. システムが新しい /etc/fstab 設定を登録するように、マウントユニットを再生成します。
    # systemctl daemon-reload
  7. スワップファイルをすぐに有効化する方法:
    # swapon /swapfile
  8. 新しいスワップファイルの作成と有効化に成功したかどうかをテストするには、アクティブなスワップ容量を調べます。
    $ cat /proc/swaps
    $ free -h