宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
「本番サーバーでメモリ使用率が跳ね上がって、swap領域まで食い尽くされてしまった...」
「今すぐスワップ領域を増やしたいけど、パーティションの切り直しはダウンタイムが発生するから避けたい...」

サーバー運用の現場でメモリ不足に遭遇したとき、OSを停止せずに一時的にスワップ領域を追加できると障害対応の選択肢が大きく広がります。

この記事では、スワップファイルを使って一時的にスワップ領域を増やす方法を、ddコマンドでの空ファイル作成からmkswap・swapon・swapoffまでの一連の手順で解説します。CentOS 6時代から現代のRHEL 9 / AlmaLinux 9 / Rocky Linux 9 / Ubuntu 24.04 LTSまで、基本的な考え方はそのまま通用する「現場で使える知識」としてまとめました。

【この記事でわかること】

・dd コマンドで空ファイルを作り mkswap でスワップ化する
・swapon で有効化し free や swapon -s で確認できる
・swapoff で解放でき、再起動すると自動的に消える
・スワップファイルのパーミッションは 600 必須

スワップ領域とは?なぜファイルで追加できるのか

スワップ領域(swap:仮想メモリ領域)とは、物理メモリ(RAM)が不足した際に、ディスクの一部を一時的にメモリの代わりとして使用するための領域です。

Linuxをインストールする際、通常は以下の2つのパーティションを最低限作成します。

ルートパーティション(/):OSやアプリケーションが格納される領域
スワップ領域(swap):物理メモリ不足時の退避領域

従来、スワップ領域のサイズは「物理メモリの1~2倍」が目安とされてきました。たとえば物理メモリを1GB搭載している場合、1GB~2GBのスワップ領域を確保するのが一般的でした。ただし近年は物理メモリの大容量化が進んでいるため、メモリを十分に積んでいるサーバーではスワップをほとんど使わない構成も珍しくありません。

問題は、運用開始後にスワップ領域が足りなくなったときです。パーティションの切り直しはダウンタイムが発生するうえ、LVMでない環境では作業難易度も高くなります。そこで活躍するのが「スワップファイル方式」です。

Linuxでは、スワップ領域はパーティションだけでなく通常のファイルとしても作成できるという柔軟な仕組みを備えています。ddコマンドで空ファイルを作り、mkswapでスワップ用にフォーマットし、swaponで有効化するだけで、OSを再起動することなくその場でスワップ容量を増やせます。緊急対応には最適な方法です。

スワップファイルで一時的にスワップ領域を増やす手順

ここからは実際の作業手順を解説します。今回はCentOS 6系サーバー「Tiger」での実行例を掲載していますが、コマンド自体は現代のRHEL系・Ubuntu系でも同様に動作します。

1. ddコマンドで空のスワップファイルを作成する

まずは dd(disk dump)コマンドで、スワップ領域として使うための空ファイルを作成します。今回は64MB(65536ブロック × 1024バイト)のファイルを /tmp/swapfile として作成します。

[root@Tiger ~]# dd if=/dev/zero of=/tmp/swapfile bs=1024 count=65536 65536+0 records in 65536+0 records out 67108864 bytes (67 MB) copied, 4.03076 seconds, 16.6 MB/s

オプションの意味は以下の通りです。

if=/dev/zero:入力元をゼロ埋めデバイスに指定(中身がすべて0の空ファイルを作るため)
of=/tmp/swapfile:出力先のファイルパスを指定
bs=1024:ブロックサイズを1024バイト(1KB)に指定
count=65536:ブロック数を指定(1024 × 65536 = 約64MB)

※実際のサーバーでスワップを増やす場合は、count の値を調整して必要なサイズにしてください。1GB分作成したい場合は bs=1M count=1024 のように指定するとわかりやすくなります。

2. スワップファイルに適切な権限を付与する

作成したスワップファイルには、パーミッション600(所有者のみ読み書き可能)を必ず設定します。

[root@Tiger ~]# chmod 600 /tmp/swapfile

スワップ領域にはメモリ上のデータ(パスワードや暗号鍵などの機密情報が含まれる可能性がある)が退避されます。他のユーザーから読み取れる状態にしておくと情報漏洩のリスクがあるため、600以外のパーミッションでは絶対に運用してはいけません

※近年のmkswapやswaponは、パーミッションが緩い(644等)の場合に警告を出したり、実行を拒否したりする仕様になっています。必ずchmod 600を先に実行しておきましょう。

3. mkswapコマンドでスワップ領域としてフォーマットする

次に、作成した空ファイルをスワップ領域として使用できるようにフォーマットします。使用するのは mkswap(make swap)コマンドです。

[root@Tiger ~]# mkswap /tmp/swapfile 65536

第2引数の 65536 はスワップ領域のサイズ(ブロック数)を明示的に指定しています。現代のmkswapでは自動検出されるため省略可能ですが、古い環境との互換性を考えて明示しておくと安心です。

4. swaponコマンドでスワップ領域を有効化する

フォーマットが完了したら、swapon コマンドでシステムにスワップ領域として認識させます。

Setting up swapspace version 1, size = 67104 kB [root@Tiger ~]# swapon /tmp/swapfile

Setting up swapspace version 1, size = 67104 kB という出力は、前段の mkswap 実行時に表示されているメッセージです。その直後に swapon を続けて実行すると、システム全体のスワップ領域に追加されます。

5. swapon -s で追加されたことを確認する

最後に、追加したスワップファイルが正しくシステムに認識されているかを swapon -s コマンドで確認します。

[root@Tiger ~]# swapon -s Filename Type Size Used Priority /dev/mapper/VolGroup00-LogVol01 partition 524280 0 -1 /tmp/swapfile file 65528 0 -2

