Kadang-kadang, saya ingin mencopot perangkat usb dengan umount /run/media/theDrive
, tapi saya mendapatkan drive is busy
error.
Bagaimana cara mengetahui proses atau program mana yang mengakses perangkat?
process
open-files
unmounting
Stefan
sumber
sumber
Jawaban:
Gunakan
lsof | grep /media/whatever
untuk mencari tahu apa yang menggunakan mount.Juga, pertimbangkan
umount -l
(lazy umount) untuk mencegah proses baru menggunakan drive saat Anda membersihkan.sumber
fuser -mv /path/to/mountpoint
mungkin menjadi alternatif yang lebih mudah dibaca untuk mengetahui proses menggunakan titik moint.lsof | grep
bekerja lebih baik untuk saya.fuser -mv
tampaknya hanya membuang 80+ proses yang tidak terkait. Saya menggunakan direktori mount binded.umount -l
berbahaya . direktorimount -o bind
mode000
kosong di atas, dan bersihkan melaluilsof +f -- /dev/device
.Sebagian besar waktu, perintah terbaik untuk digunakan adalah lsof ( “ l i s t o pen f iles”).
di mana
/media/usb0
titik pemasangan drive USB atau sistem file lain untuk dilepas.+f --
memberitahu lsof untuk memperlakukan argumen selanjutnya sebagai mount point; biasanya, tetapi tidak selalu, mengelola sendiri, sehinggalsof /media/usb0
juga berfungsi. Ini menemukan file yang terbuka (bahkan yang tidak terhubung), file yang dipetakan memori, direktori saat ini, dan beberapa penggunaan yang lebih tidak jelas. Anda harus menjalankan perintah sebagai root untuk mendapatkan informasi tentang proses pengguna lain (dan saya pikir ada beberapa kesatuan yanglsof
harus dijalankan sebagai root).Ada kegunaan yang tidak akan ditemukan oleh lsof; ini jarang terjadi pada media yang dapat dipindahkan. Mereka termasuk:
/foo
jika/foo/bar
merupakan mount point./foo
jika/foo/bar
merupakan perangkat blok yang di-mount atau file biasa yang di-mount-loop, atau jika itu adalah sumber dari bind mount Linux.Perintah lain yang dapat disajikan dalam keadaan darurat adalah fuser, yang hanya mencantumkan PID proses dengan file yang terbuka di perangkat:
sumber
Anda dapat menggunakan
lsof
seperti yang Peter katakan, atau jika Anda yakin ingin membunuh semua hal itu dan melepasnya, Anda mungkin dapat melakukan sesuatu seperti:sumber
-M
untuk keamanan.-M
harus diterapkan.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.
Buka file
Proses dengan file terbuka adalah biang keladinya. Perlihatkan mereka:
Ada keuntungan menggunakan
/dev/<device>
daripada/mountpoint
: mountpoint akan hilang setelahumount -l
, atau mungkin disembunyikan oleh mount overlay.fuser
juga dapat digunakan, tetapi menurut sayalsof
memiliki output yang lebih berguna. Namunfuser
berguna untuk membunuh proses yang menyebabkan drama Anda sehingga Anda dapat melanjutkan hidup Anda.Daftar file di
<mountpoint>
(lihat peringatan di atas):Hanya membunuh proses secara interaktif dengan file yang terbuka untuk ditulis:
Setelah menghitung ulang read-only (
mount -o remount,ro <mountpoint>
), aman (r) untuk mematikan semua proses yang tersisa:Mountpoints
Pelakunya bisa menjadi kernel itu sendiri. Filesystem lain yang terpasang pada filesystem yang Anda coba
umount
akan menyebabkan kesedihan. Periksa dengan:Untuk pemasangan loopback ( terima kasih Stephen Kitt ), periksa juga output dari:
Inode anonim (Linux)
Inode anonim dapat dibuat oleh:
open
denganO_TMPFILE
)Ini adalah jenis yang paling sulit dipahami dari pokemon, dan muncul di
lsof
'sTYPE
kolom sebagaia_inode
(yang didokumentasikan dilsof
halaman manual ).Mereka tidak akan muncul
lsof +f -- /dev/<device>
, jadi Anda harus:Untuk mematikan proses yang menyimpan inode anonim, lihat: Daftar jam tangan yang tidak berizin saat ini (pathname, PID) .
inotify
jam tangan (Linux)Komentar ini menjelaskan mengapa
inotify
tidak boleh mencegah unmount, tetapi catatan ini menjelaskan situasi di mana ia akan :sumber
lsof
.Mountpoints
bagian.Jika Anda menggunakan GNOME, unmount melalui Nautilus akan menampilkan pesan yang menyatakan proses mana yang masih menggunakan drive, dan file yang digunakannya.
sumber
Untuk (setidaknya) OpenBSD:
Sebagai contoh (menggunakan
doas
untuk mengeksekusifstat
sebagai root karena jika tidak kita hanya akan melihat proses kita sendiri):Dalam hal ini, saya tidak akan dapat meng-unmount
/usr/ports
sampai pengguna_pbuild
selesai menjalankan keduamake
proses tersebut.sumber
Ini adalah perangkap umum: Anda su ke pengguna yang berbeda (baik root atau pengguna lain), ubah ke direktori perangkat yang dipasang, dan kemudian logout sebagai pengguna itu. Ketika Anda lupa bahwa Anda pergi di direktori itu, Anda dapat mencoba dan menemukan sampai Anda buta.
lsof
tidak menunjukkan shell direktori saat ini yang menggunakan perangkat itu. Anda mungkin ingin su sebagai pengguna itu lagi untuk mengubah direktori Anda.sumber