下载的文件被删除后,传输继续做种

下载的文件被删除后,传输继续做种

我在 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 -sdf /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,Transmission 还如何进行播种工作?是否可以恢复文件?由于dudf给出不同的输出,文件是否被重新定位到其他地方?

答案1

如果一个程序在删除它时打开了一个文件,内核只会将其标记为已删除,但不会释放磁盘空间,以避免破坏程序(无法知道该文件对于该程序的功能是否重要)程序)。当程序关闭文件时,磁盘空间被释放。发生这种情况时,当您查看/proc/<pid>/fd打开该文件的进程时,您将看到“(已删除)” 。

因此,内核有助于不删除传输使用的文件。

如果您不想使用传输共享文件,则应该将其从传输中删除,据我记得传输甚至可以选择删除文件作为停止共享的一部分。

实际上,您可以通过复制来恢复文件,/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 或类似的目录)。

您可以找到已完成下载的所有硬链接,如中所述如何查找给定文件的所有硬链接?或者使用这个:去~/Downloads执行ls -i并记住文件的索引节点号。然后您可以通过在您的主文件夹中执行来找到另一个文件find . -inum NUM

相关内容