Saat berlari umount /path
saya mendapatkan:
umount: /path: device is busy.
Sistem file sangat besar, jadi lsof +D /path
bukan pilihan yang realistis.
lsof /path
,, lsof +f -- /path
dan fuser /path
semuanya tidak menghasilkan apa-apa. fuser -v /path
memberi:
USER PID ACCESS COMMAND
/path: root kernel mount /path
yang normal untuk semua sistem file yang dipasang tidak digunakan.
umount -l
dan umount -f
tidak cukup baik untuk situasi saya.
Bagaimana saya mencari tahu mengapa kernel berpikir sistem file ini sibuk?
fuser -vm /path
...--force
akan berusaha lebih keras untuk meng-unmount dan-v
atau-vvv
bahkan akan membuka kembali lebih banyak apa masalah dengan mount. Jadi cobalah:umount -vvv --force /babdmount
Jawaban:
Tampaknya penyebab masalah saya
nfs-kernel-server
adalah mengekspor direktori. Thenfs-kernel-server
mungkin terjadi di balik file terbuka normal dan dengan demikian tidak terdaftar olehlsof
danfuser
.Ketika saya menghentikan direktori
nfs-kernel-server
saya bisaumount
.Saya telah membuat halaman dengan contoh-contoh semua solusi sejauh ini di sini: http://oletange.blogspot.com/2012/04/umount-device-is-busy-why.html
sumber
sudo service samba stop
terlebih dahulu, jawaban Anda sangat membantu!sudo service nfs stop
dan Anda mungkin (tidak) perlu melakukannya jugasudo exportfs -u
untuk tidak mengekspor. Ingat untuk saat itusudo exportfs -r
dansudo service nfs start
untuk mengekspor kembali dan memulai kembali layanan.exportfs -u
direktori yang dimaksud.Untuk menambahkan komentar BruceCran di atas, penyebab manifestasi saya tentang masalah ini sekarang adalah mountback basi basi . Saya sudah memeriksa output dari / , dan , memeriksa apakah beberapa nfs-kernel-server lama berjalan, mematikan kuota, mencoba (tetapi gagal) dan semuanya mengundurkan diri untuk mengabaikan waktu kerja 924 hari sebelum akhirnya memeriksa output dari dan menemukan dua loopback dikonfigurasi-tapi-tidak-basi dikonfigurasi:
fuser -vm <mountpoint>
lsof +D <mountpoint>
mount
cat /proc/mounts
umount -f <mountpoint>
losetup
kemudian
Sebuah Gentoo posting forum juga daftar swapfiles sebagai pelakunya potensial; meskipun bertukar ke file mungkin cukup langka hari ini, tidak ada salahnya untuk memeriksa output dari
cat /proc/swaps
. Saya tidak yakin apakah kuota dapat mencegah unmount - saya mencengkeram sedotan.sumber
Alih-alih menggunakan lsof untuk menjelajah melalui sistem file, cukup gunakan daftar total file yang terbuka dan ambil itu. Saya menemukan pengembalian ini harus lebih cepat, meskipun kurang akurat. Seharusnya menyelesaikan pekerjaan.
sumber
lsof /path
, katakulsof | grep '/path'
. Perbedaannya adalah bahwa lsof tanpa argumen menunjukkan semua file yang terbuka menggunakan semacam tabel cache, dan grep sangat cepat dalam mencari melaluinya. Hal-hal yang Anda coba dengan lsof membuatnya memindai melalui sistem file yang membutuhkan waktu lama.lsof /path
melihat jalannya saja. Itu tidak melihat setiap file. Seringkali jauh lebih cepat daripadalsof | grep /path
(dalam tes tidak ilmiah saya itu YMMV 20 kali lebih cepat) karena tidak melihat semua file yang terbuka tetapi hanya file untuk jalur itu.lsof /path
tidak menghasilkan apa-apa selainlsof | grep /path
menunjukkan kepada saya proses yang memegang file yang terbuka dan mencegah saya dari unmount volume.Bagi saya, proses yang menyinggung adalah daemon yang berjalan di chroot. Karena itu di chroot,
lsof
danfuser
tidak akan menemukannya.Jika Anda menduga ada sesuatu yang tersisa berjalan di chroot,
sudo ls -l /proc/*/root | grep chroot
akan menemukan pelakunya (ganti "chroot" dengan path ke chroot).sumber
sudo ls -l /proc/*/status | grep HOST
mana HOST adalah nama host penjaralsof /mountpoint
danfuser /mountpoint
keduanya menemukan proses bahkan jika chroot.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
Agar fuser melaporkan PID yang memegang mount terbuka, Anda harus menggunakan -m
sumber
lsof /path
memberikan daftar PID yang sama denganfuser -m /path
.fuser -M /path
akan memeriksa apakah/path
ada mountpoint.Kami memiliki sistem berpemilik di mana sistem file root biasanya hanya-baca. Kadang-kadang, ketika file harus disalin, itu dibuat kembali baca-tulis:
Dan kemudian dipasang kembali:
Namun kali ini,
mount
terus memberikanmount: / is busy
kesalahan. Itu disebabkan oleh proses memegang deskriptor terbuka ke file yang telah digantikan oleh beberapa perintah, yang dieksekusi ketika sistem file itu baca-tulis. Baris penting darilsof -- /
keluaran adalah (nama telah diubah):Perhatikan
DEL
dalam output. Cukup memulai kembali proses menahan file yang dihapus menyelesaikan masalah.sumber
lsof
danfuser
tidak memberi saya apa-apa juga.Setelah proses penggantian nama semua direktori yang mungkin untuk .old dan me-reboot sistem setiap kali setelah saya membuat perubahan, saya menemukan satu direktori tertentu (terkait dengan postfix) yang bertanggung jawab.
Ternyata saya pernah membuat symlink dari
/var/spool/postfix
ke/disk2/pers/mail/postfix/varspool
untuk meminimalkan penulisan disk pada sistem file root berbasis SDCARD (Sheeva Plug).Dengan symlink ini, bahkan setelah menghentikan
postfix
dandovecot
layanan (baikps aux
dannetstat -tuanp
tidak menunjukkan apa pun yang terkait) saya tidak bisaunmount /disk2/pers
.Ketika saya dihapus symlink dan memperbarui
postfix
dandovecot
config file untuk menunjuk langsung ke dirs baru/disk2/pers/
saya bisa berhasil menghentikan layanan danunmount
direktori.Lain kali saya akan melihat lebih dekat pada output dari:
Perintah di atas secara rekursif akan mencantumkan semua tautan simbolik dalam pohon direktori (di sini mulai dari
/var
) dan memfilter nama-nama yang mengarah ke titik pemasangan target tertentu (di sini disk2).sumber
Saya mengalami masalah ini, dan ternyata ada sesi layar aktif di latar belakang yang tidak saya ketahui. Saya terhubung ke sesi layar aktif lainnya dan cangkangnya bahkan tidak sedang duduk di direktori yang terpasang. Membunuh sesi-sesi shell lainnya telah memperbaiki masalah ini untuk saya.
Hanya berpikir saya akan membagikan resolusi saya.
sumber
Hari ini masalahnya adalah soket terbuka (khusus
tmux
):sumber
Saya memiliki beberapa
bind
danoverlay
tunggangan di bawah tunggangan yang menghalangi saya, periksa penyelesaian tab untuk titik pemasangan yang ingin Anda lepas. Saya menduga itu adalah overlay mount pada khususnya tetapi bisa juga mengikatsumber
Ini lebih merupakan solusi daripada jawaban, tapi saya mempostingnya kalau-kalau itu bisa membantu seseorang.
Dalam kasus saya, saya mencoba untuk memodifikasi LVM karena saya ingin membuat partisi / var lebih besar, jadi saya perlu umount itu. Saya mencoba semua komentar dan menjawab di posting ini (terima kasih semua orang dan terutama @ ole-tange untuk mengumpulkan mereka) dan masih mendapat kesalahan "perangkat sibuk".
Saya mencoba membunuh sebagian besar proses dalam urutan yang ditentukan dalam runlevel 0 juga, kalau-kalau urutannya relevan dalam kasus saya, tetapi itu juga tidak membantu. Jadi apa yang saya lakukan adalah membuat saya runlevel khusus (menggabungkan output dari chkconfig ke dalam perintah chkconfig --level baru) yang akan sangat mirip dengan 1 (mode pengguna tunggal) tetapi dengan kemampuan jaringan (dengan jaringan ssh dan xinet).
Ketika saya menggunakan redhat, runlevel 4 ditandai sebagai "tidak digunakan / didefinisikan pengguna", jadi saya menggunakan yang itu, dan jalankan
init 4
Dalam kasus saya ini ok karena saya perlu me-reboot server dalam hal apa pun, tetapi mungkin itu akan menjadi kasus siapa pun yang men-tweak disk.sumber