(再ダウンロードが難しいソースから)ダウンロードしているファイルがありますが、ファイルシステムの名前空間(/ tmp/blah)から誤って削除されたので、このファイルを回復したいと思います。
通常、私はcp /proc/$PID/fd/$FD /tmp/blah
ですが、この場合、ファイルはまだダウンロード中であるため、部分的なスナップショットしか取得できません。さらに、ダウンロードが完了すると、ダウンロードプロセス(Chromeなど)によってFDが閉じられます。
Iノードで回復/ハードリンクを作成する方法はありますか?他の解決策はありますか?それが何か違いを生むなら、私は主にext4に関心があります。
テールを使用してファイルを継続的にコピーしてみてください。
tail -c +0 -f /proc/$pid/fd/$fd > filename
もちろん、ダウンロードが終了したら、手動(またはその他の外部手段)でテールプロセスを停止する必要があります。
fdlink プロジェクトは、Linuxカーネルモジュールと単純なアプリケーションで構成されており、開いているファイル記述子への新しいリンクを作成することを目的としています。私はそれを試していません。
これに対してハードリンクを実行する場合は、-sオプション(man ln
を参照)を使用する必要があるため、fdディレクトリでls -f
を実行し、ファイル番号(ほとんどの場合2桁の数字)を見つけます。 ln NUMBER destination-file -s
を作成します
これにより、iノードを回復することによってではなく、作業が完了します。
cp /proc/$PID/fd/$FD /tmp/blah
kill $PID
wget -c $URL -O /tmp/blah
または、ブラウザ全体を強制終了したくない場合は、Chromeでダウンロードを手動で停止します。