Saya sering mengalami masalah untuk melakukan umount direktori:
umount / mnt / dir umount: / mnt / dir: perangkat sedang sibuk
Ada banyak alasan mengapa perangkat ini sibuk. Kadang-kadang ada proses yang berjalan yang memiliki kunci terbuka di atasnya, kadang-kadang ada direktori lain yang dipasang di atas /mnt/dir
.
Pertanyaan saya:
Apa langkah-langkah untuk memeriksa mengapa direktori tidak dapat dilepas.
Saya tahu ada banyak alasan, tetapi tidak masalah jika Anda menjelaskan solusi spesifik.
[EDIT]
[X] menjalankan proses pada volume yang terpasang.
[X] volume lain dipasang di atas volume yang ingin kita lepas
[N] NFS mengunci volume yang ingin kita lepas
Jawaban:
Cara untuk mengeceknya adalah
fuser -vm /mnt/dir
, yang harus dijalankan sebagai root. Ini akan memberi tahu Anda proses mana yang mengakses titik pemasangan.Alternatifnya adalah
lsof /mnt/dir
, yang akan menampilkan setiap file yang terbuka di mount. Sekali lagi terbaik jalankan sebagai root.Anda dapat menjalankan semua ini sebagai non-root, tetapi kemudian output akan terbatas pada proses Anda — yang dari pengguna lain hanya akan diam-diam tidak ditampilkan, meskipun mereka akan mencegah unmount sistem file.
Contoh:
Kolom "akses" memberi tahu Anda cara mengaksesnya. Dalam hal ini, kernel menggunakannya sebagai mount (ya, tetapi unmount akan baik-baik saja hanya dengan ini).
bash
memilikinya sebagai direktori kerja saat ini (harus kecd
direktori yang berbeda sebelum unmount) dan gvim keduanya memiliki direktori saat ini dan memiliki file yang terbuka (harus menutup gvim itu).Dalam output ini, Anda dapat melihat direktori saat ini untuk bash dan gvim (sebagai tipe
DIR
). Anda juga dapat melihat file gvim mana yang terbuka untuk ditulis.Cara memaksa masalah:
fuser
memiliki-k
opsi yang akan mengirim sinyal (default:)SIGKILL
ke setiap proses menggunakan mount. Ini adalah cara yang agak kuat untuk menghentikan gunung agar tidak sibuk. (Dan tentu saja, berhati-hatilah dengan apa yang kamuSIGKILL
!)umount
memiliki-l
opsi untuk melakukan unmount malas. Mount akan dihapus dari namespace filesystem (jadi Anda tidak akan melihatnya di bawah/mnt/Zia/src
, dalam contoh) tetapi tetap terpasang, sehingga program yang mengaksesnya dapat terus melakukannya. Ketika program terakhir yang mengaksesnya keluar, unmount akan benar-benar terjadi.Ada satu penyebab final yang bisa diperbaiki dari unmount gagal, dan itu adalah server NFS turun. Di sini Anda dapat menggunakan
umount -f
, tetapi Anda berisiko kehilangan data jika melakukannya. (Klien mungkin telah membuat cache penulisan yang belum dikonfirmasi oleh server, dan penulisan itu akan dibuang. Aplikasi, bagaimanapun, telah diberitahu bahwa penulisan berhasil.)sumber
fuser -k
adalah sangat berisiko, karena Anda akan melakukannya sebagai root dan jika Anda tidak sangat yakin yang proses akan membunuh Anda dapat melakukan kerusakan benar-benar spektakuler dengan perintah ceroboh ...-k
opsi, jadi Anda akan tahu proses mana yang akan Anda bunuh. Tapi saya akan menambahkan peringatan.fuser -vm
menunjukkan "kernel mount". harus melakukansystemctl stop opt.mount
alih - alih manualumount
.umount -f
dan NFS. Masalah saya terkait NFS di mana mesin dev saya mengubah IP dan saya tidak bisa menghapus bagiannya.Kamu harus menggunakan:
sumber
-l
adalah opsi yang tepat untuk digunakan ketika bahkan-f
tidak berfungsi.Volume lain dipasang di atas volume yang ingin kami lepas:
The
mount
perintah memungkinkan Anda tahu semua terpasang volume jika invoqued tanpa argumen atau pilihan (kecuali-v
). Anda dapat memiliki daftar mountpoints aktif dengan menambahkan sedikit perl:Kemudian, cukup ambil titik moint dari mana Anda ingin meng-unmount dan Anda akan tahu jika ada mount filesystem yang satu ini.
Maka Anda memiliki dua solusi . Lepaskan sistem file, atau pindahkan dengan
mount --move olddir newdir
(kernel> 2.5.1)sumber
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, 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) .
sumber
Pertanyaan bagaimana memeriksa apakah NFS mengakses direktori yang akan dilepas masih belum terjawab.
Yang saya miliki hanya ini:
Periksa apakah nfsd sedang berjalan:
Tampilkan direktori yang dipasang oleh klien:
dan tanpa
showmount
argumen hanya menunjukkan host klien meskipun tidak aktif. Saya menganggap ini adalah perilaku khusus NFS.sumber
Bagi saya, masalahnya adalah saya login lebih dari satu kali (via ssh) dan pada salah satu login saya berada di command prompt di mana pwd berada di dalam folder yang lebih rendah dari mount-point.
sumber