Видалення бродячого файлу я бачу .nfs0000000000b869e300000001


15

Я видалив файл, і тепер я бачу:

$ ls
total 64
-rw-rw-r-- 1 502 17229 Sep 17 16:42 page_object_methods.rb
drwxrwxr-x 7 502   238 Sep 18 18:41 ../
-rw-rw-r-- 1 502 18437 Sep 18 18:41 new_page_object_methods.rb
-rw-r--r-- 1 502 16384 Sep 18 18:42 .nfs0000000000b869e300000001
drwxrwxr-x 5 502   170 Sep 21 13:48 ./
13:48:11 *vagrant* ubuntu-14 selenium_rspec_conversion

і якщо я спробую її видалити:

$ rm .nfs0000000000b869e300000001
rm: cannot remove ‘.nfs0000000000b869e300000001’: Device or resource busy

Що це вказує? Що я повинен зробити


Ця проблема, в поєднанні з цієї індикатором звуку-службою помилкою де 100s процесів збереження відкритих файлів, в поєднанні з isues , як вони коли ~ / .cache / вискочка журнали ростуть дуже великими і потім пресують, були займає багато місця в моєму корпоративний накопичувач NFS, який включає мій домашній каталог. Подолали її, додавши ps -Af | grep 'indicator-services-start' | awk '{ print $2 }' | xargs killв crontab -e.
Андрес Ріофріо

Відповіді:


14

Файл можна видалити, поки процес відкритий. Коли це відбувається, запис каталогу видаляється, але сам файл (вклад та вміст) залишається позаду; файл видаляється дійсно лише тоді, коли більше посилань немає, і він не відкривається жодним процесом.

NFS - це протокол без стану: операції можна виконувати незалежно від попередніх операцій. Можна навіть перезавантажити сервер, і як тільки він повернеться в Інтернет, клієнти продовжать доступ до файлів, як і раніше. Для того, щоб це працювало, файли повинні бути позначені своїми іменами, а не обробкою, отриманою при відкритті файлу (про що сервер забуде при перезавантаженні).

Зберіть їх разом: що відбувається, коли клієнт відкриває файл та видаляє? Файл повинен мати ім’я, щоб клієнт, який його відкрив, все ще мав доступ до нього. Але коли файл буде видалений, очікується, що після цього більше не буде файлу з таким іменем. Таким чином, сервери NFS перетворюють видалення відкритого файлу на перейменування: файл перейменовують у .nfs….nfsнаступним рядком літер та цифр).

Ви не можете видалити ці файли (якщо ви спробуєте, все, що трапляється, .nfs…з’являється новий з іншим суфіксом). Вони врешті зникнуть, коли клієнт, у якого відкритий файл, закриває його. (Якщо клієнт зникає перед закриттям файлу, може пройти деякий час, поки сервер не помітить.)


2

Користувач @mtak з іншого питання пропонує:

You could try runningfuser /path/to/.nfsto check which process is using the .nfs file. – mtak May 2 '14 at 9:13

^^^^^ Це працює ^^^^^ І знищить процес ображення, щоб змусити його випустити ручку файлу.

напр

$ rm -rf ~/Downloads
rm: cannot remove ‘/nfshome/x/Downloads’: Directory not empty
$ ls -alstr ~/Downloads
total 38864
  972 -rw-r--r--   1 x users   988438 Dec 20  2016 .nfs00000000018d307a00000369
31812 -rw-r--r--   1 x users 32503812 Dec 20  2016 .nfs00000000018d307f0000036b
  636 drwx--x--x 134 x y   647168 Aug 28 10:37 ..
  240 drwxr-xr-x   2 x y   241664 Aug 28 10:43 .
$ rm -rf ~/Downloads
rm: cannot remove ‘/na-homes/x/Downloads/.nfs00000000018d307a00000369’: Device or resource busy
rm: cannot remove ‘/na-homes/x/Downloads/.nfs00000000018d307f0000036b’: Device or resource busy

$ fuser /nfshome/x/Downloads/.nfs00000000018d307400000367
/nfshome/x/Downloads/.nfs00000000018d307400000367:  8231m
$ ps -elf |grep 8231
0 S x     1493 15153  0  80   0 - 28177 pipe_w 10:55 pts/39   00:00:00 grep --color=auto 8231
0 S x     8231  7660  0  99   - - 481464 poll_s Jul19 ?       00:06:01 /usr/libexec/tracker-extract
$ kill 8231
$ kill 8231 # kill twice to check first kill worked, . . 
            # escalate to kill -9 8231 if first kill didn't work, . . 
            # use sudo or root or other user to kill if ownership prevents kill working.
-bash: kill: (8231) - No such process
$ rm -rf ~/Downloads

$ ls -alstr ~/Downloads/
ls: cannot access /nfshome/x/Downloads/: No such file or directory

ТАК! Успіх.

YMMV звичайно. Це може бути інший процес, сидячи з відкритим файлом.

Процес вилучення трекера був відновлений автоматично після того, як я його вбив.

Що це за трекер-витяг? (Я бачу це на centos / redhat)

/programming/26737900/tracker-extract-and-tracker-store-proceed-consuming-huge-amount-of-ram

extra/tracker 1.2.3-1 (gnome)
    All-in-one indexer, search tool and metadata database

1
Набагато корисніше, ніж прийнята відповідь, оскільки вона надає користувачеві спосіб виправити ситуацію.
чб

1

Оскільки NFS є "без громадянства", потрібно створити метод UNIX для відкриття файлу та видалення його, зберігаючи відкритий файл файлів.

Будь-яка операція з файлом NFS викликає ланцюг:

open(); seek-last-off(); doit(); close();

для запуску, і це причина, чому NFS переживає перезавантаження сервера.

Як тільки процес клієнта, який відкрив старий файл, закінчується, файл зникає.

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


0

Якийсь інший процес, ймовірно, все ще використовує файл (тобто має відкриту файлову зв'язок до нього). Або ігноруйте файл, або використовуйте lsofабо подібне, щоб спробувати знайти, який процес відкрив цей файл (або перезавантажте все!).


0

Я зіткнувся з подібною ситуацією, але в моєму випадку я не в змозі видалити файл, створений моєю власною програмою. Я був у цьому впевнений, оскільки він був у каталозі, створеному моєю програмою. Я не знав, де і коли я запускав ту програму. Рішення: Я просто вийшов з усіх своїх терміналів. Я знову ввійшов у систему і просто видалив файл.

PS Моя відповідь справедлива лише для вказаного сценарію.

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