“Cihaz veya kaynak meşgul” üstesinden nasıl gelinir?


229

rm -rfBir klasöre denedim ve "cihaz veya kaynak meşgul" oldum .

Windows'ta bunu çözmek için LockHunter'ı kullanırdım. Linux eşdeğeri nedir? (Gibi tam makaleler basit cevap yöntemi "Bu kilidini" değil, olduğu gibi verin bu bir . Onlar faydalısın rağmen, Şu anda sadece ASimpleMethodThatWorks ™ ilgileniyorum)


5
Teşekkürler bu kullanışlı oldu - Linux'tan Windows'a geliyordum, lsof - LockHunter'ın eşdeğerini arıyordum.
Sonia Hamilton

3
Ne oluyor be? Unix yok değil , Windows yaptığı gibi açık dosyaları silerek engelleyebilir. Bu yüzden tüm sisteminizi çalıştırarak rm -rf /silebilirsiniz ... ... / bin / rm dahil her dosyayı mutlu bir şekilde silecektir.
psusi

1
@ psusi, bu yanlış. Ya kötü bir bilgi kaynağına sahipsin ya da sadece bir şeyler hazırlıyorsun. Linux, Windows gibi dosya ve aygıt kilitlemeye de sahiptir. Yine de kırılmış. 0pointer.de/blog/projects/locking.html
foobarbecue

1
@foobarecue, normalde bunlar sadece danışma kilitleridir ve man sayfası en azından bağlantıyı değil sadece okuma / yazma için olduklarını gösteriyor gibi görünmektedir.
psusi

Yanıtlar:


232

İstediğiniz aracı lsofanlamına gelen listenin açık dosyalar .

Çok fazla seçeneği var, man sayfasını kontrol edin, ancak tüm açık dosyaları bir dizin altında görmek istiyorsanız:

lsof +D /path

Bu, altındaki dosya sisteminde tekrarlanacaktır /path, bu nedenle büyük dizin ağaçlarında yapılmasına dikkat edin.

Hangi işlemlerin açık dosyaları olduğunu öğrendikten sonra, bu uygulamalardan çıkabilir veya kill(1)komutuyla onları öldürebilirsiniz .


46
Ya sonuç olmadıysa?
marines

22
@ marines: Başka bir dosya sisteminin altına monte edilip edilmediğini kontrol edin /path. Bu gizli "açık dosyaların" bir nedenidir.
camh

2
lsof komutu doğrudan yola çıkmaz. Bu yüzden temel olarak yolun konumuna gidip lsof busy_file komutunu çalıştırmanız ve ardından tüm işlemleri öldürmeniz gerekir
J4cK

4
lsofbenim için hiçbir şey yapmıyor gibi görünüyor: lsof storage/logs/laravel.loghiçbir şey geri dönmedi ve böyle de yaptı lsof +D storage/logs/. umountile cevap verdi not mounted.
Ryan,

1
Sadece @camh cevabını detaylandırmak için: Kullanın mount | grep <path>. Bu herhangi /dev/<abc>birinin üzerine monte edilebileceğini gösterir <path>. Kullanın sudo umount -lf /dev/<abc>ve sonra kaldırmayı deneyin <path>. Benim için çalışıyor. Thanks @camh
Vikas Goel

107

bazen montaj sorunlarının bir sonucudur, bu yüzden kaldırmaya çalıştığınız dosya sistemini veya dizini kaldırırdım:

umount / yol


5
Dörde çeyrek var. Sağol dostum, gecemi kurtardın. Neşeli. Tek satırda - çok fazla boşa zaman -.- '
Aiyion.Prime

1
benim sorunum / dev / mapper / vg00-root olarak monte edilmiş bir log diziniydi
Spikolynn

1
Sarıcılardaki benzer bir sıkışmadan kurtulmama yardım etti.
Jon

1
benim durumumda, Jenkins görev iptal edildikten sonra chroot dir unmount vermedi
zarkone

1
benim durumumda, ubuntu masaüstü çalıştığıyla unmount çalıştı! THanks
JRichardsz

14

Kullandığım fuserşey bu tür için. Hangi işlemin bir dosyada veya mount içindeki dosyaları kullandığını listeler.


fuserBir dosya sistemini kaldırmak istediğinizde yalnızca belirli durumda yardımcı olur. Burada sorun belirli bir dosyayı neyin kullandığını bulmaktır.
Gilles

@Gilles: Ayrıca dosyalar için çalışır.
BillThor

