【Linux】 tmpfs について

に公開

はじめに

df コマンドを使用すると以下のように出力されます。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        4.0M     0  4.0M   0% /dev
tmpfs           475M     0  475M   0% /dev/shm
tmpfs           190M  436K  190M   1% /run
/dev/xvda1       20G  4.1G   16G  21% /
tmpfs           475M     0  475M   0% /tmp
/dev/xvda128     10M  1.3M  8.7M  13% /boot/efi
tmpfs            95M     0   95M   0% /run/user/1000

この中で、tmpfsdevtmpfsについて調べる機会があったので、記録を残しておきます。

調べたこと

tmpfsについて

コンピュータののメモリ上に作成されるファイルシステムで、多くのLinuxディストリビューションでOSインストール時に自動作成されます。また、ファイルシステムの一つなので、任意のディレクトリにマウントして利用できます。

デフォルトではメモリ容量の約半分がtmpfsの容量に割り当てられていますが、実際には保存されている容量分しかメモリを消費しないようになっています。
また、メモリ上のファイルシステムなので、「アクセス速度が非常に速い」というメリットを享受できます。ただしtmpfsに保存されたファイルはメモリ上に存在するため、コンピュータの電源が落ちるとデータは消えてしまいます。あくまで一時ファイルを置くのに利用するのが一般的です。

  • tmpfsは RAM だけでなくスワップ領域も使用対象となるため、物理メモリ不足時にも一部継続利用可能
  • tmpfsの自動マウント先は Linux ディストリビューションによって変わる

devtmpfs について

カーネルによって自動的にマウントされる特殊なファイルシステムで/devディレクトリ以下にあるデバイスファイルを動的に管理するために使われます。また、devtmpfsはシステムによって自動的にマウント・管理されます。
その為、ユーザーが手動で操作したり、マウントしたりする必要は基本的にはありません。

  • 簡単に言うと、「Linuxシステムが使用するデバイスの一覧』をメモリ上に動的に管理する仕組み」
  • デバイスノードの基本的な生成を担当し、udev がそれにルールを適用して命名・パーミッション設定などを行う、とのこと

tmpfsのユースケース

tmpfsを手動でマウントする場合、そのマウントポイントに用途に応じたデータを置くことで、以下のような場面で有効に活用できます。

【Webアプリやキャッシュ用の高速ストレージ】
Webアプリのキャッシュ(HTMLレンダリング結果、画像変換結果、セッションの一時データなど)は、読み書きが頻繁でありながら永続性が不要なデータです。
先述の通り、tmpfsは RAM 上に構築されたファイルシステムであるため、ディスクI/0よりもはるかに高速なアクセスが可能です。
これにより、Webアプリのレスポンス向上や処理速度の改善が期待できます。

【セキュリティ目的の一時ストレージ】
tmpfsはシステム再起動時に中身が確実に消えるため、機密性の高い一時データの保存に適しています。
例えば、一時的な暗号化キーやセキュアなファイルを置くことで、情報漏洩リスクを低減できます。

【ログの一時蓄積】
通常、ログはディスクに書き込まれますが、頻繁なディスク書き込みは I/0負荷を高め、パフォーマンス低下やストレージの寿命短縮につながることがあります。
ログを一時的に RAM 上のtmpfsに保存することで、ディスクへの書き込みを減らし、システム全体の負荷軽減やストレージの寿命延長が可能です。

※補足ですが、上記のdfコマンド出力の/runはシステムのランタイム中に必要な一時ファイルやプロセス間通信(IPC)に使用されるソケット、PIDファイル、その他のロックファイルなどの、一時的なデータが保存される場所なので、tmpfsが自動で作成・マウントされているようですね。

さいごに

tmpfsについてまとめる以下のようになりました。

  • RAM 上のファイルシステム
  • メモリーで動作するので、高速なアクセスが可能
  • マシン再起動でデータが消えるので、データの永続性はない

当然ですが、大事なデータをtmpfsに保存するのはNGですね。

Discussion