Linuxでスワップメモリを作成する方法

Linuxでスワップファイルを作成するには、ストレージ上にファイルを用意し、mkswapで初期化し、次にswaponでアクティブ化します。スワップはメモリの負荷を軽減しますが、RAMよりも遅く、すべてのメモリ不足の問題を解決するわけではなく、プログラムが正常に動作することを保証するわけでもありません。

スワップとは何ですか?

スワップは、使用中のメモリページの一部をストレージに置くことができる領域です。ディスクファイルまたは別のパーティションを使用できます。この記事ではファイルの追加方法を説明しており、例の2GiBは練習用です。必要なサイズは、RAM、ワークロード、使用可能なスペース、および休止状態の使用の有無を考慮して決定する必要があります。

システムはすでにスワップを使用している可能性があります。以下のコマンドで、現在有効になっている項目とメモリの状態を確認してください。

swapon --show
free -h

swapon --showで名前、サイズ、使用状況を確認し、free -hの Swap行で合計使用量を見てください。スワップを増やしても、ストレージアクセスが頻繁に発生するとパフォーマンスが低下する可能性があります。メモリが常に不足している場合は、ワークロードとRAMの増設も検討してください。

開始前に確認すべき事項

以下の手順は、GNU ツールおよび util-linux を使用した Linux の例です。ルートファイルシステムは一般的な ext4 で、十分な空き容量があるものとします。管理者権限が必要です。コンテナやマネージドサーバーではスワップの有効化が制限される場合があるため、最初に運用ポリシーを確認してください。

findmnt -T / -o TARGET,FSTYPE,SOURCE,OPTIONS
df -h /

ファイルシステムの種類と使用可能な空き容量を確認してください。2 GiB のスワップファイルに加えて、通常の操作に十分な空き容量を残してください。ファイルやシンボリックリンクがすでに存在する場合は、例示されているパス /swap-manualfactory を使用しないでください。 既存のスワップファイルを再初期化または上書きすると、データの損失や稼働中システムでの問題が発生する可能性があります。

Btrfsにはコピーオンライトおよびスナップショットに関連する個別の制限があるため、以下のext4手順を直接適用しないでください。Btrfs固有の作成方法や条件については、 Btrfsスワップファイルドキュメント を確認してください。ネットワークファイルシステムや他のファイルシステムも異なるサポート条件を持つ場合があります。

スワップファイルの作成と有効化

以下は/swap-manualfactory が存在しない場合に2GiBのファイルを作成する例です。GNUのdd におけるconv=excl は、ターゲットがすでに存在する場合は失敗し、上書きを防ぎます。失敗した場合や中断された場合は、次のステップに進まず、原因および生成されたファイルを確認してください。

sudo dd if=/dev/zero of=/swap-manualfactory bs=1M count=2048 conv=excl status=progress

コマンドが成功した場合、ファイルのサイズとパスを確認し、管理者だけが読み書きできるように設定してから、スワップ領域として初期化します。mkswapは指定されたファイルを変更するため、パスが先ほど作成したファイルであることを必ず確認してください。

sudo ls -lh /swap-manualfactory
sudo chmod 600 /swap-manualfactory
sudo mkswap /swap-manualfactory

前の各ステップが成功した場合のみ、次のステップを実行してください。以下のコマンドで有効化した後、新しいパスがリストに表示されていることを確認します。

sudo swapon /swap-manualfactory
swapon --show
free -h

表示されているファイルサイズは、スワップヘッダーやその他の要因により、作成されたファイルの実際のサイズと正確に一致しない場合があります。swapon が失敗した場合は、エラーを確認し、ブート設定に追加しないでください。スワップファイルには穴があってはいけません。また、ファイルシステムによっては、fallocate で作成されたファイルが適切でない場合があります。 util-linux swapon マニュアル では、各ファイルシステムの制約について説明しています。

起動後に有効化する

スワップファイルの有効化に成功した後でのみ、/etc/fstab に設定を追加してください。このファイルには他のマウント設定も含まれているため、編集前にバックアップを取り、パスが既存のスワップエントリと重複しないことを確認してください。以下のバックアップパスが既に存在する場合は、別の新しい名前を選択してください。

sudo cp -a -n /etc/fstab /etc/fstab.before-swap
sudo nano /etc/fstab

エディター内の既存の内容を保持し、以下の行を追加してから保存してください。異なる名前でサンプルパスを作成した場合は、実際のパスを使用してください。

/swap-manualfactory none swap defaults 0 0

保存後、再度ファイルの内容を確認し、利用可能なシステムでは次のコマンドで設定を確認してください。このチェックは再起動の成功を保証するものではありません。

sudo findmnt --verify --verbose
sudo systemctl daemon-reload

daemon-reload は systemd を使用するシステムで変更された設定をリロードさせます。検証エラーがある場合は修正し、他のエントリを誤って変更していないことを確認してください。適切な保守時間に再起動し、swapon --show でファイルが再有効化されていることを確認してください。また、Red Hat Swap Management Documentation で登録と検証手順を確認することもできます。

無効化と元に戻す

スワップをオフにする前に、swapon --showおよびfree -hで使用状況と利用可能メモリを確認してください。使用中のページを他のメモリまたはスワップに移動する十分な空きがない場合、無効化が失敗したり、システムに負荷がかかる可能性があります。稼働中のシステムでは、利用可能な容量と保守時間を確保した後に進めてください。

sudo swapoff /swap-manualfactory
swapon --show

対象項目がアクティブリストにないことを確認してください。起動時に再度有効化されないようにするには、この操作で追加された行を/etc/fstabからのみ削除し、systemd環境ではsudo systemctl daemon-reloadを実行してください。スワップファイルを削除する場合、まず無効化が成功し、追加された設定行が削除されたことを確認した後で、作成したファイルのみを削除してください。他のスワップ項目や既存の設定はそのままにしておきます。