Debian 13 “Trixie” では、デフォルトで /tmp を tmpfs としてマウントする仕様が導入された。
なお、古いバージョン(Debian 12 “Bookworm” 以前)からアップグレードしたシステムでは、再起動後にこの新しい tmpfs マウントが有効になり、既存の /tmp 上のファイルは見えなくなる。
ここではこの /tmp の tmpfs 化に伴う情報をまとめる。
全体像(要点)
- Debian 13 から、/tmp は既定で tmpfs(RAM と必要に応じて swap を利用)に置かれる。新規インストールだけでなく、Bookworm からのアップグレード後も再起動で適用される。切替後は、従来 /tmp にあったファイルが一時的に見えなくなる(下層に隠れる)ことがある。
- 自動クリーンの既定は systemd-tmpfiles により、/tmp は 10 日未使用、/var/tmp は 30 日未使用で削除。判定は最終アクセス時刻が基準。
- 役割の違いは明確:/tmp は短命・揮発(再起動で消えてよい前提)、/var/tmp は再起動後も残したい一時ファイル用(通常ディスク上)。これは FHS の設計に沿う。
- tmpfs のサイズは「予約ではなく上限」。既定上限は物理メモリのおよそ 50% 程度。実際の消費は作成した分だけで、未使用時はメモリを消費しない。必要なら size= で個別指定できる。
- 互換性面での懸念(breakage)は主に大容量の一時ファイルでの OOM/ENOSPC、/tmp を永続と誤解した実装、権限や Sticky bit の扱いなど。議論を経て性能や SSD 書込負荷の低減などの利点を重視し既定化された。
歴史と仕様変更の経緯
- 従来の Debian(〜Bookworm)では /tmp はディスク上が一般的だった。Debian 13 で既定を tmpfs に変更。
- 新規インストールはもちろん、アップグレード環境でも再起動後に tmpfs 化が反映される。これにより、切替直後は従前の /tmp 配下のファイルがマウントの下に隠れることがあるため注意。
- systemd 側では以前から、/tmp の tmpfs 化と /tmp=10 日・/var/tmp=30 日の自動クリーンという方針があり、Debian 13 でこれが取り込まれた。
/tmp(tmpfs)の性質
- 高速(RAM I/O)、再起動で揮発、自動クリーン(10 日未使用で削除)が既定。
- df に見えるサイズは上限であり、未使用分はメモリを消費しない。上限は概ね物理 RAM の 50% 程度が既定。必要に応じて size= オプションで調整できる。
- 大容量の一時ファイル(動画変換、巨大アーカイブ、重いビルド等)は /tmp ではなく /var/tmp(または任意の作業ディレクトリ)を使うのが安全。
/var/tmp の位置づけ
- 再起動後も残ってほしい一時ファイルを置く場所。FHS は「再起動を跨いで保持」を明確に規定。
- 通常はディスク上(ext4 等)にあり、systemd-tmpfiles により 30 日未使用のファイルが削除される。判定は最終アクセス時刻。
生成と存在保証(/tmp の存在チェックは原則不要)
Debian 8 “Jessie” 以降、systemd が init システムとして採用され、以後 /tmp は常に存在することが保証される。
- Debian 13 の systemd 環境では、起動時に /tmp は自動的にマウント・生成され、適切なパーミッション(1777)が保証される。
- そのため通常の運用では、スクリプト側で /tmp の存在チェックや mkdir を行う必要はない。誤ったモードで作成したり、マウントポイントを壊す危険があるため、むしろ避けるべき。
- 例外として、極小 chroot や initramfs など systemd が稼働しない環境では明示的に作成が必要になる場合がある。
調整・オプトアウト方法
- サイズやマウントオプションの調整は /etc/fstab に tmpfs /tmp を記述するのが安全かつ一般的。size=、mode=、nosuid、nodev、noexec などを必要に応じて指定。
- tmpfs 既定をやめてディスクに戻す場合は、tmp.mount を無効化(mask)する方法がある。インストーラ既定からの逸脱となるため、影響範囲を理解した上で適用する。
- 自動クリーンの保持期間を変えたい場合は、tmpfiles.d のオーバーライドで /tmp と /var/tmp の日数を設定する。
運用での実務ガイド
- 置き場所の指針:小さく短命な一時ファイルは /tmp。再起動後も残したい、またはサイズが大きいものは /var/tmp(もしくは明示の作業用ディレクトリ)。
- メモリ圧迫の回避:巨大な中間生成物は /tmp を避ける。必要なら /etc/fstab の size= で上限を調整。
- クリーンの理解:日数は最終アクセス時刻で判定。ファイルマネージャやアプリがアクセスすると延命され得る。方針変更は tmpfiles.d のオーバーライドで。
- トラブル兆候:/tmp の上限到達は ENOSPC、過大なサイズ設定や負荷集中は OOM のリスク。ワークロード設計と監視で早期に検知する。
互換性・「破壊的影響」の中身
- 懸念の中心は、大容量一時ファイルでの OOM/失敗、/tmp を永続と誤認した実装の想定違い、Sticky bit・権限まわりの取り扱い。
- これらの懸念を踏まえつつ、性能向上と SSD 書き込みの抑制などの利点を評価して、Debian 13 での既定化に至った。
旧 /tmp ディレクトリのクリーンアップ手順
Debian 12 “Bookworm” 以前からアップグレードした環境では、/tmp が tmpfs でマウントされた後も、旧ディスク上の /tmp ディレクトリがシステム内部に残っている場合がある。
これは新しい tmpfs マウントに覆い隠されているだけで、不要な領域として残存している。以下の手順で安全に確認および削除できる。
sudo mkdir /mnt/oldtmp
sudo mount --bind / /mnt/oldtmp
sudo ls -la /mnt/oldtmp/tmp
sudo rm -rf /mnt/oldtmp/tmp/*
sudo umount /mnt/oldtmp
sudo rmdir /mnt/oldtmp
sudo mount --bind / /mnt/oldtmp
sudo ls -la /mnt/oldtmp/tmp
sudo rm -rf /mnt/oldtmp/tmp/*
sudo umount /mnt/oldtmp
sudo rmdir /mnt/oldtmp
上記の操作により、ディスク上に残っていた旧 /tmp の内容を直接参照・削除できる。
再起動しても再び /tmp は tmpfs としてマウントされ、RAM 上の一時領域として運用される。
参考情報(設計の根拠と読み解きのポイント)
- Debian 13 リリースノート:/tmp の tmpfs 既定化、アップグレード時の注意点(切替後に従来 /tmp の中身が隠れるケースなど)。
- FHS(Filesystem Hierarchy Standard):/tmp と /var/tmp の役割分担(/var/tmp は再起動を跨いで保持)。
- systemd tmpfiles の既定:/tmp は 10 日未使用、/var/tmp は 30 日未使用で削除。オーバーライド可。
- tmpfs の容量解釈:上限指定であり未使用分はメモリを消費しない。既定上限は物理 RAM のおよそ 50% 程度。必要に応じて size= で調整。
- オプトアウト手段:/etc/fstab による明示設定、tmp.mount の mask、tmpfiles.d による保持期間ポリシー上書き。
以上、 Debian 13 “Trixie” の標準方針に沿って、一時ディレクトリの設計意図・デフォルト挙動・運用上の注意点を整理した。