Bazen, bir kaldırmak istiyorum usb cihazı ile umount /run/media/theDrive
, ama olsun drive is busy
hatası.
Hangi işlemlerin veya programların aygıta eriştiğini nasıl bulabilirim?
Bazen, bir kaldırmak istiyorum usb cihazı ile umount /run/media/theDrive
, ama olsun drive is busy
hatası.
Hangi işlemlerin veya programların aygıta eriştiğini nasıl bulabilirim?
Yanıtlar:
Bağlantının lsof | grep /media/whatever
ne olduğunu bulmak için kullanın .
Ayrıca, umount -l
yeni işlemlerin temizlerken sürücüyü kullanmasını önlemek için (tembel umount) değerlendirebilirsiniz .
fuser -mv /path/to/mountpoint
bir nokta noktasını kullanarak işlemleri bulmak için daha okunabilir bir alternatif olabilir.
lsof | grep
benim için daha iyi çalışıyor. fuser -mv
Sadece ilgisiz süreçleri 80'den fazla atmış gibi görünüyor. Bağlanmış dizinleri kullanıyorum.
umount -l
tehlikelidir . yerine mount -o bind
bir mod 000
boş dizin yerine, ve üzerinden temizlemek lsof +f -- /dev/device
.
Çoğu zaman, kullanıcı için en iyi komut lsof ( “ L ı s T O kalem f iles”).
lsof +f -- /media/usb0
/media/usb0
USB sürücüsünün ya da diğer dosya sisteminin bağlantı noktasının bağlantısını kesmek nerede . +f --
lsof'a sonraki argümanı bir bağlama noktası olarak görmesini söyler; genellikle, ancak her zaman değil, kendi kendine yönetir, böylece lsof /media/usb0
çalışır. Bu açık dosyaları (hatta bağlantısız olanlar bile), hafızaya eşlenmiş dosyaları, güncel dizinleri ve bazı gizli kullanımları bulur. Diğer kullanıcıların işlemleri hakkında bilgi almak için komutu root olarak çalıştırmanız gerekecek (ve sanırım lsof
root olarak çalıştırılması gereken sendikalar var ).
Lsof'un bulamayacağı kullanımlar var; bunlar çıkarılabilir medyada nadir görülür. Onlar içerir:
/foo
olup olmadığını gösteremezsiniz /foo/bar
./foo
eğer /foo/bar
bir monte blok aygıt veya döngü monte düzenli dosya mı yoksa Linux bağlama kaynağı ise montaj.Bir tutam hizmet verebilecek başka bir komut, aygıtta yalnızca açık dosyaları olan işlemlerin PID'lerini listeleyen kaynaştırıcıdır:
fuser -m /media/usb0
lsof
Peter'ın dediği gibi kullanabilirsiniz , ya da tüm bu şeyleri öldürmek ve sökmek istediğinizden eminseniz, muhtemelen şöyle bir şey yapabilirsiniz:
fuser -Mk /mnt/path
umount /mnt/path
-M
güvenlik için kullanmaya bakın.
-M
uygulanacağını netleştirmek isteyebilirsiniz .
fuser
:-M, --ismountpoint Request will be fulfilled only if NAME specifies a mountpoint. This is an invaluable seatbelt which prevents you from killing the machine if NAME happens to not be a filesystem.
Açık dosyalar içeren işlemler olağan suçlulardır. Onları göster:
lsof +f -- <mountpoint or device>
Kullanmanın bir avantajı vardır /dev/<device>
ziyade /mountpoint
bir mountpoint bir sonra kaybolacaktır: umount -l
ya da kalıbı oluşturulmuş bir mount tarafından gizlenmiş olabilir.
fuser
ayrıca kullanılabilir, ama aklıma lsof
daha yararlı bir çıktı var. Ancak fuser
, dramalarınıza neden olan süreçleri öldürmek konusunda faydalıdır, böylece hayatınıza devam edebilirsiniz.
Dosyaları listele <mountpoint>
(yukarıdaki uyarıya bakın):
fuser -vmM <mountpoint>
Yalnızca yazma için açık dosyalar ile etkileşimli olarak öldürme işlemleri:
fuser -vmMkiw <mountpoint>
Salt okunur ( mount -o remount,ro <mountpoint>
) yeniden monte ettikten sonra , kalan tüm işlemleri öldürmek güvenlidir (r):
fuser -vmMk <mountpoint>
Suçlu, çekirdeğin kendisi olabilir. Çalıştırmaya çalıştığınız dosya sistemine bağlı başka bir dosya sistemi, umount
üzüntüye neden olacaktır. Şununla kontrol et:
mount | grep <mountpoint>/
Geri döngü montajları için ( teşekkürler Stephen Kitt ), ayrıca çıktısını kontrol edin:
losetup -la
Anonim inode'lar şu şekilde oluşturulabilir:
open
ile O_TMPFILE
)Bunlar pokemon en zor türüdür ve görünen lsof
'ın TYPE
olarak sütun a_inode
(belgelenmemiş lsof
adam sayfası ).
İçeri girmeyecekler lsof +f -- /dev/<device>
, bu yüzden yapmanız gerekenler:
lsof | grep a_inode
İsimsiz inode'ları tutan öldürme işlemleri için, bakınız: Geçerli inotify saatlerini listele (yol adı, PID) .
inotify
saatler (Linux)Bu yorum neden bir unmount'u engellememesi inotify
gerektiğini açıklar , ancak bu not , hangi durumlarda olacağını açıklamaktadır :
bir unmount
vx_softcnt_flush()
çağrıya asılabilir . Askıda kalma , inotify saatlerini_count
değişkeniv_os_hold value
artırması ve inotify watcher bekletmeyi bırakana kadar yüksek kalmasına neden olması nedeniyle oluşur .
lsof
.
Mountpoints
.
(En azından) OpenBSD için:
$ fstat /mnt/mountpoint
Örneğin ( aksi takdirde yalnızca kendi işlemlerimizi göreceğimiz gibi root olarak doas
çalıştırmak için kullanılır fstat
):
$ doas fstat /usr/ports
USER CMD PID FD MOUNT INUM MODE R/W SZ|DV NAME
_pbuild make 15172 wd /usr/ports 3923598 drwxrwxr-x r 1536 /usr/ports/
_pbuild make 40034 wd /usr/ports 3923598 drwxrwxr-x r 1536 /usr/ports/
Bu durumda, /usr/ports
kullanıcı _pbuild
bu iki make
işlemi çalıştırmayı bitirene kadar bağlantıyı kesemem .
Bu yaygın bir tuzaktır: Farklı bir kullanıcıya (ya kök ya da başka bir kullanıcı) dava açarsanız, monte edilmiş bir cihazın dizinine geçersiniz ve ardından o kullanıcı olarak çıkış yaparsınız. Bu dizinde bıraktığınızı unuttuğunuzda, kör olana kadar deneyebilir ve bulabilirsiniz. lsof
mevcut dizinin o aygıtı kullandığı kabuğu gösterir. Dizini değiştirmek için bu kullanıcı olarak tekrar dava açmak isteyebilirsin.