Não é possível excluir arquivos para o lixo em um sistema de arquivos montado em bind

6

Estou tentando configurar o diretório home compartilhado para duas instalações do Linux e, portanto, estou usando montagens de bind. Meu usuário é denominado dbz e seu diretório inicial é /home/dbz . Eu também compartilhei o diretório /home/shared onde eu armazeno meus arquivos compartilhados (esta pasta também pertence ao usuário dbz ).

Eu montei outros diretórios deste diretório compartilhado em meu diretório inicial usando binding:

mount -B /home/shared/work /home/dbz/work

Esta solução resolve minhas necessidades e o único problema que tenho e não sei como resolver é - quando estou tentando excluir um arquivo ou diretório do diretório montado, não consigo excluí-lo para a lixeira, só é possível a exclusão permanente . Por exemplo:

  • excluindo o arquivo /home/shared/work/test.txt : OK, porque foi excluído do diretório em que o arquivo test.txt reside;
  • excluindo o arquivo /home/dbz/work/test.txt : NÃO PODE, porque ... a propósito, porque o que? os bind-mounts possuem algumas restrições na exclusão de arquivos?

Finalmente um problema enviado ao bugzilla.kernel.org

    
por dbzix 18.02.2014 / 18:41

3 respostas

7

Este é um problema no kernel do Linux. Não está olhando para o verdadeiro super-bloco dos sistemas de arquivos de origem e destino:

17926 rename("d1/foo", "d2/foo")        = -1 EXDEV (Invalid cross-device link)

Parece que o problema está em do_rename() ( fs/namei.c ):

    error = -EXDEV;
    if (oldnd.mnt != newnd.mnt)
            goto exit2;

* suspiro *

    
por 19.02.2014 / 00:58
6

Para criar um diretório de lixeira, você precisa ser capaz de fazer .Trash_<uid> no ponto de montagem (pelo menos no Ubuntu ao excluir do nautilus, distro pode usar outro diretório). Se esse diretório não puder ser feito porque o pai não pode ser gravado por dbz , você não poderá fazer o backup.

Não é necessário ter o diretório pai gravável, basta criar o .Trash_<uid> como root e, em seguida, chown to dbz .

Acho mais fácil testar coisas relacionadas à criação do arquivo de lixo usando o utilitário gvfs-trash , que na verdade dá um Erro se o arquivo não puder ser descartado. Use algo como:

touch /home/dbz/work/test.txt
strace gvfs-trash /home/dbz/work/test.txt  2>&1 | grep .Trash | grep mkdir

para ver qual diretório ele realmente tenta criar.

    
por 18.02.2014 / 19:00
1

Você possui um link simbólico para qualquer um dos diretórios pai do diretório Lixeira para outro sistema de arquivos. Eu tinha ~/.local/share/Trash soft vinculado a um diretório em um sistema de arquivos diferente, o que levou a esse erro. É claro que ainda deve funcionar, mas uma alternativa é manter a Lixeira no mesmo sistema de arquivos.

Além disso, descobri que o Ubuntu trash do pacote trash-cli funciona com esse link simbólico, enquanto o gvfs-trash que é usado pelos aplicativos do gnome não funciona.

    
por 10.08.2017 / 17:28