umount: target sedang sibuk

8

Saya telah memasang /devdan segera mencoba melepas:

$ sudo mount -o rbind /dev m
$ sudo umount m
umount: /tmp/m: target is busy.
$ sudo lsof m
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
kdevtmpfs  55 root  cwd    DIR    0,6     4420    2 m
kdevtmpfs  55 root  rtd    DIR    0,6     4420    2 m

Saya telah membaca bahwa fuserdapat membunuh proses mengakses titik mount, tetapi saya ingin memahami apa yang terjadi dalam kasus sederhana ini. Menurut lsofoutput apakah sesuatu menggunakan mountpoint sebagai direktori kerja saat ini (cwd)?

Saya tidak ingin menggunakan unmount malas.

robert
sumber

Jawaban:

11

Anda biasa rbindme-mount sistem file dan submount. Untuk meng-unmount sistem file, Anda harus meng-unmount submountnya terlebih dahulu (dan yang sama untuk submount-nya, secara rekursif). Tapi hati-hati!

mount --make-rslave m
umount -R m

Tanpa perintah pertama, Anda berisiko melepas semua sub-mount pada sumber , karena pemasangan propagasi. Dalam hal ini berarti semua sub-mount /dev, yang akan memiliki efek buruk pada sistem Anda yang sedang berjalan ;-).

Pada dasarnya mount propagation adalah jebakan besar yang menunggu Anda untuk jatuh ke dalamnya :-). Sepertinya akan lebih baik jika bind mounts menonaktifkannya secara default.


kdevtmpfsadalah utas kernel yang memelihara devtmpfs. Itu tidak mencegah pelepasan devtmpfs. Ini karena utas kernel berjalan pada mount terpisah (seperti bind mount). Anda tidak dapat melihat mount asli itu; itu di mount namespace yang terpisah. Jika Anda ingin mencoba dan mencari tahu mengapa kdevtmpfsmuncul lsof, saya tidak tahu, mungkin menganggapnya sebagai pertanyaan terpisah.

sourcejedi
sumber