現在の/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つあります。
/tmp
手動で選択したいくつかの大容量ファイルを除くすべての既存のファイルを保持します。- 1つを作成します
/tmp.new
(モード1777)。 /tmp
他のパスにさらされる:mount --bind / /.root.only
次のステップで影が生成されるため、これは必要です/tmp
。この手順を必要としないさまざまなフェデレーションインストールの実装があります。/.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