Bagaimana cara mengatasi "perangkat atau sumber daya sibuk"?

229

Saya mencoba rm -rffolder, dan "perangkat atau sumber daya sibuk".

Di Windows, saya akan menggunakan LockHunter untuk menyelesaikan ini. Apa yang setara dengan linux? (Tolong beri jawaban sebagai metode sederhana "buka ini", dan tidak menyelesaikan artikel seperti ini . Meskipun mereka berguna, saya saat ini tertarik hanya ASimpleMethodThatWorks ™)

ripper234
sumber
5
Terima kasih ini berguna - saya datang dari Linux ke Windows, sedang mencari yang setara dengan lsof - LockHunter.
Sonia Hamilton
3
Apa apaan? Unix tidak mencegah Anda menghapus file yang terbuka seperti Windows. Inilah sebabnya mengapa Anda dapat menghapus seluruh sistem Anda dengan menjalankan rm -rf /... itu akan dengan senang hati menghapus setiap file, termasuk / bin / rm.
psusi
1
@psusi, itu tidak benar. Anda memiliki sumber informasi yang buruk atau hanya mengada-ada. Linux, seperti Windows, memiliki penguncian file dan perangkat. Tapi agak rusak. 0pointer.de/blog/projects/locking.html
foobarbecue
1
@foobarbecue, biasanya itu hanya kunci penasehat dan halaman manual setidaknya menunjukkan bahwa itu hanya untuk baca / tulis, bukan pembatalan tautan.
psusi

Jawaban:

232

Alat yang Anda inginkan adalah lsof, yang merupakan singkatan dari daftar file yang terbuka .

Ada banyak opsi, jadi periksa halaman manual, tetapi jika Anda ingin melihat semua file yang terbuka di bawah direktori:

lsof +D /path

Itu akan muncul kembali melalui sistem file di bawah /path, jadi berhati-hatilah melakukannya pada pohon direktori besar.

Setelah Anda tahu proses mana yang membuka file, Anda dapat keluar dari aplikasi tersebut, atau mematikannya dengan kill(1)perintah.

camh
sumber
46
Bagaimana jika tidak ada hasil?
marinir
22
@marines: Periksa apakah sistem file lain dipasang di bawah /path. Itulah salah satu penyebab "buka file" tersembunyi.
camh
2
Perintah lsof langsung ke jalan tidak bekerja. Jadi pada dasarnya perlu pergi di lokasi jalan dan kemudian jalankan lsof busy_file kemudian bunuh semua proses
J4cK
4
lsoftampaknya tidak melakukan apa pun untuk saya: lsof storage/logs/laravel.logtidak mengembalikan apa-apa, dan begitu juga lsof +D storage/logs/. umountmerespons dengan not mounted.
Ryan
1
Hanya untuk menguraikan jawaban @camh: Gunakan mount | grep <path>. Itu menunjukkan ada yang /dev/<abc>mungkin dipasang di Internet <path>. Gunakan sudo umount -lf /dev/<abc>lalu coba hapus <path>. Bekerja untukku. Terima kasih @camh
Vikas Goel
107

terkadang ini disebabkan oleh masalah pemasangan, jadi saya akan melepas sistem file atau direktori yang ingin Anda hapus:

umount / path

kip2
sumber
5
Sekarang jam empat kurang seperempat. Terima kasih kawan, kau menyelamatkan malamku. Lucu sekali. Pada satu baris - begitu banyak waktu terbuang.- '
Aiyion.Prime
1
masalah saya adalah direktori log yang dipasang sebagai / dev / mapper / vg00-root
Spikolynn
1
Membantu saya keluar dari selai yang sama pada jamnya.
Jon
1
dalam kasus saya, Jenkins tidak melepas
ikatan
1
dalam kasus saya, unmount dengan desktop ubuntu bekerja !! Terima kasih
JRichardsz
14

Saya menggunakan fuseruntuk hal semacam ini. Ini akan mendaftar proses mana yang menggunakan file atau file dalam mount.

