Menghapus file gelandangan saya melihat .nfs0000000000b869e300000001


15

Saya menghapus file dan sekarang saya melihat:

$ 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

dan jika saya mencoba untuk menghapusnya:

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

Apa artinya ini? Apa yang harus saya lakukan


Masalah ini, dikombinasikan dengan bug indikator-suara-layanan ini di mana 100-an proses menjaga file tetap terbuka, dikombinasikan dengan isue seperti ini di mana ~ / .cache / log pemula tumbuh sangat besar dan kemudian dikompresi, mengambil banyak ruang di komputer saya. drive NFS perusahaan yang menyertakan direktori home saya. Bekerja di sekitar itu dengan menambahkan ps -Af | grep 'indicator-services-start' | awk '{ print $2 }' | xargs killke crontab -e.
Andres Riofrio

Jawaban:


14

File dapat dihapus saat dibuka oleh suatu proses. Ketika ini terjadi, entri direktori dihapus, tetapi file itu sendiri (inode dan konten) tetap tertinggal; file hanya benar-benar dihapus ketika tidak memiliki lagi tautan dan tidak terbuka oleh proses apa pun.

NFS adalah protokol stateless: operasi dapat dilakukan secara independen dari operasi sebelumnya. Bahkan memungkinkan server untuk reboot, dan setelah kembali online, klien akan terus mengakses file seperti sebelumnya. Agar ini berfungsi, file harus ditunjuk dengan namanya, bukan dengan penanganan yang diperoleh dengan membuka file (yang server akan lupa ketika reboot).

Gabungkan keduanya: apa yang terjadi ketika file dibuka oleh klien, dan dihapus? File harus tetap memiliki nama, sehingga klien yang membuka masih dapat mengaksesnya. Tetapi ketika suatu file dihapus, diharapkan tidak ada lagi file dengan nama itu sesudahnya. Jadi server NFS mengubah penghapusan file yang terbuka menjadi penggantian nama: file diubah namanya menjadi .nfs…( .nfsdiikuti oleh serangkaian huruf dan angka).

Anda tidak dapat menghapus file-file ini (jika Anda mencoba, semua yang terjadi adalah bahwa yang baru .nfs…muncul dengan akhiran yang berbeda). Mereka akhirnya akan pergi ketika klien yang memiliki file terbuka menutupnya. (Jika klien menghilang sebelum menutup file, mungkin perlu waktu hingga server pemberitahuan.)


2

Pengguna @mtak pada pertanyaan lain menyarankan:

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

^^^^^ Itu berhasil ^^^^^ Dan matikan proses yang menyebabkannya untuk melepaskan pegangan file.

misalnya

$ 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

YAY! Keberhasilan.

YMMV tentu saja. Mungkin proses yang berbeda duduk dengan file terbuka.

Proses ekstrak pelacak dimulai kembali secara otomatis setelah saya membunuhnya.

Apa hal pelacak-ekstrak ini? (Saya melihat ini di centos / redhat)

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

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

1
Jauh lebih bermanfaat daripada jawaban yang diterima, karena memberi pengguna cara untuk memperbaiki situasi.
chb

1

Karena NFS adalah "stateless", perlu ada cara untuk meniru metode UNIX membuka file dan kemudian menghapusnya dengan menjaga filehandle terbuka.

Setiap operasi file NFS menyebabkan rantai:

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

untuk dijalankan dan ini adalah alasan mengapa NFS selamat dari reboot server.

Setelah proses pada klien yang membuka file lama berakhir, file tersebut akan hilang.

Server file yang diimplementasikan dengan benar akan menjalankan skrip setiap malam yang menghapus semua file yang lebih dari satu minggu. Alasannya adalah jika klien reboot saat memegang file seperti itu, file tersebut akan tetap selamanya.


0

Beberapa proses lain kemungkinan masih menggunakan file (yaitu, memiliki filehandle terbuka untuk itu). Abaikan file tersebut, atau gunakan lsofatau sejenisnya untuk mencoba menemukan proses apa yang membuat file itu terbuka (atau reboot semuanya!).


0

Saya menghadapi situasi yang sama, tetapi dalam kasus saya, saya tidak dapat menghapus file yang dibuat oleh program saya sendiri. Saya yakin akan hal ini karena ada dalam direktori yang dibuat oleh program saya. Saya tidak tahu di mana dan kapan saya menjalankan program itu. Solusi: Saya cukup keluar dari semua terminal saya. Saya login lagi dan cukup menghapus file.

PS Jawaban saya hanya valid untuk scenerio yang telah saya tentukan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.