У меня есть небольшой сервер 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 удалить файл, но безуспешно.
Другие решения, которые я нашел до сих пор, включают графический интерфейс, и у меня есть только консоль.
Любые предложения приветствуются.
rm dir-name -rf
?Ответы:
Это похоже на то, что происходит при удалении файла, который другая система открыла при монтировании NFS. Проблема в том, что файл был удален из файловой системы, в то время как его «счетчик ссылок» был> 1, что означает, что другие процессы все еще держат его открытым.
lsof dir-name/.fuse_hidden000bd8c100000185
чтобы узнать, какие процессы удерживают дескриптор файла открытым.Обычно, когда вы удаляете файл в локальной файловой системе, открытый другим процессом, ОС выполняет ваш запрос и удаляет его из дерева каталогов, но индекс, на который указывает это дерево, все еще считается используемым операционной системой. Каждый раз, когда файл открывается, его «счетчик ссылок» увеличивается на единицу, и пространство действительно освобождается только тогда, когда это число ссылок достигает нуля.
Когда вы сталкиваетесь с проблемой такого рода, это означает, что ОС по какой-то причине решила не удалять этот файл из дерева каталогов: обычно потому, что у нее есть основания полагать, что к ней по-прежнему необходимо обращаться с вещами, которые не могут использовать прямой номер инода. На первый взгляд может показаться, что он соответствует требованиям, но за кулисами ОС переименовывает его, чтобы иметь скрытый точечный префикс, так что он по-прежнему доступен с некоторой формой адресации пути файловой системы. Пространство все еще будет освобождено, когда количество ссылок достигнет нуля, но этот объект будет оставаться в каталоге до тех пор, пока ссылки не исчезнут.
источник
lsof
помог мне определить, какой процесс все еще читает файл, и я к тому времени смог удалить все!lsof
иfuser
я не поднимаю никаких процессов для этого файла, какие-либо предложения?Спасибо за предложения, но у меня ничего не получалось. Но я нашел решение: я перенес внешний SSD на ПК с Windows. С помощью проводника (с пометкой «Скрытые элементы») я перешел в
.Trashes
каталог и смог удалить.fuser_hidden
файл.Надеюсь это поможет!
источник