Bagaimana cara menghapus file .fuse_hidden *?

34

Saya memiliki server Linux kecil (Debian Squeeze) yang menjalankan server Samba yang dikonfigurasi untuk berbagi beberapa folder dengan beberapa mesin windows. Saat mencoba untuk menghapus salah satu direktori dari windows saya menerima kesalahan "Tidak dapat menghapus folder".

Saya mencoba menghapus direktori dari konsol linux. Saya mendapat kesalahan yang sama:

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

Saya mendaftar isi direktori dan menemukan file bernama .fuse_hidden diikuti oleh nomor hex (000bd8c100000185).

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

Saya mencoba menghapus file .fuse_hidden, tetapi file baru dibuat secara instan (perhatikan perubahan nomor hex).

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

Saya juga mencoba menggunakan Midnight Commander untuk menghapus file tanpa hasil.

Solusi lain yang saya temukan sejauh ini melibatkan GUI dan saya hanya punya konsol.

Ada saran yang dihargai.

Lando
sumber
3
Daemon sekering tampaknya aktif. Hentikan sebelum menghapus file.
ott--
Sementara itu saya telah mengubah komentar saya.
ott--
Itu adalah pemikiran pertama saya tetapi saya tidak dapat menemukan layanan Fuse untuk berhenti, saya memulai kembali Samba sebagai gantinya, masalah terpecahkan, file hilang. Terima kasih.
Lando
rm dir-name -rf?
Hauke ​​Laging

Jawaban:

52

Ini mirip dengan apa yang terjadi ketika Anda menghapus file yang sistem lain buka pada NFS mount. Masalahnya adalah bahwa file telah dihapus dari sistem file sementara "jumlah tautan" -nya> 1, yang berarti bahwa proses lain masih menahannya terbuka.

  • Masuk ke sistem tempat file secara fisik berada. (tidak ada jaringan mount)
  • Jalankan lsof dir-name/.fuse_hidden000bd8c100000185untuk mencari tahu proses apa yang menahan pegangan file terbuka.
  • Hentikan proses tersebut jika masuk akal, atau cari tahu langkah apa yang dapat Anda lakukan untuk "dengan anggun" melepaskan pegangan file terbuka tanpa menghentikan proses.

Biasanya, ketika Anda menghapus file di sistem file lokal Anda yang proses lain telah terbuka, OS mematuhi permintaan Anda dan menghapusnya dari pohon direktori, tetapi inode yang menunjuk pohon masih dianggap digunakan oleh sistem operasi. Setiap kali file dibuka, "jumlah tautan" -nya bertambah satu, dan ruang hanya benar-benar dirilis ketika tautan itu mencapai nol.

Ketika Anda mengalami masalah seperti ini, itu berarti bahwa OS memiliki alasan apa pun memutuskan untuk tidak menghapus file itu dari pohon direktori: biasanya karena ia memiliki alasan untuk percaya bahwa itu masih perlu diakses oleh hal-hal yang tidak dapat menggunakan nomor inode langsung. Ini mungkin awalnya tampak sesuai, tetapi di balik layar OS mengubah nama itu untuk memiliki awalan titik tersembunyi sehingga masih dapat diakses dengan beberapa bentuk pengalamatan jalur sistem file. Ruang masih akan dibebaskan ketika jumlah tautan mencapai nol, tetapi objek itu akan tetap berada di direktori hingga tautan hilang.

Andrew B
sumber
Saya kira itu ada hubungannya dengan beberapa layanan masih menggunakan file (dalam hal ini Samba), saya lupa tentang lsof.
Lando
Arahkan saya ke masalahnya. lsofmembantu saya mengidentifikasi proses mana yang masih membaca file dan saya pada saat itu dapat menghapus semuanya!
ThanksForAllTheFish
Saya punya masalah, itu lsofdan fusertidak memunculkan proses untuk file itu, ada saran?
mxmlnkn
0

Terima kasih atas sarannya, tetapi tidak ada yang berhasil untuk saya. Tetapi saya menemukan solusinya: Saya memindahkan SSD eksternal ke PC yang menjalankan windows. Menggunakan File Explorer (dengan "Item tersembunyi" dicentang) saya menavigasi ke .Trashesdirektori dapat menghapus .fuser_hiddenfile.

Semoga ini membantu!

RobertC
sumber