A transmissão mantém a propagação depois que o arquivo baixado foi excluído

0

Estou usando o Transmission 2.82 no Xubuntu 14.04, e notei que depois de excluir o arquivo baixado permanentemente do gerenciador de arquivos, o trabalho no Transmission ainda estava ativo e mantido semeando, e não houve alteração no espaço livre em disco, então Eu tentei ls -l /proc/[pid]/fd e eu tenho isso:

lr-x------ 1 name name 64 May 4 20:39 81 -> /home/downloads/ubuntu-16.04-server-i386.iso (deleted)

eu então fiz o download novamente do arquivo e o excluí com rm sem excluir o trabalho e o espaço em disco foi liberado e ls -l /proc/[pid]/fd não deu entrada relacionada ao arquivo e o trabalho foi semeado em 0kb / s.

mas para ver se foi rm que fez a diferença, tentei três vezes excluir o arquivo baixado com rm enquanto o trabalho estava sendo propagado, e cada vez que recebi o mesmo resultado, os trabalhos estavam ativos e sem propagação, sem alteração no espaço livre em disco e ls -l /proc/[pid]/fd resultou em algo como:

lr-x------ 1 name name 64 May 4 20:39 26 -> /home/downloads/ubuntu-16.04-server-i386.iso (deleted)

e ls ubuntu-16.04-server-i386.iso gived:

ls: cannot access ubuntu-16.04-server-i386.iso: No such file or directory

Eu também tentei du -s e df /home na pasta de download com outro trabalho, respectivamente, quando:

Trabalho em execução, arquivo não excluído:
$ du -sh
11G e $ df -h /home e Filesystem Size Used Avail Use% Mounted on /dev/sda1 58G 54G 1.2G 98% /

Execução da tarefa, arquivo excluído (com rm ) (e a Transmissão mantém a propagação após a exclusão):
$ du -sh
9.9G e $ df -h /home e Filesystem Size Used Avail Use% Mounted on /dev/sda1 58G 54G 1.2G 98% /

Job excluído, arquivo excluído (na etapa anterior):
$ du -sh
9.9G e $ df -h /home e Filesystem Size Used Avail Use% Mounted on /dev/sda1 58G 54G 1.5G 98% /

Então, o que aconteceu com o arquivo baixado? Depois que eu rm , como Transmissão ainda está semeando o trabalho? É possível restaurar o arquivo? Como du e df fornecem saídas diferentes, o arquivo é realocado para outro lugar?

    
por Tango 04.05.2016 / 22:26

2 respostas

2

Se um programa tem um arquivo aberto quando você o exclui, o kernel apenas o marca como apagado, mas não libera o espaço do disco, para evitar quebrar o programa (não é possível saber se o arquivo é importante para o programa). função do programa). Quando o programa fecha o arquivo, o espaço do disco é liberado. Quando isso acontece, você verá o "(excluído)" quando você olha para /proc/<pid>/fd para o processo que tem o arquivo aberto.

Portanto, este é o kernel sendo útil para não remover um arquivo que a transmissão usa.

Se você não quiser compartilhar um arquivo usando transmissão, você deve removê-lo da transmissão, até onde eu saiba, a transmissão tem a opção de excluir os arquivos como parte da interrupção para compartilhá-lo.

Você pode restaurar o arquivo copiando-o de /proc/<pid>/fd/ , pois é um link para o arquivo (apenas um que só existe enquanto o processo estiver aberto).

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
    
por 05.05.2016 / 00:26
0

Eu suspeito que a transmissão salva o arquivo em um local desconhecido para você durante o download. Depois de terminado, cria um hardlink para o mesmo arquivo na sua pasta de download, mas ainda mantém o hardlink em seu próprio diretório (provavelmente ~ / .transmission ou algo parecido).

Você pode encontrar todos os hardlinks para o download final, conforme explicado em Como encontrar todos os links para um determinado arquivo? ou usar isto: Vá para ~/Downloads execute ls -i e lembre-se do inode-number do seu arquivo. Então você pode encontrar o outro arquivo executando find . -inum NUM em sua pasta pessoal.

    
por 04.05.2016 / 23:30