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


8

(再ダウンロードが困難なソースから)ダウンロード中のファイルをファイルシステムの名前空間(/ tmp / blah)から誤って削除したので、このファイルを復元したいと考えています。

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

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

回答:


11

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

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

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


魅力のように機能します。これは思ったよりずっと簡単だったと思います。必要なのは、同じファイルを開いて保持する別のプログラムだけです。
ヤン

4

fdlink Linuxカーネルモジュールと簡単なアプリケーションからなるプロジェクトは、オープンファイル記述子に新しいリンクを作成することを目的としています。私はそれを試していません。


1

これでジョブが完了しますが、iノードを回復することはできません。

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

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


問題が非常に単純で、再開/再ダウンロードしかできなかった場合のみ!質問を明確にして、再度ダウンロードできるとは想定できないことを示しました。
ヤン

トラブルのように聞こえます:-) inodeベースのハッキングは低すぎるレベルでファイルシステム固有のもののようです。
Pavel

ええ、私はこれを私の質問に追加しました:それが何かの違いを生むなら、私は主にext4に関心があります。
ヤン

1

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.