tmpfs を活用する(Ubuntu 上)

ユースケース: 実メモリに余裕がある状況で、`/tmp` のような一時的な作業領域(システム再起動時にファイルが消えても問題ない領域)を高速化したい場合。tmpfsはデータをディスクではなくメモリ上に直接配置するため、ディスクI/Oが発生せず、ファイルアクセスが非常に高速になります。

前準備

Ubuntu のシステム更新

作業前に、システムを最新の状態にしておくことを推奨します。これにより、セキュリティパッチが適用され、システムの安定性が向上します。 Ubuntu で OS のシステム更新を行うときは, 次のコマンドを実行します。

Ubuntu のインストールについては別ページ »で説明

sudo apt -y update
sudo apt -yV upgrade
sudo /sbin/shutdown -r now

mergerfs のインストール

mergerfsは、複数のディレクトリやファイルシステムを透過的に束ね、単一のディレクトリとしてマウントするためのツールです。今回はtmpfsとディスク上のディレクトリを統合するために使用します。 Ubuntu での mergerfs のインストールは,別ページで説明しています。

tmpfs と mergerfs の設定手順

ここでは、tmpfsを作成し、mergerfsを使って既存の `/tmp` ディレクトリと統合する具体的な設定手順を説明します。

tmpfs の設定

実メモリを特定のディレクトリにマウントします。 その結果,そのディレクトリに配置したファイルは,ディスクではなくメモリ上に直接格納されるようになります。 ただし、tmpfs上のデータはシステムの再起動により消去されるため注意が必要です。

設定内容例:

1. マウント先ディレクトリの作成と権限設定

次のコマンドを実行し、マウントポイントとなるディレクトリを作成します。

sudo mkdir /tmpfs

作成したディレクトリに適切な権限を設定します。一時ファイル用ディレクトリとして、全ユーザーが書き込める一方、他ユーザーが作成したファイルを削除できないようにスティッキービット (`1777`) を設定するのが一般的です。

sudo chmod 1777 /tmpfs

【注意】 chmod 777 は、全てのユーザーに読み書き実行の全権限を与えてしまい、セキュリティリスクを高めるため、通常は避けるべき設定です。用途に応じて適切な権限を設定してください。

2. /etc/fstab への追記

システムの起動時に自動的にtmpfsをマウントするため、`/etc/fstab` に以下の行を追加します。エディタ(例: `sudo nano /etc/fstab`)でファイルを開き、末尾に追記してください。

tmpfs /tmpfs tmpfs defaults,allow_other,noatime,size=4000m 0 0

オプションの主な意味:

設定を反映させるには、以下のコマンドでマウントを実行するか、システムを再起動します。

sudo mount /tmpfs

3. tmpfs 設定の確認

`/tmpfs` が指定したサイズで正しくマウントされていることを確認します。`-h` オプションを使用すると、容量が人間にとって読みやすい形式(例: GB、MB)で表示されます。

df -h /tmpfs

mergerfs の設定

設定内容例:

1. フォールバック用ディレクトリの作成と権限設定

tmpfsの容量が不足した場合に使用する、ディスク上のディレクトリを作成します。`-p` オプションは、親ディレクトリ `/var/tmp` が存在しない場合でもエラーなく作成するために指定します。

sudo mkdir -p /var/tmp/tmp

作成したディレクトリに適切な権限を設定します。`/tmp` と同様の用途で使うことを想定し、ここでもスティッキービット (`1777`) を設定します。

sudo chmod 1777 /var/tmp/tmp

【注意】 ここでも chmod 777 はセキュリティリスクがあるため、推奨されません。

2. /etc/fstab への追記

mergerfsを使って `/tmpfs` と `/var/tmp/tmp` を統合し、`/tmp` としてマウントするため、`/etc/fstab` に以下の行を追加します。

/tmpfs:/var/tmp/tmp /tmp fuse.mergerfs defaults,allow_other,use_ino,nonempty,minfreespace=100M,moveonenospc=true 0 0

オプションの主な意味:

【重要】 この設定を有効にする前に、既存の `/tmp` ディレクトリ内に必要なファイルがないことを確認してください。必要であればバックアップを取得してください。設定を反映させるには、システムを再起動するか、以下のコマンドを実行します(既存の `/tmp` を利用しているサービスがあれば、一時的に停止することが望ましい場合があります)。

sudo mount /tmp

3. mergerfs 設定の確認

`/tmp` が mergerfs によって正しく管理され、統合されたソースディレクトリの合計容量に近いサイズとして認識されていることを確認します。

df -h /tmp

まとめと注意点

この記事では、Ubuntu環境でtmpfsとmergerfsを活用し、一時ファイル用ディレクトリ `/tmp` を高速化する手順を解説しました。

利用上の重要な注意点:

これらの特性を理解した上で、一時ファイルの高速な読み書きが求められる場面でtmpfsの活用を検討してください。