Linuxのスワップパーティションとは?仕組みから追加方法、チューニングまで徹底解説

Linuxをインストールすると、セットアッププロセスがLinux本体用のパーティションとともに、ハードディスク上に「スワップパーティション」を作成するのが一般的です。では、このスワップパーティションは一体何のために使われ、本当に必要なのでしょうか?本記事では、スワップの基本的な仕組みから、その必要性、適切なサイズの目安、追加方法、そして動作を最適化するためのチューニング手法まで、わかりやすく解説します。
スワップとは何か?
マルチタスクOSが物理メモリを使い果たすと、新しいプロセスを起動できなくなり、既存のプロセスにメモリを追加で割り当てることもできなくなります。この問題を解決するために、ローカルストレージ(多くの場合ハードディスク)上に特別な領域が確保され、現在実行されていないプロセスの一時的な退避先として機能します。OSは非アクティブなプロセスをメモリからハードディスクへ「スワップアウト」し、メモリを新しい処理のために解放します。その後、退避していたプロセスが再びアクティブになると、今度はストレージからメモリへ「スワップイン」されます。この一連の手順が「スワッピング」と呼ばれるものです。
スワップ領域は本当に必要なのか?
技術的な観点から見ると、スワップ領域は必須ではありません。Linuxはスワップなしでも動作し、組み込みシステムなど一部の環境では実際にスワップなしで運用されています。ただし、OSがメモリ不足に陥るとカーネルパニックを起こして停止してしまうため、十分な物理RAMが搭載されている場合に限り、問題なく動作します。
一方、実用的な観点から見ると、スワップ領域は必要です。スワッピングはコンピュータの速度を低下させます(ハードディスクへの読み書きはRAMへのアクセスよりはるかに遅いため)し、物理メモリをできるだけ搭載することがスワップを避ける最善策であることは間違いありません。しかし、スワップが望ましい正当なケースも存在します。例えば、システム起動時に実行されるものの、その後長時間スリープ状態になるプロセスや、一度割り当てられて書き込まれた後、二度と使われないメモリなどです。こうした状況では、スワップアルゴリズムがこれらのメモリをハードディスクへ移動させることで、貴重なシステムメモリを解放します。これにより、常に最大限のRAMを利用可能な状態に保たれ、結果としてパフォーマンスが向上します。

すべてをメモリに収めるには物理RAMが不足しているマシンでは、スワップ領域の使用は不可欠です!
補足として、Linuxには「OOMキラー(Out-Of-Memory Killer)」と呼ばれるサブシステムもあります。これはメモリが不足した際にカーネルを停止させる代わりに、リソースを解放するためにプロセスを強制終了させる仕組みです。その動作は設定によって変更可能です。
スワップ領域はどれくらい割り当てるべきか?
絶対的なルールはありません。ハードディスクの容量は(GBあたりの価格で見て)安価になっているため、少なすぎるよりも多めに割り当てる方が安全です。経験則としては、物理メモリの2〜3倍程度のスワップ領域を用意するのが目安となります。ただし、近年は大容量RAMを搭載したマシンでは、RAMと同程度かそれ以下のスワップ量で十分とする考え方も一般的になっています。
スワップパーティションを拡張せずにスワップを追加する方法
既存のスワップパーティションを変更せずにスワップ領域を追加する方法は2つあります。1つは別のドライブにスワップパーティションを作成する方法、もう1つはスワップファイルを使用する方法です。
方法1:別のドライブにスワップパーティションを作成する
別のハードディスクを使用する場合は、「Linux swap」タイプ(コード82)のパーティションを作成し、「mkswap」コマンドを実行してスワップ領域を準備します:
mkswap /dev/sdb2
ここで/dev/sdb2は作成したパーティション名です。作成したスワップ領域をすぐに使用するには、「swapon」コマンドを実行します:
swapon /dev/sdb2
「swapon -s」を実行すると、現在使用中のスワップ領域の一覧を確認できます。スワップ領域をシステムに永続的に追加するには、/etc/fstabファイルを編集し、以下のような行を追加します:
/dev/sdb2 none swap sw 0 0
システムが一意の識別子(UUID)でディスクを管理している場合は、blkidコマンドでデバイスのID一覧を取得します。この場合、/etc/fstabに記述する行は次のようになります:
UUID=036da155-1ea1-4392-b8d4-700f65aa1ead none swap sw 0 0
方法2:スワップファイルを使用する
ファイルをスワップとして使う場合は、スワップに使用したいファイルシステム上に、ddコマンドで大きな空ファイルを作成します。例えば1GBのファイルを作成するには、次のように入力します:
dd if=/dev/zero of=/store/swapfile bs=1024 count=1048576
/store/swapfileは、対象のファイルシステム上にあるスワップファイルのパスです。
追加のスワップパーティションの場合と同様に、このファイルもmkswapで準備し、swaponで有効化します。さらに/etc/fstabファイルへの追記も必要です。手順は上記とまったく同じですが、スワップ領域のパラメータとして/dev/sdb2ではなく/store/swapfileを指定する点だけが異なります。
スワップネス(Swappiness)によるチューニング
Linuxカーネルは、プロセスをどの程度積極的にメモリからスワップアウトするかを調整できます。この傾向はswappiness(スワップネス)というカーネル変数で制御されます。swappinessが0の場合、カーネルは可能な限りスワップを回避しようとし、100の場合は積極的にスワップ領域を使用します。多くのLinuxディストリビューションのデフォルト値は60です。この値は次のコマンドで動的に変更できます:
sudo sysctl vm.swappiness=10
値を永続的に設定するには、/etc/sysctl.confファイル内のvm.swappiness変数を変更(存在しない場合は追加)します。
なお、デスクトップ用途では低めの値(10前後)、サーバー用途ではデフォルトの60が推奨されることが多いため、自分の用途に合わせて調整してみてください。
Linuxのスワップについて質問がある場合は、ぜひコメントでお知らせください。
この記事は2013年12月に初公開され、2020年8月に更新されました。
-
DNSとは?仕組みからセキュリティリスクまで知っておきたい基礎知識
DNSルックアップとは?ドメイン・ネーム・システム(DNS)ルックアップとは、ユーザーがブラウザのアドレスバーにURLを入力してからページが読み込まれるまでの間に起こるプロセスのことです。技術的に言えば、URL(例:www.google.com)をIPアドレスへ変換する仕組みを指します。IPアドレスは、私たちの住所のようなものです。手紙を届けるときに住所を使うように、コンピュータはIPアドレスを使って特定の場所へデータを送信します。IPアドレスは長い数字の羅列でとても覚えにくいため、コンピュータはDNSを利用して、覚えやすいURLとIPアドレスの相互変換を行っています。なお、インターネットに接
-
Windows 10のWindows Update徹底解説!知っておくべき仕組みと自動更新の制御方法
インターネットはほぼ毎日新しいものを提供し続ける、絶えず進化するメディアです。かつてはデスクトップPC向けだけだったウェブサイトやWeb開発技術が、今ではモバイルデバイスなど携帯端末にも対応するようになりました。こうした変化に伴い、マルウェアやウイルスといった悪意ある存在も環境に適応しながら進化を続けています。 すべてが日々変化する中、オペレーティングシステムも最新の技術革新や改善に取り残されないよう、常に進化していく必要があります。そのためApple、Google、Microsoftといった大手企業は、各デバイスで動作するOS向けにアップデートを提供しています。これらのアップデートには新機能