スワップ区画のサイズはどのぐらいに設定すべきでしょうか。

特別な理由がなければ,最低500Mバイトを確保しておけば十分ですが,緊急用の作業区画として4Gバイトほど用意しておくと安心です。

 Linuxのインストール時に頭を悩ませるのが,スワップ区画にどの程度の容量を割り当てるかということです。スワップ区画とは,物理メモリーに入りきれないプロセスやデータを一時退避させる記録領域です。スワップ区画を設定することで,少ない物理メモリーしか搭載しないマシンでも大きなメモリーを必要とするプログラムの実行や,多数のプロセスを稼働させることなどができます*1

 最近はメモリーの低価格化が進んでいますから,個人のパソコンでも2Gバイト程度のメモリーを搭載するのは普通になってきました。この程度あれば,スワップ区画を設定しなくても通常は問題なくLinuxを利用できます。つまり十分な物理メモリーさえあれば,本来的にはスワップ区画は設定する必要はありませんし,設定する場合でも好きなサイズにしておけば良いと言えます。一時的にスワップ領域が必要な場合は,スワップ・ファイルを用意して,それをスワップ領域として使うこともできます。

ハイバネーション領域に利用
最低でも500Mバイトは必要

 しかし最近のLinuxでは,スワップ区画を別の役割で使うようになっています。ハイバネーションを実行してシステムを休止状態にする際,物理メモリー上の情報を退避させる場所としてスワップ区画を使うのです。

 もっとも物理メモリー量そのままのサイズがスワップ区画に必要なわけではありません。/sys/power/image_sizeに設定されるサイズ(標準では500Mバイト)までメモリー・イメージをシュリンクしてからスワップ区画に書き出します。そのため,500Mバイトあれば十分です。

 ただし搭載する物理メモリー量が多い場合には,500Mバイトにまでメモリー・イメージをシュリンクするのは大変です。かなりの情報を落とさざるを得ず,場合によってはハイバネーションに失敗するケースもあります。/sys/power/image_sizeの値を拡大することで対応できますが,それにはスワップ区画のサイズに余裕がなければなりません。

 スワップ区画にある程度余裕があれば,非常時の作業区画としても利用できます。筆者の経験では,BIOS更新が必要になったものの,メーカーがWindows用の更新プログラムしか提供していなくて困った際にスワップ区画が活躍しました。スワップ区画に一時的にWindowsをインストールし,それを使ってBIOSを更新したのです。

 もっとも最近は外付けのHDDやUSBメモリーなどからシステムを起動できますので、こうした用途は考慮しなくても良いかもしれません。しかし緊急時の選択肢が増えるのは良いことです。OSのインストール用と考えると,4Gバイトぐらいはあった方がいいかもしれません。ハード・ディスクは大容量化していますから,ケチケチせずに余裕を持って確保しておくのが安全です。

サイズ上限はほぼ存在しない
32ビット環境でも2Tバイトまでは問題なく設定可

 それでは逆にスワップ区画のサイズ上限はどの程度あるのでしょうか。

 32ビットのx86環境では,カーネル2.0以前は128Mバイトまで,カーネル2.2以降しばらくは2Gバイトまでという制限が存在していました。しかしこの制限は次第に緩和され,現在ではスワップ区画固有の制限は存在しないようです。

 ただし,スワップ区画を「sector_t」という型の変数で管理していますから,この変数で指示できるサイズ以上は設定不可能です。通常のx86環境ではsector_tのサイズは32ビットですから,最大で2Tバイト(4G×512バイト)までのスワップ領域を設定できます。ただし32ビット環境でも「CONFIG_LBD=y」というオプション付きでカーネルがビルドされている場合は,sector_tのサイズが64ビットに拡大され,8Eバイトまでのスワップ領域を設定可能です。現在,ほとんどのLinuxディストリビューションが,CONFIG_LBD=yオプション付きでビルドしたカーネルを使っていますから事実上,制限は無いと考えてよいでしょう。

 64ビット版のLinuxでは,sector_tは最初から64ビット幅です。そのためこちらについても上限は考慮しなくてよいと言えます。

*1 ただしプロセッサの仮想アドレス空間の制限が別にありますから,巨大なスワップ区画を用意しても単一プロセスではそのすべての領域を利用できるとは限りません。