Linuxにおけるスワップパーティションについて知っておくべきこと

Swap Partition Linux Featured

Linuxをインストールすると、セットアッププロセスがLinux自体のパーティションとともにハードディスクにスワップパーティションを追加する可能性があります。しかし、このスワップパーティションは何のために使用され、実際に必要でしょうか?

さらに読む: Ubuntuにスワップは必要ですか?現実的なアプローチ

スワップとは?

マルチタスキングオペレーティングシステムが物理メモリを使い果たすと、新しいプロセスを起動したり、既存のプロセスにメモリを割り当てたりできなくなります。この問題を解決するために、ローカルストレージ(通常はハードディスク)の特別なブロックスペースが設定され、現在実行されていないプロセスの一時的なホールディングエリアとして機能します。OSは非アクティブなプロセスをメモリからハードディスクに「スワップ」します。これにより、新しい作業のためのメモリが解放されます。非アクティブなプロセスが再びアクティブになると、ローカルストレージからメモリにスワップバックされます。この手続きは「スワッピング」と呼ばれています。

スワップスペースは本当に必要?

技術的にスワップスペースは必要でしょうか?いいえ。Linuxはスワップなしで動作可能であり、組み込みソリューションのような状況ではスワップなしでLinuxを実行できます。OSがメモリ不足になると、パニック状態に陥り、停止します。十分な物理RAMがあれば、マシンは問題なく動作します。

実際にスワップスペースは必要でしょうか?はい。スワッピングはコンピュータの動作を遅くします(ハードディスクへの読み書きはRAMへのアクセスよりもはるかに遅いため)、スワッピングを避けるためにはできるだけ多くの物理メモリを搭載することが最良の解決策ですが、スワッピングが望ましい状況もあります。例えば、システムブート中には、実行されているプロセスがあり(それによってシステムメモリを消費しますが)、その後非常に長期間スリープ状態になることがあります。また、割り当てられて書き込まれたが再度使用されないメモリもあります。これらの状況では、スワッピングアルゴリズムがこのメモリをハードディスクに移動し、価値のあるシステムメモリを解放することが始まります。これにより、常に最大限のRAMが利用可能であり、パフォーマンスが向上します。

swap-partition-in-gparted

物理RAMがすべてメモリに収まらないマシンでは、スワップスペースの使用が不可欠です!

完全性を期すために、LinuxにはOut-Of-Memory Killer(OOM)と呼ばれるサブシステムもあり、メモリが不足した場合にカーネルを停止するのではなく、リソースを解放するためにプロセスを終了させることができます。その動作は設定可能です。

どのくらいのスワップスペースを割り当てるべきか?

絶対的なルールはなく、ハードディスクのスペースは安価(ドルあたりギガバイト)なので、少なすぎるよりは多く割り当てる方が良いです。一般的な目安としては、物理メモリの2〜3倍のスワップスペースを持つべきです。

スワップパーティションを拡張せずにスワップを追加する

既存のスワップパーティションを変更せずにシステムにスワップスペースを追加する方法は2つあります。1つは別のドライブのスワップパーティションを使用する方法、もう1つはスワップファイルを使用する方法です。

別のハードドライブを使用するには、「Linux swap」(コード82)タイプのパーティションを作成し、「 mkswap 」コマンドを実行してスワップスペースを準備します:

mkswap /dev/sdb2

ここで /dev/sdb2 は作成したパーティションの名前です。スワップスペースを即座に使用するには、「 swapon 」コマンドを実行します:

swapon /dev/sdb2

現在使用中のスワップスペースのリストを取得するには「 swapon -s 」を使用します。スワップスペースをシステムに永久的に追加するには、/etc/fstab ファイルを編集し、次のような行を追加する必要があります:

/dev/sdb2       none    swap    sw      00

システムがディスクに一意の識別子を使用している場合は、blkid コマンドを使用してデバイスのIDのリストを取得します /etc/fstab でスワップスペースをマウントする行は以下のようになります:

UUID=036da155-1ea1-4392-b8d4-700f65aa1ead  none  swap  sw  00

スワップ用のファイルを使用するには、スワッピングに使用するファイルシステム上に大きな空のファイルを作成します(dd を使用)。例えば、1GBのファイルを作成するには、次のようにタイプします:

dd if=/dev/zero of=/store/swapfile bs=1024 count=1048576

ここで /store/swapfile は、希望するファイルシステム上のスワップファイルのパスです。

追加のスワップパーティションと同様に、ファイルも mkswap で準備し、swapon で使用する必要があります。/etc/fstab ファイルにも追加する必要があります。手順は上記とまったく同じですが、スワップスペースのパラメータとして /dev/sdb2 ではなく /store/swapfile を使用する必要があります。

スワップネス

Linuxカーネルは、メモリからプロセスをスワップアウトしようとする積極性を定義するように調整できます。この傾向は swappiness というカーネル変数によって制御されています。swappiness が0の場合、カーネルはできるだけスワップを避け、100の場合はスワップスペースの使用に対して積極的になります。多くのLinuxディストリビューションのデフォルト設定は60です。この番号を動的に変更するには、次のコマンドを使用します:

sudo sysctl vm.swappiness=10

値を永久に設定するには、/etc/sysctl.conf ファイル内の vm.swappiness 変数を変更(または存在しない場合は追加)する必要があります。

Linuxのスワップについて質問があればお知らせください。

この記事は2013年12月に初めて公開され、2020年8月に更新されました。