はじめに
この実験では、Linux におけるスワップファイル(Swap File)の作成と有効化という、システム管理において不可欠なタスクを学習します。このプロセスにより、物理メモリ(RAM)が不足している場合に不可欠な、システムの仮想メモリ(Virtual Memory)を増やすことができます。専用のスワップパーティションを作成する代わりの柔軟な手法として、基本的なコマンドラインユーティリティを使用してシステムリソースを効果的に管理する実戦的な経験を積むことができます。
現在のスワップ空間を swapon コマンドで確認する方法から始まり、一連のワークフローを体験します。次に、dd を使用してスワップ領域用のファイルを作成し、mkswap でスワップ用としてフォーマットし、最後にそれを有効化します。実験の最後には、新しいスワップファイルが正しく設定され、システムに認識されていることを確認します。
swapon による現在のスワップ空間の確認
このステップでは、Linux システムにおける現在のスワップ空間の設定を確認する方法を学びます。スワップ空間とは、物理メモリ(RAM)がいっぱいになったときに仮想メモリとして使用されるハードディスクの一部です。これにより、システムは物理 RAM に収まりきらないほど多くのアプリケーションを実行できるようになります。
まず、ページングやスワップのためのデバイスやファイルを指定するユーティリティである swapon コマンドを使用します。--show オプションを付けて実行することで、アクティブなスワップデバイスの概要を表示します。スワップ空間の管理は管理者タスクであるため、sudo を使用してルート(root)権限でコマンドを実行する必要があります。
すでに ~/project ディレクトリに移動しているターミナルで、次のコマンドを実行してください。
sudo swapon --show
次のような出力が表示されます。NAME や SIZE などの詳細は、仮想マシンの初期設定によって異なる場合があります。また、スワップ空間が設定されていない場合は、このコマンドを実行しても何も出力されません。
NAME TYPE SIZE USED PRIO
/dev/loop12 partition 2G 0B -2
出力内容を詳しく見てみましょう:
- NAME: スワップデバイスまたはファイルの名前。この例では、ループデバイス(
/dev/loop12)です。 - TYPE: スワップ空間の種類。
partition(パーティション)またはfile(ファイル)のいずれかです。 - SIZE: スワップ空間の合計サイズ。
- USED: 現在使用されているスワップ空間の量。
- PRIO: スワップ空間の優先度(Priority)。複数のスワップ空間がある場合、優先度の高いものから先に使用されます。
このコマンドを実行することで、システムの現在のスワップ設定を確認できました。次のステップでは、ディスクの再パーティション化を行わずにスワップ空間を追加できる柔軟な方法である、新しいスワップファイルの作成と有効化について学びます。
dd によるスワップ用ファイルの作成
前のステップでは、既存のスワップ設定を確認する方法を学びました。ここでは、新しいスワップ空間として使用するための専用ファイルを作成します。ファイルによるスワップは、ハードドライブの再パーティション化を必要としないため、非常に柔軟な手法です。
データのコピーや変換を行う強力なユーティリティである dd コマンドを使用します。このコマンドは、ヌル文字(ゼロ)の無限ストリームである /dev/zero という特殊なシステムデバイスから読み込むことで、正確なサイズのファイルを作成できるため、このタスクに最適です。
現在のディレクトリ(~/project)に swapfile という名前の 250MB のファイルを作成するには、次のコマンドを実行します。このファイルは最終的にシステムによって管理されるため、sudo が必要です。
sudo dd if=/dev/zero of=swapfile bs=1M count=250
コマンドの各引数の意味は以下の通りです:
sudo: ルート権限でコマンドを実行します。dd: 使用するコマンドラインユーティリティです。if=/dev/zero: 入力ファイル(input file)を指定します。/dev/zeroはヌル文字のストリームを生成する特殊なファイルです。of=swapfile: 出力ファイル(output file)を指定します。これにより、現在のディレクトリにswapfileという名前のファイルが作成されます。bs=1M: ブロックサイズ(block size)を 1 メガバイトに設定します。ddは 1MB 単位でデータを読み書きします。count=250: 250 ブロックをコピーします。ブロックサイズが 1M なので、結果として 250 * 1M = 250MB のファイルが作成されます。
コマンド実行後、操作が成功したことを示す出力が表示されます:
250+0 records in
250+0 records out
262144000 bytes (262 MB, 250 MiB) copied, 0.270222 s, 970 MB/s
これで 250MB のファイルの作成に成功しました。次のステップでは、このファイルをスワップ空間として認識できるようにフォーマットし、適切な権限を設定します。
mkswap によるスワップ形式へのフォーマット
前のステップでは、ゼロで埋められた swapfile という名前のファイルを作成しました。しかし、オペレーティングシステムはまだこれを有効なスワップ領域として認識していません。この目的のために特別にフォーマットする必要があります。ここで mkswap コマンドを使用します。
mkswap コマンドは、デバイスまたはファイル上に Linux スワップ領域をセットアップします。カーネルが識別できる特別なシグネチャ(署名)をファイルに書き込みます。
まず、作成した swapfile をフォーマットしましょう。ターミナルで次のコマンドを実行します。
sudo mkswap swapfile
コマンドを実行すると、スワップ空間がセットアップされたことを示す出力が表示されます。システムは新しいスワップ領域に一意の識別子(UUID)を割り当てます。また、安全でない権限に関する警告が表示されることがありますが、これについては次に対処します。
mkswap: swapfile: insecure permissions 0644, fix with: chmod 0600 swapfile
Setting up swapspace version 1, size = 250 MiB (262139904 bytes)
no label, UUID=aabf0226-9f7b-47f5-9ad3-10248552795c
重要なセキュリティ上の注意: スワップファイルには、コンピュータのメモリから機密データが含まれる可能性があります。セキュリティ上の理由から、root ユーザーのみが読み書きの権限を持ち、システム上の他のユーザーは一切アクセスできないようにすることが極めて重要です。
正しい権限を設定するために、chmod コマンドを使用します。権限を 600 に設定することで、所有者(root)に読み書きのアクセス権を与え、それ以外の全員のアクセス権を剥奪します。
次のコマンドを実行して swapfile を保護します。
sudo chmod 600 swapfile
このコマンドは、成功しても何も出力しません。これで swapfile のフォーマットと権限の保護が完了しました。これでシステムによって有効化され、使用される準備が整いました。次のステップで有効化を行います。
swapon による新しいスワップファイルの有効化
swapfile の作成と準備が完了しました。フォーマットされ、正しい権限も設定されましたが、Linux カーネルはまだこれを仮想メモリとして使用していません。このステップでは、スワップファイルを有効化し、システムで利用可能な状態にします。
これを行うには、再び swapon コマンドを使用します。最初のステップでは、現在の設定を表示するために --show オプションを使用しましたが、今回は swapfile へのパスを引数として渡し、それを有効にします。
~/project ディレクトリで次のコマンドを実行し、新しいスワップ空間を有効化します。
sudo swapon swapfile
コマンドの内容を確認しましょう:
sudo: スワップ空間の有効化はルート権限を必要とするシステムレベルの操作であるため、これが必要です。swapon: スワップ用のデバイスやファイルを有効にするコマンドです。swapfile: 有効にしたいファイルの名前です。ファイルが存在する~/projectディレクトリにいるため、フルパスを指定する必要はありません。
コマンドが成功した場合、何も出力されません。これは多くの Linux コマンドの標準的な動作であり、「便りがないのは良い便り(成功)」を意味します。
これで swapfile がアクティブになり、システムによって追加の仮想メモリとして使用されるようになりました。最後のステップでは、新しいスワップ空間がシステムの総メモリリソースに正しく追加されたことを確認します。
新しいスワップ空間の設定確認
おめでとうございます!新しいスワップファイルの作成、フォーマット、および有効化に成功しました。この最後のステップでは、システムがこの新しいリソースを認識し、使用できる状態にあることを確認します。これにより、これまでのすべてのステップが正しく完了したことが証明されます。
まず、この実験の最初に使用したのと同じ swapon --show コマンドを使用してみましょう。今実行すると、追加した swapfile を含む、更新されたアクティブなスワップ空間のリストが表示されるはずです。
ターミナルで次のコマンドを実行します。
sudo swapon --show
出力には、元のスワップパーティション(存在した場合)と新しいスワップファイルの 2 つのエントリが表示されます。/home/labex/project/swapfile の新しい行に注目してください。
NAME TYPE SIZE USED PRIO
/dev/loop12 partition 2G 0B -2
/home/labex/project/swapfile file 250M 0B -3
見ての通り、システムは 250M の file タイプ(ファイル形式)のスワップ空間を認識しています。また、優先度(PRIO)も割り当てられています。カーネルは優先度の高いスワップ空間から順に使用します。
メモリとスワップの使用状況を確認するためのもう一つの便利なコマンドは free です。-h(--human)オプションを使用すると、サイズがメガバイト(M)やギガバイト(G)で表示され、読みやすくなります。
free -h コマンドを実行します。
free -h
システムのメモリの概要が表示されます。Swap の行を注意深く見てください。
total used free shared buff/cache available
Mem: 3.5Gi 608Mi 732Mi 16Mi 2.2Gi 2.7Gi
Swap: 2.2Gi 0B 2.2Gi
Swap 行の total の値には、元のスワップ空間と新しい 250MB のファイルの合計サイズが反映されているはずです。例えば、2G のスワップから開始した場合、新しい合計は約 2.2G になります。
これで、Linux システムに新しいスワップファイルを追加して確認し、より多くの仮想メモリを利用できるようにすることに成功しました。
まとめ
この実験では、Linux システムに仮想メモリを追加するためにスワップファイルを作成し、有効化する方法を学びました。まず、sudo swapon --show コマンドを使用して既存のスワップ空間の設定を確認し、システムの仮想メモリの現状を把握して出力を解釈することから始めました。
初期確認の後、dd コマンドを使用して必要なディスク容量を割り当て、新しいスワップファイルを作成しました。次に、mkswap を使用してこのファイルをスワップ用にフォーマットし、swapon コマンドで有効化して、システムが即座に利用できるようにしました。最後に、再び swapon --show を実行して新しいスワップファイルが正常に追加され、アクティブであることを確認し、設定の更新を検証しました。



