web-dev-qa-db-ja.com

cpの代わりにlnを使用してLinuxで開いているが削除されたファイルを回復する方法は?

(再ダウンロードが難しいソースから)ダウンロードしているファイルがありますが、ファイルシステムの名前空間(/ tmp/blah)から誤って削除されたので、このファイルを回復したいと思います。

通常、私はcp /proc/$PID/fd/$FD /tmp/blahですが、この場合、ファイルはまだダウンロード中であるため、部分的なスナップショットしか取得できません。さらに、ダウンロードが完了すると、ダウンロードプロセス(Chromeなど)によってFDが閉じられます。

Iノードで回復/ハードリンクを作成する方法はありますか?他の解決策はありますか?それが何か違いを生むなら、私は主にext4に関心があります。

8
Yang

テールを使用してファイルを継続的にコピーしてみてください。

tail -c +0 -f /proc/$pid/fd/$fd > filename

もちろん、ダウンロードが終了したら、手動(またはその他の外部手段)でテールプロセスを停止する必要があります。

11
Stijn Hoop

fdlink プロジェクトは、Linuxカーネルモジュールと単純なアプリケーションで構成されており、開いているファイル記述子への新しいリンクを作成することを目的としています。私はそれを試していません。

4
coneslayer

これに対してハードリンクを実行する場合は、-sオプション(man lnを参照)を使用する必要があるため、fdディレクトリでls -fを実行し、ファイル番号(ほとんどの場合2桁の数字)を見つけます。 ln NUMBER destination-file -sを作成します

1
meisterlei

これにより、iノードを回復することによってではなく、作業が完了します。

cp /proc/$PID/fd/$FD /tmp/blah
kill $PID
wget -c $URL -O /tmp/blah

または、ブラウザ全体を強制終了したくない場合は、Chromeでダウンロードを手動で停止します。

1
Pavel