Jak usunąć pliki .fuse_hidden *?

34

Mam mały serwer Linux (Debian Squeeze), który obsługuje serwer Samba skonfigurowany do udostępniania niektórych folderów niektórym komputerom z systemem Windows. Podczas próby usunięcia jednego z katalogów z systemu Windows wystąpił błąd „Nie można usunąć folderu”.

Próbowałem usunąć katalog z konsoli Linuksa. Mam podobny błąd:

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

Wymieniłem zawartość katalogu i znalazłem plik o nazwie .fuse_hidden, a następnie numer szesnastkowy (000bd8c100000185).

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

Próbowałem usunąć plik .fuse_hidden, ale nowy plik został utworzony natychmiast (zwróć uwagę na zmianę numeru szesnastkowego).

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

Próbowałem również użyć programu Midnight Commander, aby usunąć plik bez powodzenia.

Inne rozwiązania, które do tej pory znalazłem, obejmują GUI i mam tylko konsolę.

Wszelkie sugestie są mile widziane.

Lando
źródło
3
Demon bezpiecznika wydaje się być aktywny. Zatrzymaj go przed usunięciem pliku.
ott--
W międzyczasie zmieniłem swój komentarz.
ott--
To była moja pierwsza myśl, ale nie mogłem znaleźć usługi Fuse do zatrzymania, zamiast tego ponownie uruchomiłem Sambę, problem rozwiązany, plik zniknął. Dzięki.
Lando
rm dir-name -rf?
Hauke ​​Laging

Odpowiedzi:

52

Jest to podobne do tego, co dzieje się po usunięciu pliku, który inny system otworzył na wierzchowcu NFS. Problem polega na tym, że plik został usunięty z systemu plików, a jego „liczba linków” wynosiła> 1, co oznacza, że ​​inne procesy nadal go otwierają.

  • Zaloguj się do systemu, w którym plik fizycznie się znajduje. (bez montażu sieciowego)
  • Wykonaj, lsof dir-name/.fuse_hidden000bd8c100000185aby dowiedzieć się, jakie procesy utrzymują otwarty uchwyt pliku.
  • Zakończ te procesy, jeśli ma to sens, lub wymyśl, jakie kroki możesz wykonać, aby „z wdziękiem” zwolnić otwarty uchwyt pliku bez przerywania procesu.

Zwykle po usunięciu pliku w lokalnym systemie plików, który otworzył inny proces, system operacyjny jest zgodny z żądaniem i usuwa go z drzewa katalogów, ale i-węzeł, na który wskazuje to drzewo, jest nadal uważany za używany przez system operacyjny. Za każdym razem, gdy plik jest otwierany, jego „liczba linków” zwiększa się o jeden, a miejsce jest zwalniane tylko wtedy, gdy liczba linków osiąga zero.

Gdy napotkasz tego rodzaju problem, oznacza to, że system operacyjny z jakiegokolwiek powodu postanowił nie usuwać tego pliku z drzewa katalogów: zwykle dlatego, że ma powód, by sądzić, że nadal muszą być dostępne dla rzeczy, które nie mogą wykorzystać bezpośredni numer i-węzła. Początkowo może się wydawać, że jest zgodny, ale za kulisami system operacyjny zmienia jego nazwę na ukryty prefiks kropki, dzięki czemu jest nadal dostępny z pewną formą adresowania ścieżki do systemu plików. Przestrzeń będzie nadal zwolniona, gdy liczba linków osiągnie zero, ale ten obiekt pozostanie w katalogu, dopóki linki nie znikną.

Andrew B.
źródło
Domyślam się, że miało to związek z pewną usługą wciąż używającą pliku (w tym przypadku Samby), zapomniałem o lsof.
Lando
Doprowadź mnie do problemu. lsofpomógł mi określić, który proces nadal czyta plik, i wtedy byłem w stanie usunąć wszystko!
ThanksForAllTheFish,
Mam problem, że lsofi fusernie wywołuję żadnych procesów dla tego pliku, jakieś sugestie?
mxmlnkn
0

Dziękuję za sugestie, ale nic mi nie działało. Ale znalazłem rozwiązanie: przeniosłem zewnętrzny dysk SSD na komputer z systemem Windows. Korzystając z Eksploratora plików (z zaznaczoną „Ukrytymi elementami”), nawigowałem do .Trasheskatalogu, mogłem usunąć .fuser_hiddenplik.

Mam nadzieję że to pomoże!

RobertC
źródło