Linux でスワップファイルを作成して有効化する

LinuxBeginner
オンラインで実践に進む

はじめに

この実験では、Linux でスワップファイルを作成して有効化する基本的な管理作業を学びます。物理 RAM が不足したとき、スワップファイルによってシステムの仮想メモリを増やせます。基本的なコマンドラインユーティリティを実際に使ってシステムリソースを効率的に管理し、専用のスワップパーティションを作成する代わりに、柔軟な方法でスワップ領域を追加します。

まず、swapon コマンドを使って現在のスワップ領域を確認します。次に、dd でスワップ領域用のファイルを作成し、mkswap でスワップとして使用できる形式にします。その後、ファイルを有効化し、再起動後に Linux が自動的に再有効化するよう設定します。最後に、新しいスワップファイルが正しく設定され、システムに認識されていることを確認します。

swapon で現在のスワップ領域を確認する

このステップでは、Linux システムで現在のスワップ領域の設定を確認する方法を学びます。スワップ領域は、物理メモリ(RAM)がいっぱいになったときに仮想メモリとして使用されるハードディスク上の領域です。これにより、物理 RAM だけでは収まらない数のアプリケーションをシステムで実行できます。

まず、ページングとスワップに使用するデバイスやファイルを指定する swapon コマンドを使います。ここでは --show オプションを付けて、現在有効なスワップデバイスの概要を表示します。スワップ領域の管理は管理者作業のため、root 権限でコマンドを実行する sudo が必要です。

ターミナルはすでに ~/project ディレクトリに移動しています。次のコマンドを実行してください。

sudo swapon --show

次のような出力が表示されます。NAMESIZE などの内容は、仮想マシンの初期設定によって異なります。スワップ領域が設定されていない場合、このコマンドは何も出力しません。

NAME        TYPE      SIZE USED PRIO
/dev/loop12 partition   2G   0B   -2

出力の各項目は次のとおりです。

  • NAME:スワップデバイスまたはファイルの名前です。この例では、ループデバイス(/dev/loop12)です。
  • TYPE:スワップ領域の種類です。partition または file になります。
  • SIZE:スワップ領域の合計サイズです。
  • USED:現在使用中のスワップ領域のサイズです。
  • PRIO:スワップ領域の優先度です。複数のスワップ領域がある場合、優先度の高いものが先に使用されます。

このコマンドによって、システムの現在のスワップ設定を確認できました。次のステップでは、ディスクを再パーティション化せずにスワップ領域を追加できる柔軟な方法として、新しいスワップファイルを作成して有効化します。

dd でスワップ領域用のファイルを作成する

このステップでは、新しいスワップ領域として使用する専用ファイルを作成します。スワップファイルを使う方法は、ハードディスクを再パーティション化する必要がないため柔軟です。

ここでは、データのコピーと変換に使用する強力なユーティリティ dd コマンドを使います。dd/dev/zero という特殊なシステムデバイスから読み取ることで、指定したサイズのファイルを作成できます。/dev/zero は、ヌル文字(ゼロ)を無限に出力するデバイスです。

現在のディレクトリ(~/project)に swapfile という名前の 250MB のファイルを作成するには、次のコマンドを実行します。作成したファイルは最終的にシステムが管理するため、sudo が必要です。

sudo dd if=/dev/zero of=swapfile bs=1M count=250

このコマンドの各部分は次のとおりです。

  • sudo:root 権限でコマンドを実行します。
  • dd:使用するコマンドラインユーティリティです。
  • if=/dev/zeroinput file(入力ファイル)を指定します。/dev/zero はヌル文字のストリームを出力する特殊ファイルです。
  • of=swapfileoutput file(出力ファイル)を指定します。現在のディレクトリに swapfile という名前のファイルを作成します。
  • bs=1Mblock 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 のフォーマットと権限の保護が完了しました。次のステップで有効化すると、システムが使用できる状態になります。

新しいスワップファイルを有効化し、永続化する

swapfile の作成と準備が完了しました。ファイルはフォーマット済みで適切な権限も設定されていますが、Linux カーネルはまだこのファイルを仮想メモリとして使用していません。このステップでは、スワップファイルを有効化してシステムから利用できるようにします。

もう一度 swapon コマンドを使用します。最初のステップでは --show オプションを付けて現在の設定を表示しました。今回は、有効化する swapfile のパスを引数として指定します。

~/project にあるターミナルで、次のコマンドを実行して新しいスワップ領域を有効化してください。

sudo swapon swapfile

コマンドの内容を確認しましょう。

  • sudo:スワップ領域の有効化は root 権限が必要なシステムレベルの操作であるため、使用します。
  • swapon:デバイスやファイルをスワップ用に有効化するコマンドです。
  • swapfile:有効化するファイル名です。ファイルがある ~/project ディレクトリにいるため、完全なパスを指定する必要はありません。

コマンドが成功した場合、出力はありません。これは多くの Linux コマンドで一般的な動作です。何も表示されなければ成功しています。

swapon コマンドで有効化したファイルは、現在の起動中に限って有効です。再起動後も Linux が自動的に有効化するようにするには、スワップファイルの絶対パスを含むエントリを /etc/fstab に追加します。

echo '/home/labex/project/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

6 つのフィールドは、スワップファイル、スワップにはマウントポイントがないことを示す noneswap タイプ、標準の sw オプションを指定します。最後の 2 つの 0 では、ダンプとファイルシステムチェックを無効にします。

これで 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

このように、システムは 250Mfile タイプのスワップ領域を認識しています。また、優先度(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 コマンドで有効化しました。また、Linux が再起動後に再有効化できるよう、/etc/fstab に追加しました。最後に、swapon --show をもう一度実行し、新しいスワップファイルが正常に追加され、有効になっていることを確認しました。