tmpfs
tmpfs (temporary file system、一時ファイルシステム) (以前は shmfs として知られていました) はファイルを動的 (揮発性) メモリーに保存するために作成される仮想ファイルシステムです。tmpfs は典型的には RAM 上に作成されます。
(RAM のような) 揮発性メモリーはシステムがシャットダウン、再起動、あるいはクラッシュするとファイルを維持できません。名前から明らかなように、tmpfs は短命なファイルだけのために作成されたものです。tmpfs には復元可能な/再生成可能なファイルだけを保存するのが最良の方法です。
Linux では、ramfs (random access memory file system)は tmpfs によって置き換えられました。以前の ramfs はシステムのメモリーが足りなくなった場合にうまく動作しなかったためです。tmpfs ではより多くの容量が必要になった場合、割り当て済みの領域が事前に設定した最大値に達するまで自動的にファイルシステムを拡張することができます; 利用可能であれば、それからスワップ領域が使用されます。
Linux での一時ファイルシステムの使用例は多数あり、不揮発性のデータを物理的に保存する必要がない /tmp ディレクトリーはその一つです。
systemd を使っている場合、/tmp ディレクトリーはデフォルトで tmpfs としてマウントされています。この動作を無効にして /etc/fstab で手動マウントするにはこの節 を見てください。
インストール
カーネル
ユーザーは以下のカーネルオプションを有効にする必要があります:
File systems --->
Pseudo filesystems --->
[*] Tmpfs virtual memory file system support (former shm fs)
[ ] Optional drivers
オプション | 説明 |
---|---|
Tmpfs POSIX Access Control Lists | ACL パーミッションを有効にする。 |
Tmpfs extended attributes | メタデータのサポートを有効にする。 |
使い方
コマンド1つで tmpfs を生成しマウントする:
root #
mount -t tmpfs tmpfs /MOUNTPOINT
size マウントオプションを指定することでファイルシステムの最大サイズを制御できます (デフォルト: システム RAM の半分)。tmpfs はこのメモリーをあらかじめ確保するのではなく、必要なメモリーのみを割り当てることに注意してください。
systemd
systemd を使用している場合 /tmp ディレクトリーはデフォルトで tmpfs としてマウントされ、大量の RAM を消費せずかつ十分大きいと思われるデフォルトサイズになります。
以下のコマンドを使ってマウントされている一時ファイルシステムを表示できます:
root #
findmnt --target /tmp
このコマンドは /tmp マウントポイントが tmpfs ファイルシステムかどうか、またそうしたファイルシステムのサイズを表示します。
この動作を無効にし /etc/fstab を使ってこのディレクトリーの制御を取り戻すためには、以下のコマンドを実行する必要があります:
root #
systemctl mask tmp.mount
このコマンドによって /tmp はもはや tmpfs としてマウントされなくなり、自動的にブロックデバイスに切り替わります。
ここで /tmp 用の tmpfs を手動で作成する行を /etc/fstab に書き加えましょう。
tmpfs /tmp tmpfs rw,nosuid,noatime,nodev,size=4G,mode=1777 0 0
OpenRC
OpenRC のユーザーはマウントポイントを /etc/fstab に追加するだけです:
tmpfs /tmp tmpfs rw,nosuid,noatime,nodev,size=4G,mode=1777 0 0
他の考慮すべきディレクトリー
システムのパフォーマンスを高速化するために tmpfs としてマウントしたくなるかもしれないディレクトリーが他にもいくつかあります。それらを /etc/fstab で手動マウントする前に、findmnt コマンドを使って既に tmpfs が使われていないか確認するようにしてください。
root #
findmnt --target /<directory-to-check>
ディレクトリー | 目的 |
---|---|
/run | 実行時可変データ。最近のブート以降の実行中のシステムに関する情報、たとえば現在ログインしているユーザーや実行中のデーモンなど。 メモ
通常はこれを手動で設定する必要はありません。サポートされている init システムの OpenRC と systemd はいずれも、/run を デフォルトで tmpfs を使用してマウントするでしょう。何らかの理由で手動でマウントする必要がある場合は、適切なパーミッション (0755 / drwxr-xr-x) を設定するのを忘れないでください! |
/var/run | 実行時可変データ。このディレクトリーはそのシステムのブート以降のシステム情報を含んでいます。 |
/var/lock | ロックファイル。現在使用中のリソースを追跡するファイル。 |
おわりに
/tmp ディレクトリーのような不揮発性のファイルに対して一時ファイルシステムを使用することで、システムはキャッシュファイルや保存されているセッションメディアに非常に高速かつ迅速にアクセスできるようになります。これは、クッキーをアプリケーションを高速化する揮発性メモリーに保存できるため、ブラウザでウェブサーフィンする場合にも役立ちます; 再起動のたびにそれらは RAM から消去されます。 分析のために一時ファイルを保持する必要がある場合には、/tmp やその他のディレクトリーに tmpfs を使うのは避けるべきです。tmpfs のマウントポイントに保存されているデータはシステムが再起動されたり電源が切れた時にすべて失われます。
技術の進歩
一部のハードウェア製造業者は、 RAM よりは低速ですが SSD よりは高速なキャッシュドライブとして使用するためのデバイスを提供しています。これらのデバイスは通常 PCIe 拡張カードに搭載されており、PCIe から M.2 スロットへのアダプターを持つかまたはメモリーデバイス全体が PCIe カードに組み込まれています。
不揮発性で高速、汎用かつ SSD/SAS/SATA より速い製品が必要な場合、これらの高速な製品を検討すべきです。もちろんこれらのデバイスは tmpfs でマウントするのではなく、伝統的なパーティションファイルシステムを使用してください。
Intel 3Dx Optane メモリーキャッシュといった技術も使用可能ですが、この技術は SSD よりも多用途であるにもかかわらず、いまだ十分に使い込まれていません。それでもこれは素晴らしい中間点です。将来技術が進歩するにつれて改善され、正しく構成されれば現在よりもかなり高速なコンピューティング体験ができるようになるでしょう。
関連項目
- Portage TMPDIR on tmpfs — It is unlikely that tmpfs will provide any performance gain for modern systems
- Zram — a Linux kernel feature and userspace tools for creating compressible RAM-based block devices.