【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
この中で、tmpfs
とdevtmpfs
について調べる機会があったので、記録を残しておきます。
調べたこと
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