Как удалить .fuse_hidden * файлы?

34

У меня есть небольшой сервер Linux (Debian Squeeze), на котором работает сервер Samba, который настроен для совместного использования некоторых папок с некоторыми машинами Windows. При попытке удалить один из каталогов из окон я получил ошибку «Невозможно удалить папку».

Я попытался удалить каталог из консоли Linux, я получил похожую ошибку:

# rm dir-name -rf
rm: cannot remove `dir-name': Directory not empty

Я перечислил содержимое каталога и нашел файл с именем .fuse_hidden, за которым следует шестнадцатеричное число (000bd8c100000185).

# ls -la dir-name
-rwxrwxrwx 1 root root 5120 Feb 13 11:46 .fuse_hidden000bd8c100000185

Я попытался удалить файл .fuse_hidden, но новый файл был создан мгновенно (обратите внимание на изменение шестнадцатеричного числа).

# rm dir-name/.fuse_hidden000bd8c100000185
# ls -la dir-name
-rwxrwxrwx 1 root root 5120 Feb 13 11:46 .fuse_hidden000bd8c100000186

Я также попытался с помощью Midnight Commander удалить файл, но безуспешно.

Другие решения, которые я нашел до сих пор, включают графический интерфейс, и у меня есть только консоль.

Любые предложения приветствуются.

Ландо
источник
3
Демон fuse, кажется, активен. Остановите его перед удалением файла.
ot--
Тем временем я изменил свой комментарий.
ott--
Это была моя первая мысль, но я не смог найти службу Fuse для остановки, вместо этого я перезапустил Samba, проблема решена, файл исчез. Спасибо.
Ландо
rm dir-name -rf?
Хауке Лагинг

Ответы:

52

Это похоже на то, что происходит при удалении файла, который другая система открыла при монтировании NFS. Проблема в том, что файл был удален из файловой системы, в то время как его «счетчик ссылок» был> 1, что означает, что другие процессы все еще держат его открытым.

  • Войдите в систему, где физически находится файл. (без подключения к сети)
  • Выполните, lsof dir-name/.fuse_hidden000bd8c100000185чтобы узнать, какие процессы удерживают дескриптор файла открытым.
  • Завершите эти процессы, если это имеет смысл, или выясните, какие шаги вы можете выполнить, чтобы «изящно» освободить дескриптор открытого файла, не прерывая процесс.

Обычно, когда вы удаляете файл в локальной файловой системе, открытый другим процессом, ОС выполняет ваш запрос и удаляет его из дерева каталогов, но индекс, на который указывает это дерево, все еще считается используемым операционной системой. Каждый раз, когда файл открывается, его «счетчик ссылок» увеличивается на единицу, и пространство действительно освобождается только тогда, когда это число ссылок достигает нуля.

Когда вы сталкиваетесь с проблемой такого рода, это означает, что ОС по какой-то причине решила не удалять этот файл из дерева каталогов: обычно потому, что у нее есть основания полагать, что к ней по-прежнему необходимо обращаться с вещами, которые не могут использовать прямой номер инода. На первый взгляд может показаться, что он соответствует требованиям, но за кулисами ОС переименовывает его, чтобы иметь скрытый точечный префикс, так что он по-прежнему доступен с некоторой формой адресации пути файловой системы. Пространство все еще будет освобождено, когда количество ссылок достигнет нуля, но этот объект будет оставаться в каталоге до тех пор, пока ссылки не исчезнут.

Андрей Б
источник
Я догадался, что это связано с каким-то сервисом, все еще использующим файл (в данном случае Samba), я забыл про lsof.
Ландо
Приведи меня к проблеме. lsofпомог мне определить, какой процесс все еще читает файл, и я к тому времени смог удалить все!
Спасибо за все TheFish
У меня проблема, lsofи fuserя не поднимаю никаких процессов для этого файла, какие-либо предложения?
mxmlnkn
0

Спасибо за предложения, но у меня ничего не получалось. Но я нашел решение: я перенес внешний SSD на ПК с Windows. С помощью проводника (с пометкой «Скрытые элементы») я перешел в .Trashesкаталог и смог удалить .fuser_hiddenфайл.

Надеюсь это поможет!

RobertC
источник