Невозможно удалить файлы для мусора в подключенной файловой системе

Я пытаюсь настроить общий домашний каталог для двух установок Linux, и поэтому я использую bindmounts. Мой пользователь назван dbz а его домашний каталог – /home/dbz . У меня также есть общий каталог /home/shared где хранятся мои общие файлы (эта папка также принадлежит пользователю dbz ).

Я монтирую другие каталоги из этого общего каталога в свой домашний каталог, используя привязку:

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

Это решение решает мои потребности, и единственная проблема, которая у меня есть, и я не знаю, как ее решить – когда я пытаюсь удалить файл или каталог из смонтированного каталога, я не могу удалить его для мусора, возможно только постоянное удаление. Например:

  • удаление файла /home/shared/work/test.txt : ОК, поскольку удаление происходит прямо из каталога, в котором находится файл test.txt ;
  • удаление файла /home/dbz/work/test.txt : НЕ МОЖЕТ, потому что … кстати, потому что что? У bind-mounts есть некоторые ограничения на удаление файлов?

Наконец , проблема была отправлена ​​на bugzilla.kernel.org

  • Каковы каталоги .Trash-500 и .Trash-1000?
  • Как «rm» в файловой системе NTFS отличается от собственной реализации Windows?
  • Не удается удалить одно и то же имя папки дважды
  • Переместить в корзину подтверждения
  • Как найти мусорную корзину Nautilus в файловой системе
  • Как удалить файл в корзину в BASH (Linux)
  • Где файлы идут, когда выдается команда rm?
  • Как найти последние удаленные файлы на OpenSuse?
  • 3 Solutions collect form web for “Невозможно удалить файлы для мусора в подключенной файловой системе”

    Это проблема ядра Linux. Он не смотрит на настоящий супер-блок исходной и целевой файловой систем:

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

    Похоже, проблема в do_rename() ( fs/namei.c ):

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

    *вздох*

    Чтобы создать каталог мусора, вы должны иметь возможность сделать .Trash_<uid> на точке монтирования (по крайней мере, на Ubuntu при удалении из nautilus, ваш дистрибутив может использовать другой каталог). Если этот каталог не может быть создан, потому что родительский dbz не может быть dbz , вы не сможете выполнить резервное копирование.

    Не обязательно иметь родительский каталог, который можно .Trash_<uid> , достаточно создать .Trash_<uid> как root, а затем dbz его на dbz .

    Мне несколько легче проверить, что происходит с созданием файла мусора, используя gvfs-trash , которая фактически дает ошибку, если файл не может быть поврежден. Используйте что-то вроде:

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

    чтобы увидеть, какую директорию он пытается сделать.

    У вас есть символическая ссылка для любого из родительских каталогов каталога Trash в другую файловую систему. У меня была ~/.local/share/Trash soft, связанная с каталогом в другой файловой системе, что привело к этой ошибке. Конечно, он все равно должен работать, но работать – это держать корзину в одной и той же файловой системе.

    Кроме того, я обнаружил, что trash Ubuntu из пакета trash-cli работает с этой символической gvfs-trash , тогда как gvfs-trash который используется приложениями gnome, не работает.

    Linux и Unix - лучшая ОС в мире.