Як видалити файли .fuse_hidden *?


34

У мене є невеликий сервер Linux (Debian Squeeze), який запускає сервер Samba, який налаштований для обміну деякими папками з деякими машинами Windows. Під час спроби видалити один із каталогів з 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 видалити файл без успіху.

Інші знайдені нами рішення включають GUI, і у мене є лише консоль.

Будь-які пропозиції вдячні.


3
Демон запобіжника начебто активний. Зупиніть його перед тим, як видалити файл.
ott--

Я тим часом змінив свій коментар.
ott--

Це була моя перша думка, але я не зміг знайти службу запобіжників, щоб зупинитись, я замість цього перезапустив Samba, проблема вирішена, файл зник. Спасибі.
Ландо

rm dir-name -rf?
Hauke ​​Laging

Відповіді:


52

Це схоже на те, що відбувається, коли ви видаляєте файл, який інша система відкрила на кріпленні NFS. Проблема полягає в тому, що файл було видалено з файлової системи, тоді як його "кількість посилань" було> 1, це означає, що інші процеси все ще тримають його відкритим.

  • Увійдіть до системи, де файл фізично перебуває. (відсутність монтажу в мережі)
  • Виконати, lsof dir-name/.fuse_hidden000bd8c100000185щоб дізнатися, які процеси утримують ручку файлу відкритою.
  • Припиніть ці процеси, якщо це має сенс або розібратися, які дії ви можете виконати, щоб "витончено" звільнити відкриту ручку файлу, не припиняючи процес.

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

Якщо ви зіткнулися з проблемою подібного характеру, це означає, що ОС з будь-якої причини вирішила не видаляти цей файл із дерева каталогів: як правило, тому, що він має підстави вважати, що до нього все ще потрібно звертатися до речей, які не можуть використовувати прямий номер inode. Спочатку це може здатися відповідним, але поза кадром ОС перейменовує його на прихований точковий префікс, так що він все ще доступний з деякою формою адреси файлової системи. Простір все ще буде звільнений, коли кількість посилань досягне нуля, але цей об’єкт буде залишатися в каталозі, поки посилання не зникне.


Я здогадувався, що це стосується якоїсь послуги, яка все ще використовує файл (в даному випадку Samba), я забув про lsof.
Ландо

Приведи мене до проблеми. lsofдопомогло мені визначити, який процес ще читав файл, і я вже тоді міг видалити все!
ThanksForAllTheFish

У мене проблема, що lsofі fuserне викликати жодних процесів для цього файлу, будь-яких пропозицій?
mxmlnkn

0

Дякую за пропозиції, але мені нічого не вийшло. Але я знайшов рішення: я перемістив зовнішній SSD на ПК під управлінням Windows. За допомогою Провідника файлів (з відміткою "Приховані елементи" я перейшов до .Trashesкаталогу, я зміг видалити .fuser_hiddenфайл.

Сподіваюся, це допомагає!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.