MENU

一時置き場に置いたファイルがいつの間にか消える理由と残す設定

目次

/tmp と /var/tmp が消える理由

Linuxの一時ディレクトリには主に /tmp と /var/tmp の2種類があります。どちらも意図せず内容が消えることがあり、その原因は少し異なります。

/tmp は多くのディストリビューションで tmpfs(メモリ上のファイルシステム)としてマウントされています。tmpfsはシステムの再起動と同時に内容が失われます。ディスク上に存在する場合でも、systemd-tmpfiles による定期クリーニングの対象です。

/var/tmp は再起動をまたいでデータが残りますが、30日以上アクセスのないファイルは自動削除されます。この挙動を担うのが systemd の tmpfiles.d という設定機構です。

/tmp が tmpfs かどうかは次のコマンドで確認できます。

findmnt /tmp

出力の FSTYPE 列が tmpfs であれば、再起動のたびに内容が消えます。

クリーニングがいつ実行されるかを確認する

systemd は systemd-tmpfiles-clean.timer というタイマーを使って定期的にクリーニングを実行します。次のコマンドで次回実行時刻を確認できます。

systemctl list-timers systemd-tmpfiles-clean.timer

デフォルトでは起動から15分後と、その後は1日1回の頻度で実行されます。クリーニングのルールは /usr/lib/tmpfiles.d/tmp.conf に記述されています。

cat /usr/lib/tmpfiles.d/tmp.conf

d 行の末尾に書かれた値(10d や 30d など)がクリーニングまでの保持期間です。- は「期間による削除なし」を意味します。

ファイルを残したいときの置き場所の選び方

一時ディレクトリ以外にファイルを置く場所として、用途に応じて次の選択肢があります。

  • ホームディレクトリ(~/):ユーザーが作業中に使うファイルの保管場所として最もシンプルです。自動削除されません。
  • /var/tmp:再起動をまたいで数日〜数週間残したい場合に適しています。ただし30日が保持の目安です。
  • /opt や /srv:アプリケーションデータや配信コンテンツなど、明示的に管理したいファイルに向いています。自動クリーニングの対象外です。

「とりあえず一時置き場」として /tmp を使う運用は、再起動や定期クリーニングでデータが消えるリスクがあります。数時間以上手元に置きたいファイルは、最初から別のディレクトリを使うことを検討してください。

特定のパスをクリーニング対象から除外する設定

どうしても /var/tmp の中の特定のパスを消されたくない場合は、tmpfiles.d の設定で除外できます。

除外設定は /etc/tmpfiles.d/ 以下に新しいファイルを作って記述します。/usr/lib/tmpfiles.d/ を直接編集するとパッケージのアップデートで上書きされるため、カスタマイズは必ず /etc/tmpfiles.d/ 以下で行います。

sudo nano /etc/tmpfiles.d/keep-myfiles.conf

x タイプを使うと、そのパス以下を再帰的にクリーニング対象から除外できます。

# /var/tmp/myproject 以下をクリーニング対象から除外する
x /var/tmp/myproject

設定が正しく読み込まれているかは次のコマンドで確認できます。systemd-analyze cat-config は有効な設定ファイルの内容を優先順位込みで表示します。

systemd-analyze cat-config tmpfiles.d/keep-myfiles.conf

出力に記述した x 行が含まれていれば、次回タイマー実行から除外設定が適用されます。

/var/tmp の保持期間を変更する

30日という保持期間そのものを変更したい場合は、元の設定ファイルと同名のファイルを /etc/tmpfiles.d/ に作ることで上書きできます。まず元ファイルの名前を確認します。

grep -r '/var/tmp' /usr/lib/tmpfiles.d/

多くの環境では tmp.conf が該当します。同名ファイルを /etc/tmpfiles.d/ に作成し、保持期間を書き換えます。たとえば90日に延ばす場合は次のように記述します。

# /etc/tmpfiles.d/tmp.conf
d /tmp    1777 root root -
d /var/tmp 1777 root root 90d

末尾の値を - にすると期間による自動削除を無効にできますが、その場合は /var/tmp が際限なく肥大化する可能性があります。定期的な手動整理とセットで運用してください。

よくあるつまずき

「除外設定を書いたのに再起動後に消えた」という場合、/tmp が tmpfs であることが原因のケースがほとんどです。tmpfiles.d の x 設定はクリーニング処理からの除外であり、tmpfs のアンマウント(再起動)による消去には効きません。tmpfs が原因であれば、/var/tmp への移動が根本的な解決策です。

「保持期間の計算に使われるタイムスタンプ」については一般的に注意が必要です。systemd-tmpfiles はファイルの atime(最終アクセス時刻) を参照します。ファイルシステムのマウントオプションに noatime を指定している環境では atime が更新されないため、期待通りの保持期間にならないことがあります。/etc/fstab のマウントオプションも合わせて確認してください。

「/etc/tmpfiles.d/ に追加したファイルが効かない」という場合は、設定ファイルの記述形式のミスが考えられます。systemd-tmpfiles --create /etc/tmpfiles.d/keep-myfiles.conf を実行するとその場でパースエラーが表示されるため、構文確認に使えます。

「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。

ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。

>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)

※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次