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.
rm dir-name -rf
?Odpowiedzi:
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ą.
lsof dir-name/.fuse_hidden000bd8c100000185
aby dowiedzieć się, jakie procesy utrzymują otwarty uchwyt pliku.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ą.
źródło
lsof
pomógł mi określić, który proces nadal czyta plik, i wtedy byłem w stanie usunąć wszystko!lsof
ifuser
nie wywołuję żadnych procesów dla tego pliku, jakieś sugestie?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
.Trashes
katalogu, mogłem usunąć.fuser_hidden
plik.Mam nadzieję że to pomoże!
źródło