Type 列を見ると、元々あった /dev/mapper/VolGroup00-LogVol01partition 型、追加した /tmp/swapfilefile 型として認識されていることがわかります。Priority 列は優先度を示しており、数値が大きいほど優先的に使用されます。追加したスワップファイルは-2 となり、既存のパーティション型スワップ(-1)より後で使われる設定になっています。

free -h コマンドでも物理メモリとスワップの合計容量を確認できます。Swap: 行の total が64MB分増えていれば成功です。

不要になったスワップ領域を解放する手順

一時的に追加したスワップファイルは、メモリ不足が解消したら速やかに解放しましょう。ディスクI/Oの負荷を避けるためにも、不要なスワップ領域は残さないのが鉄則です。

1. swapoffでスワップ領域から切り離す

swapoff コマンドで、指定したスワップファイルをシステムから切り離します。

[root@Tiger ~]# swapoff /tmp/swapfile

swapoff 実行時にスワップファイル内にデータが残っている場合、物理メモリへ書き戻す処理が発生します。メモリに余裕がない状態で実行すると失敗する、あるいはシステム負荷が急上昇する可能性があるため、メモリ使用率が落ち着いたタイミングで実行してください。

2. swapon -s でスワップ領域から消えたことを確認する

解放したスワップファイルが、一覧から消えていることを確認します。

[root@Tiger ~]# swapon -s Filename Type Size Used Priority /dev/mapper/VolGroup00-LogVol01 partition 524280 0 -1

/tmp/swapfile の行が消え、元のパーティション型スワップのみが残っていれば解放完了です。その後、不要になったファイル本体は rm /tmp/swapfile で削除して構いません。

応用・実務Tips:スワップファイル運用の注意点

一時的な追加なので再起動すると消える

本手順で追加したスワップファイルは、サーバーを再起動すると自動的に無効化されます/etc/fstab に記載していないため、システム起動時には読み込まれないからです。

あくまで「今この瞬間のメモリ不足を凌ぐ」ための手段であり、恒久的にスワップを増やしたい場合は、物理メモリの増設やパーティションの再設計を検討してください。どうしてもファイル方式で永続化したい場合は、以下のようなエントリを /etc/fstab に追記します。

# /etc/fstab に以下を追記する /tmp/swapfile swap swap defaults 0 0

ただし/tmp ディレクトリは再起動時にクリアされる設定(tmpfsマウント)の場合があるため、恒久運用するなら /var/swapfile など別の場所に作成することを推奨します。

スワップの過剰設定はシステムを遅くする

「念のためスワップを大量に用意しておけば安心」と考える方もいますが、実務ではスワップが頻繁に使われる状態(スワッピング)はシステム全体のパフォーマンスを大幅に低下させます。ディスクI/OはメモリI/Oに比べて数百~数千倍遅いためです。

スワップは「メモリ不足で突然OSがクラッシュするのを防ぐセーフティネット」と考え、常用前提の運用は避けましょう。スワップ使用率が慢性的に高いサーバーは、物理メモリの増設やアプリケーションのチューニングを優先すべきサインです。

swappinessで「スワップの使われやすさ」を調整する

Linuxには vm.swappiness というカーネルパラメーターがあり、スワップをどの程度積極的に使うかを0~100で調整できます。デフォルト値は60で、数値が大きいほどスワップを積極的に使う設定です。

# 現在のswappiness値を確認する # cat /proc/sys/vm/swappiness # 一時的に10に変更する(再起動で戻る) # sysctl vm.swappiness=10

データベースサーバーのようにメモリを積極的に使いたい環境では、vm.swappiness=10 程度に下げてスワップ使用を抑制するチューニングがよく行われます。

「swapon: /tmp/swapfile: Permission denied」が出た時の対処法

mkswapやswapon実行時に Permission denied エラーが出た場合、原因の大半は以下の3つです。

パーミッションが600になっていない:前述の通り、chmod 600 /tmp/swapfile を実行してから再度試してください
root権限で実行していない:スワップ関連の操作はroot権限が必須です。sudo を付けて実行するか、su - でrootになってから実行してください
ファイルシステムがswapfileをサポートしていない:Btrfsなど一部のファイルシステムでは追加の設定が必要です。ext4やxfsであれば問題なく動作します

「swapon: /tmp/swapfile: swapon failed: Invalid argument」が出る場合

このエラーは、mkswapでフォーマットする前にswaponを実行した場合に発生します。手順の「3. mkswap」→「4. swapon」の順番を必ず守ってください。また、既にスワップ領域として登録されているファイルに対して再度swaponを実行した場合にも同じエラーが出ます。

本記事のまとめ

やりたいこと コマンド
64MBの空ファイルを作成する dd if=/dev/zero of=/tmp/swapfile bs=1024 count=65536
スワップファイルのパーミッションを設定する chmod 600 /tmp/swapfile
スワップ領域としてフォーマットする mkswap /tmp/swapfile
スワップ領域を有効化する swapon /tmp/swapfile
現在のスワップ領域一覧を確認する swapon -s
スワップ領域を解放する swapoff /tmp/swapfile
物理メモリとスワップの使用状況を確認する free -h
swappinessの値を確認する cat /proc/sys/vm/swappiness
swappinessを一時的に変更する sysctl vm.swappiness=10

本番サーバーで障害が起きたとき、あなたは冷静に対処できますか?

スワップファイルでの緊急対応は、Linuxサーバー管理のごく一部にすぎません。メモリ・ディスク・ネットワーク・プロセス管理まで、現場で直面するトラブルに対処するには体系的な知識と手順の引き出しが欠かせません。
古いネットの情報をツギハギでコピペする危うい運用から卒業し、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。