BillThor
sumber
fuserhanya membantu dalam kasus tertentu ketika Anda ingin meng-unmount sistem file. Di sini masalahnya adalah menemukan apa yang menggunakan file tertentu.
Gilles
@Gilles: Juga berfungsi untuk file.
BillThor
Maaf, keberatan salah: fusertidak membantu di sini karena masalahnya adalah menemukan semua file yang terbuka di pohon direktori. Anda dapat memberi tahu lsofuntuk menampilkan semua file dan memfilter, atau membuatnya berulang; fusertidak memiliki mode seperti itu dan perlu dipanggil pada setiap file.
Gilles
@Giles: fuserworks akan mendaftar. Coba fuser /var/log/*, jika ada log yang terbuka, ia akan memberi tahu mana dan siapa yang membuka. Jika wildcard sederhana, tidak akan berfungsi, finddengan atau tanpa xargsakan melakukan pekerjaan.
BillThor
1
lsoftidak ada di jalur saya sementara fuser, memungkinkan saya untuk menemukan proses ID menyinggung untuk membunuh, jadi +1 +1 terima kasih.
stevesliva
12

Ini solusinya:

  1. Pergilah ke direktori dan ketik ls -a
  2. Anda akan menemukan .xyzfile
  3. vi .xyz dan lihat apa isi dari file tersebut
  4. ps -ef | grep username
  5. Anda akan melihat konten .xyz di kolom 8 (baris terakhir)
  6. kill -9 job_ids - di mana job_ids adalah nilai kolom ke-2 dari konten yang disebabkan kesalahan yang terkait di kolom ke-8
  7. Sekarang coba hapus folder atau file tersebut.
pengguna73011
sumber
4
Akan menarik untuk mengetahui dari mana file-file misterius itu berasal.
John WH Smith
9

Saya memiliki masalah yang sama, membangun satu liner dimulai dengan rekomendasi @camh:

lsof +D ./ | awk '{print $2}' | tail -n +2 | xargs kill -9

The awkperintah meraih PID. The tailperintah menghilangkan sial pertama entri: "PID". Saya terbiasa -9membunuh, orang lain mungkin memiliki opsi yang lebih aman.

Choylton B. Higginbottom
sumber
1
Untuk membuatnya lebih universal, Anda dapat menggunakan ./ untuk direktori saat ini alih-alih log /
user2589273
Poin bagus, @ user2589273. Diperbarui.
Choylton B. Higginbottom
5

Saya mengalami masalah ini ketika tes otomatis membuat ramdisk. Perintah yang disarankan dalam jawaban lain, lsofdan fuser, tidak membantu. Setelah tes saya mencoba melepasnya dan kemudian menghapus folder. Saya benar-benar bingung sejak lama karena saya tidak bisa menghilangkannya - saya terus membuat "Perangkat atau sumber daya sibuk" !

Secara tidak sengaja saya menemukan cara untuk menyingkirkan ramdisk. Saya harus meng-unmount-nya berkali-kali dengan yang saya jalankan mountperintah, yaitu sudo umount path

Karena fakta bahwa itu dibuat menggunakan pengujian otomatis, itu dipasang berkali-kali, karenanya mengapa saya tidak bisa menghilangkannya hanya dengan melepasnya setelah pengujian. Jadi, setelah saya unmount secara manual berkali-kali akhirnya menjadi folder biasa lagi dan saya bisa menghapusnya.

Semoga ini bisa membantu orang lain yang menemukan masalah ini!

gloriphobia
sumber
5

Saya sering mengalami ini di server yang memiliki sistem file jaringan NFS. Saya berasumsi itu ada hubungannya dengan sistem file, karena file-file tersebut biasanya dinamai seperti .nfs000000123089abcxyz.

Solusi khas saya adalah mengubah nama atau memindahkan direktori induk file, lalu kembali lagi dalam satu atau dua hari dan file tersebut akan dihapus secara otomatis, di mana saya bebas untuk menghapus direktori.

Ini biasanya terjadi di direktori tempat saya menginstal atau mengkompilasi pustaka perangkat lunak.

pengguna5359531
sumber
4

Mengupas pertanyaan Prabhat di atas, saya memiliki masalah ini di macos high sierra ketika saya terdampar proses encf, me-reboot menyelesaikannya, tapi ini

ps -ef | grep name-of-busy-dir

Tunjukkan pada saya proses dan PID (kolom dua).

sudo kill -15 pid-here

memperbaikinya.

bil
sumber
Ini juga berhasil bagi saya. Apa itu -15?
O.rka
3

Jika server Anda dapat diakses, Coba

Menghapus dir itu dari server

Atau, lakukan umount dan mount lagi, coba umount -l: lazy umount jika menghadapi masalah pada umount normal.

Saya juga punya masalah ini di mana

lsof +D path : tidak memberikan output

ps -ef : tidak memberikan informasi yang relevan

Prabhat Kumar Singh
sumber