Maalesef yanlış itiraz: fuserburada yardımcı olmuyor çünkü sorun tüm açık dosyaları bir dizin ağacında bulmak. Anlayabilirsiniz lsoftüm dosya ve filtreyi göstermek için, ya da recurse yapmak; fuserböyle bir modu yok ve her dosyaya çağrılması gerekiyor.
Gilles,

@Giles: fuserEserler listeler. fuser /var/log/*Herhangi bir günlük açıksa deneyin , hangilerinin ve kimin açık olduğunu söyleyecektir. Basit bir joker, işe yaramazsa, işe yaramazsa findda olmaz xargs.
BillThor

1
lsoffuserÖyleyse benim yolumda olmadı, öldürmek için rahatsız edici süreç kimliğini bulmama izin verdi, bu yüzden + 1 + teşekkürler.
stevesliva

12

İşte çözüm:

  1. Dizine gir ve yaz ls -a
  2. Bir .xyzdosya bulacaksınız
  3. vi .xyz ve dosyanın içeriğinin ne olduğuna bakın
  4. ps -ef | grep username
  5. .Xyz içeriğini 8. sütunda (son satır) göreceksiniz
  6. kill -9 job_ids - burada job_ids, 8. sütundaki içeriğe neden olan hatanın 2. sütununun değeridir.
  7. Şimdi klasörü veya dosyayı silmeyi deneyin.

4
Bu gizemli dosyaların nereden geldiğini bilmek ilginç olurdu.
John WH Smith,

9

Ben de aynı sorunu yaşadım, @camh tavsiyesi ile başlayan bir tek gömlek yaptım:

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

awkKomut PIDS yakalar. tail"PID": Komut sinir bozucu ilk giriş kurtulur. -9Öldürmek için kullandım , başkalarının daha güvenli seçenekleri olabilir.


1
Daha evrensel hale getirmek için ./ yerine log yerine geçerli dizini kullanabilirsiniz /
user2589273

İyi nokta, @ user2589273. Güncellenmiş.
Choylton B. Higginbottom

5

Otomatik bir test bir ramdisk oluşturduğunda bu sorunu yaşadım. Diğer cevaplarda önerilen lsofve fuserhiçbir yardımı olmayan emirler . Testlerden sonra onu sökmeye ve sonra klasörü silmeye çalıştım. Gerçekten uzun zamandır kafam karıştı, çünkü ondan kurtulamadım - “Aygıt ya da kaynak meşgul” tutmaya devam ettim !

Kazara bir ramdiskten nasıl kurtulacağımı öğrendim. mountKomutu çalıştığım sayıdaki sayıyı kaldırmak zorunda kaldım , yani sudo umount path

Otomatikleştirilmiş testler kullanılarak yaratılmış olması nedeniyle, birçok kez monte edildi, bu yüzden testlerden sonra bir kez sökerek neden ondan kurtulamadım. Bu yüzden, elimden çıkardıktan sonra birçok kez nihayet tekrar düzenli bir klasör haline geldi ve silebildim.

Umarım bu, bu soruna rastlayan birine yardımcı olabilir!


5

Bu sık sık NFS ağ dosya sistemine sahip sunucularda yaşıyorum. Dosyaların tipik olarak adlandırılmasından dolayı bunun dosya sistemiyle ilgisi olduğunu farz ediyorum .nfs000000123089abcxyz.

Genel çözümüm, dosyanın ana dizinini yeniden adlandırmak veya taşımak, daha sonra bir veya iki gün sonra geri gelmek ve dosya otomatik olarak kaldırılacak, bu noktada dizini silmek için özgürüm.

Bu genellikle yazılım kütüphanelerini kurduğum veya derlediğim dizinlerde olur.


4

Prabhat'ın yukarıdaki sorusunu çözdüğümde, bu sorunu bir encfs sürecine girdiğimde macos high sierra'da yaşadım, yeniden başlatma sorunu çözdü, ama bu

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

Bana süreci ve PID'yi gösterdi (sütun iki).

sudo kill -15 pid-here

onu düzeltti.


Bu da benim için çalıştı. Nedir -15?
O.rka,

3

Sunucunuz erişilebilir durumdaysa, Dene'yi deneyin.

Bu dizini sunucudan silme

Veya, do umount ve montaj deneyin tekrar umount -l: Tembel umount Normal umount üzerinde herhangi sorunla karşı karşıya eğer.

Ben de bu problem vardı nerede

lsof +D path : çıktı vermez

ps -ef : ilgili bilgi vermez

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.