/tmpを別のボリュームに(安全に)移動するには?

/tmpを別のボリュームに(安全に)移動するには?

現在の/tmp作業機械のディレクトリがいっぱいです。問題は、それほど大きくないルートパーティションにあることです。問題を解決するために、同僚は/new/tmp他の場所にディレクトリを作成し、すべての内容を新しいディレクトリにコピーし、元のディレクトリを削除して/tmpシンボリックリンクを作成しました/tmp -> /new/tmp

ファイルをコピーしたとき(実際に私以外の人がしたことでした!)使用しなかった-aため、以下の各ファイルの所有者/new/tmpはです。また、ディレクトリrootを設定する権限もなかったので、そのファイルをコピーしました。/new/tmpデフォルトは0755でした。これは無限の問題を引き起こし、モードと所有権ビットを調整しても機械を許容動作状態に戻すことができませんでした。結局、すべてを吹き飛ばして/tmp再起動しなければなりませんでした。

/tmp多くの人がVNCを介してGnomeを実行しており、私はscreenそれを使用する独自のパイプを持っているので、このディレクトリにはさまざまなソケットやパイプなどが含まれています。

お持ちですか?安全/tmp実行中のシステムでディレクトリを別のボリュームに移動するにはどうすればよいですか?すべてが正しく機能するように実際に何をすべきかわかりません。特にパイプとソケットはどうなるのだろうか。

答え1

「クライアント」コンピュータから移動する安全な方法は、再起動する/tmpことです。ここでクライアントとは、ソケットを実行するすべてのプログラム/tmp、特にXサーバーと画面を意味します。

新しいバージョンには/tmp正しい権限(1777)が必要です。それ以外の場合は、動作するシステムを期待できません。

の場合、/tmpファイルはほとんどコピーできません。これは、ほとんどの場合、/tmpファイルの内容をファイルに保存するプログラムによって開かれるためです。ファイルをコピーすると内容はコピーされますが、プログラムはまだ古いファイルを開きます。デバッガ()を使用してアクセスできますが、ptrace再起動するよりも複雑で、多くのプログラムで実行する操作は競合だけです。

プログラム/tmpがいっぱいで新しいプログラムに切り替えるには、ファイルが開いているすべてのプログラムを再起動する必要があります。これはXとスクリーンセッションを再開することを意味するので、再起動するよりも優れていません。

新しいプログラムに切り替えることができるはずですが、共同設置。 (原理は正しいですが、試してみたことがないため、予期しない問題が発生する可能性があります。)Linuxでこれを行う方法は1つあります。

  1. /tmp手動で選択したいくつかの大容量ファイルを除くすべての既存のファイルを保持します。
  2. 1つを作成します/tmp.new(モード1777)。
  3. /tmp他のパスにさらされる:mount --bind / /.root.only次のステップで影が生成されるため、これは必要です/tmp。この手順を必要としないさまざまなフェデレーションインストールの実装があります。
  4. /.root.only/tmp共同で製作して設置し/tmp.new、 に設置してください/tmp。これにより、作成された新しいファイルが/tmp記録されますが、/tmp.newそのファイルも/.root.only/tmp表示できます/tmp。一つの可能​​性は UnionFS ヒューズunionfs-fuse /tmp.new:/.root.only/tmp /tmp

フェデレーションマウントルートに移動したくない場合(たとえば、プラットフォームで使用できないか、面倒であるため)、少なくとも古いディレクトリを削除しないでください。移動する、実行中のプログラムは引き続き古いディレクトリを使用し、新しいプログラムは新しいディレクトリを使用するようにします。 (もちろん、探す場所を/tmp設定したり、TMPDIR他に知らせないと、新しいプログラムはソケットやパイプを介して古いプログラムと通信できません。)

mv /tmp /tmp.old && mkdir /tmp

関連情報