私はXubuntu 14.04でTransmission 2.82を使用していますが、ファイルマネージャからダウンロードしたファイルを永久に削除しても、Transmissionの操作はまだアクティブでシードを維持し、使用可能なディスク容量が変更されていないことを確認してみましたls -l /proc/[pid]/fd
。見つけた:
lr-x------ 1 name name 64 May 4 20:39 81 -> /home/downloads/ubuntu-16.04-server-i386.iso (deleted)
その後、ファイルを再ダウンロードし、ジョブを削除せずに削除しrm
ましたが、ディスク容量が空になり、ファイルにls -l /proc/[pid]/fd
関連するエントリが提供されず、ジョブは0kb / sにシードされました。
rm
しかし、これが違いを確認するために、ジョブがシードされてrm
いる間にダウンロードしたファイルを削除しようとしました。そして、同じ結果が得られるたびにジョブがアクティブになりシードされ、使用可能なディスク容量に変更はありませんでした。そして、ls -l /proc/[pid]/fd
次のような結果が出ました。
lr-x------ 1 name name 64 May 4 20:39 26 -> /home/downloads/ubuntu-16.04-server-i386.iso (deleted)
そしてls ubuntu-16.04-server-i386.iso
以下を提供します:
ls: cannot access ubuntu-16.04-server-i386.iso: No such file or directory
また、ダウンロードフォルダdu -s
で別々に別の操作を試してみました。df /home
ジョブが実行中であり、ファイルは削除されません。
$ du -sh
11G
$ df -h /home
Filesystem Size Used Avail Use% Mounted on /dev/sda1 58G 54G 1.2G 98% /
ジョブが実行中でファイルが削除されます(使用rm
)(削除後も転送はシードされたままです)。
$ du -sh
9.9G
$ df -h /home
Filesystem Size Used Avail Use% Mounted on /dev/sda1 58G 54G 1.2G 98% /
ジョブの削除、ファイルの削除(前の手順):
$ du -sh
9.9G
$ df -h /home
Filesystem Size Used Avail Use% Mounted on /dev/sda1 58G 54G 1.5G 98% /
では、ダウンロードしたファイルはどうなりますか?その後、転送はどのようにシード操作を実行しますかrm
?ファイルを回復できますか?du
そして他の出力を提供するので、df
ファイルは別の場所に再配置されますか?
答え1
プログラムがファイルを削除するときに開いているファイルがある場合、カーネルはそのファイルを削除済みとしてマークするだけで、プログラムの中断を防ぐためにディスク容量を確保しません(ファイルがプログラムの機能にとって重要であるかどうかはわかりません)。プログラムがファイルを閉じると、ディスク領域が解放されます。この場合、/proc/<pid>/fd
ファイルを開いたプロセスを見ると「(削除済み)」と表示されます。
したがって、カーネルは転送に使用されるファイルを削除しないようにします。
Transportを使用してファイルを共有したくない場合は、Transportからファイルを削除する必要があります。私が覚えているので、Transportには共有停止の一部としてファイルを削除するオプションもあります。
/proc/<pid>/fd/
ファイルへのリンク(プロセスが開いている間のみ存在します)なので、実際にファイルをコピーして復元できます。
root@mypc:~# pgrep transmission
1470
root@mypc:~# cd /proc/1470/fd
root@mypc:/proc/1470/fd# ls -l | grep deleted
lr-x------ 1 user user 64 Dec 8 02:55 56 -> /mnt/download/my.file (deleted)
root@mypc:/proc/1470/fd# cp 56 /mnt/download/myrestored.file
答え2
転送によってファイルをダウンロードしたときに不明な場所にファイルが保存されるようです。完了すると、ダウンロードフォルダに同じファイルへのハードリンクが作成されますが、ハードリンクはまだ独自のディレクトリに保持されます(おそらく〜/.transmissionなど)。
次の説明に従って、完了したダウンロードへのすべてのハードリンクを見つけることができます。特定のファイルへのすべてのハードリンクを見つける方法は?または以下を使用してください。ファイルのinode番号を覚えておいてください~/Downloads
。ls -i
その後、ホームフォルダから実行して他のファイルを見つけることができますfind . -inum NUM
。