tmpfs を活用する(Ubuntu 上)

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

前準備

Ubuntu のシステム更新

作業前に、システムを最新の状態にします。 Ubuntu で OS のシステム更新を行うときは, 次のコマンドを実行します。

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

# パッケージリストの情報を更新
sudo apt update
# インストール済みのパッケージを包括的に更新 (依存関係も考慮)
sudo apt full-upgrade
# 変更をシステム全体に確実に反映させるために再起動
sudo shutdown -r now

mergerfs のインストール

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

tmpfs と mergerfs の設定手順

ここでは、tmpfs を作成し、mergerfs を使ってディスク上のディレクトリと統合して /tmp としてマウントする手順を説明します。tmpfs のみを /tmp にすると、指定したサイズを超える一時ファイルを作成したときに容量不足で失敗しますが、ディスク上のディレクトリと統合することで、この失敗を避けられます。

tmpfs の設定

実メモリを特定のディレクトリにマウントします。 そのディレクトリに配置したファイルは、ディスクではなくメモリ上に格納されます。 tmpfs 上のデータはシステムの再起動により消去されます。

設定内容例:

1. マウント先ディレクトリの作成

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

sudo mkdir /tmpfs

2. /etc/fstab への追記

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

tmpfs /tmpfs tmpfs noatime,nosuid,nodev,mode=1777,size=4000M 0 0

各フィールドとオプションの意味:

なお、tmpfs では allow_other は使用できません。これは FUSE ファイルシステム(mergerfs など)のオプションです。

設定を反映させるには、以下のコマンドを実行します。

sudo systemctl daemon-reload
sudo mount /tmpfs

3. tmpfs 設定の確認

/tmpfs が指定したサイズで正しくマウントされていることを確認します。-h オプションを使用すると、容量が読みやすい単位(例: G、M)で表示されます。

df -h /tmpfs

mergerfs の設定

設定内容例:

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

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

sudo mkdir -p /var/tmp/tmp

作成したディレクトリに、一時ファイル領域として使うためのアクセス権を設定します。1777 は、全ユーザーが書き込める一方で、他ユーザーが作成したファイルは削除できないスティッキービット付きの設定です。

sudo chmod 1777 /var/tmp/tmp

2. /etc/fstab への追記

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

/tmpfs:/var/tmp/tmp /tmp fuse.mergerfs allow_other,category.create=ff,minfreespace=100M,moveonenospc=true 0 0

各フィールドとオプションの意味:

古い解説では use_inononempty というオプションが記載されていることがありますが、現在の mergerfs ではこれらは廃止されており、指定しても動作に影響しません。

【重要】 この設定を有効にする前に、既存の /tmp ディレクトリ内に必要なファイルがないことを確認します。設定を反映させるには、システムを再起動します。

sudo shutdown -r now

3. mergerfs 設定の確認

/tmp が mergerfs によってマウントされ、統合したブランチの合計容量に近いサイズとして認識されていることを確認します。

df -h /tmp

ファイルが tmpfs 側に作成されているかは、/tmp にファイルを作成した後、/tmpfs を直接参照して確認します。

touch /tmp/testfile
ls -l /tmpfs

まとめと注意点

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

利用上の注意点: