umount - perangkat sedang sibuk

14

Terkadang ketika saya ingin umount suatu perangkat, mis

sudo umount /dev/loop0

Saya akan menerima pesannya

umount: /mnt: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

Saya biasanya mengatasi masalah ini dengan menutup jendela konsol (dalam kasus saya xfce4-terminal) dan kemudian umount.

Apa artinya masalah ini? Apakah ada solusi yang lebih cerdas?

xralf
sumber
2
Itu terjadi misalnya jika Anda masih di shell di direktori itu ke tempat perangkat dipasang.
klapaucius
Saya tidak ingat apakah saya ada di sana tetapi saya mencobanya dan Anda benar, ini terjadi.
xralf

Jawaban:

14

Ini berarti bahwa beberapa proses memiliki direktori yang berfungsi atau file terbuka menangani di bawah titik mount. Hal terbaik yang harus dilakukan adalah mengakhiri proses yang menyinggung, mengubah direktori kerjanya atau menutup pegangan file sebelum melepas.

Ada alternatif di Linux. Menggunakan umount -lpanggilan "malas" tidak terpasang. Sistem file masih akan di-mount tetapi Anda tidak akan dapat melihat atau menggunakannya, kecuali untuk proses yang sudah menggunakannya. Ketika program yang mengganggu keluar (melalui cara apa pun) sistem akan "menyelesaikan" melepas sistem file.

bahamat
sumber
2
Apakah ada cara untuk mengetahui proses mana yang memiliki pegangan file terbuka dan harus dihentikan?
xralf
4
Menggunakan lsofmungkin merupakan cara terbaik.
bahamat
1
misalnya lsof | grep loop0?
xralf
Tidak, grep untuk titik pemasangan. Seharusnya daftar semua file di bawahnya. Saya tidak berpikir itu akan menunjukkan hal-hal yang hanya memiliki direktori yang berfungsi di bawah mount point, jadi itu bukan metode yang sempurna.
bahamat
7

Anda juga dapat menggunakan fuseruntuk membunuh semua proses menggunakan sistem file yang terpasang.

fuser -cuk /mnt

Pilihan:

-c     
    Same as -m option, used for POSIX compatibility.

-u, --user
    Append the user name of the process owner to each PID.

-k, --kill
    Kill  processes accessing the file. Unless changed with -SIGNAL, SIGKILL is sent. An fuser process
    never kills itself, but may kill other fuser processes. The  effective  user  ID  of  the  process
    executing fuser is set to its real user ID before attempting to kill.kill.

-m NAME, --mount NAME
    NAME specifies a file on a mounted file system or a block device that is  mounted.  All  processes
    accessing  files  on  that  file  system  are  listed.   If  a  directory file is specified, it is
    automatically changed to NAME/. to use any file system that might be mounted on that directory.

Periksalah diri Anda di tempat menjelaskan .

sys0dm1n
sumber
3

Mengingat "solusi biasa" Anda, itu berarti bahwa shell yang Anda jalankan di jendela konsol Anda memiliki direktori dalam sistem file pada perangkat itu sebagai direktori kerjanya saat ini.

Linux, dan Unix secara umum, sangat menginginkan agar sistem file tetap terpasang jika suatu proses memiliki direktori kerja saat ini dalam sistem file tersebut.

Anda bisa menggunakan cddi jendela konsol untuk keluar dari direktori di dalam atau di bawah /mntdaripada membunuh jendela konsol, dan shell berjalan di dalamnya.

Bruce Ediger
sumber
0

Saya menemukan situasi yang dapat mengganggu pelepasan perangkat yang akan saya bagikan sebagai jawaban meskipun pertanyaan ini sudah sangat lama.

Jika Anda memiliki saham NFS yang di-host di mesin, dan salah satu saham NFS tersebut didukung oleh perangkat yang Anda coba lepas, Anda harus berhenti membagikannya (paling baik dilakukan dengan menghentikan layanan NFS, misalnya sudo service nfs-kernel-server stoppada versi terbaru dari Ubuntu ). Server NFS mungkin tidak muncul di lsof atau fuser, yang dapat membuat masalah sulit untuk diidentifikasi.

Wug
sumber