Jika memungkinkan, biarkan kami menemukan/mengidentifikasi proses yang sibuk, matikan proses itu lalu unmount
share/ drive samba untuk meminimalkan kerusakan:
-
lsof | grep '<mountpoint of /dev/sda1>'
(atau apa pun perangkat yang terpasang) -
pkill target_process
(membunuh proc. sibuk dengan nama |kill PID
|killall target_process
) -
umount /dev/sda1
(atau apa pun perangkat yang terpasang)
Hindari umount -l
Pada saat penulisan, jawaban pilihan teratas merekomendasikan penggunaan umount -l
.
umount -l
berbahaya atau paling tidak aman . Singkatnya:
- Itu tidak benar-benar melepas perangkat, itu hanya menghapus sistem file dari namespace. Menulis untuk membuka file dapat dilanjutkan.
- Ini dapat menyebabkan kerusakan sistem file btrfs
Mengatasi / alternatif
Perilaku berguna dari umount -l
menyembunyikan sistem file dari akses oleh mutlak nama path, sehingga meminimalkan penggunaan moutpoint lebih lanjut.
Perilaku yang sama ini dapat dicapai dengan memasang direktori kosong dengan izin 000
atas direktori yang akan dilepas.
Maka setiap akses baru ke nama file di bawah mountpoint akan mengenai direktori yang baru dihamparkan tanpa izin - pemblokir baru ke unmount dengan demikian dicegah.
Pertama coba remount,ro
Pencapaian unmount utama yang akan dibuka adalah remount read-only. Saat Anda mendapatkan remount,ro
lencana, Anda tahu bahwa:
- Semua data yang tertunda telah ditulis ke disk
- Semua upaya penulisan di masa mendatang akan gagal
- Data dalam keadaan konsisten, jika Anda perlu memutuskan sambungan perangkat secara fisik.
mount -o remount,ro /dev/device
dijamin gagal jika ada file yang dibuka untuk ditulis, jadi coba langsung. Anda mungkin merasa beruntung, punk!
Jika Anda kurang beruntung, fokuslah hanya pada proses dengan file terbuka untuk menulis:
lsof +f -- /dev/<devicename> | awk 'NR==1 || $4~/[0-9]+[uw -]/'
Anda kemudian dapat memasang ulang perangkat hanya-baca dan memastikan status yang konsisten.
Jika Anda tidak dapat me-remount read-only pada saat ini, selidiki beberapa kemungkinan penyebab lain yang tercantum di sini.
Pencapaian pemasangan ulang hanya baca dibuka ð☑
Selamat, data Anda di mountpoint sekarang konsisten dan terlindung dari penulisan di masa mendatang.
Mengapa fuser
lebih rendah dari lsof
Mengapa tidak menggunakan fuser
lebih awal? Ya, Anda bisa saja, tapi fuser
beroperasi pada direktori , bukan perangkat , jadi jika Anda ingin menghapus mountpoint dari ruang nama file dan masih menggunakan fuser
, Anda harus:
- Duplikasikan sementara mountpoint dengan
mount -o bind /media/hdd /mnt
ke lokasi lain - Sembunyikan titik pemasangan asli dan blokir namespace:
Begini caranya:
null_dir=$(sudo mktemp --directory --tmpdir empty.XXXXX")
sudo chmod 000 "$null_dir"
# A request to remount,ro will fail on a `-o bind,ro` duplicate if there are
# still files open for writing on the original as each mounted instance is
# checked. https://unix.stackexchange.com/a/386570/143394
# So, avoid remount, and bind mount instead:
sudo mount -o bind,ro "$original" "$original_duplicate"
# Don't propagate/mirror the empty directory just about hide the original
sudo mount --make-private "$original_duplicate"
# Hide the original mountpoint
sudo mount -o bind,ro "$null_dir" "$original"
Anda kemudian akan memiliki:
- Ruang nama asli disembunyikan (tidak ada lagi file yang dapat dibuka, masalahnya tidak bisa menjadi lebih buruk)
- Direktori yang dipasang pengikat rangkap (berlawanan dengan perangkat) untuk menjalankan
fuser
.
Ini lebih berbelit-belit, tetapi memungkinkan Anda untuk menggunakan:
fuser -vmMkiw <mountpoint>
yang secara interaktif akan meminta untuk mematikan proses dengan file terbuka untuk ditulis. Tentu saja, Anda dapat melakukan ini tanpa menyembunyikan titik mount sama sekali, tetapi umount -l
di atas meniru , tanpa bahaya apa pun.
-w
beralih membatasi proses penulisan, dan -i
bersifat interaktif, jadi setelah remount hanya-baca, jika Anda sedang terburu-buru, Anda dapat menggunakan:
fuser -vmMk <mountpoint>
untuk mematikan semua proses yang tersisa dengan file terbuka di bawah mountpoint.
Semoga pada titik ini, Anda dapat melepas perangkat. (Anda harus menjalankan umount
di mountpoint dua kali jika Anda mengikat memasang mode 000
direktori di atas.)
Atau gunakan:
fuser -vmMki <mountpoint>
untuk mematikan secara interaktif sisa proses read-only yang memblokir proses unmount.
Sialan, saya masih mendapatkan target is busy
!
Buka file bukan satu-satunya pemblokir unmount. Lihat di sini dan di sini untuk penyebab lain dan solusinya.
Bahkan jika Anda memiliki beberapa gremlin yang mengintai yang mencegah Anda untuk melepas perangkat sepenuhnya, Anda setidaknya memiliki sistem file Anda dalam keadaan konsisten.
Anda kemudian dapat menggunakan lsof +f -- /dev/device
untuk membuat daftar semua proses dengan file terbuka pada perangkat yang berisi sistem file, lalu mematikannya.
YA !! Ada cara untuk melepaskan perangkat yang sibuk dengan segera - meskipun sedang sibuk dan tidak dapat dilepas secara paksa. Anda dapat membersihkan semuanya nanti:
umount -l /PATH/OF/BUSY-DEVICE
umount -f /PATH/OF/BUSY-NFS (NETWORK-FILE-SYSTEM)
CATATAN/PERHATIAN
- Perintah ini dapat mengganggu proses yang sedang berjalan, menyebabkan hilangnya data ATAU merusak file yang terbuka. Program yang mengakses file PERANGKAT/NFS target dapat menimbulkan kesalahan ATAU tidak dapat berfungsi dengan baik setelah pelepasan paksa.
- Lakukan jangan jalankan di atas
umount
perintah saat berada di dalam jalur terpasang (Folder/Drive/Perangkat) itu sendiri. Pertama, Anda dapat menggunakanpwd
perintah untuk memvalidasi jalur direktori Anda saat ini (yang seharusnya bukan jalur terpasang), lalu gunakancd
perintah untuk keluar dari jalur terpasang - untuk melepasnya nanti menggunakan perintah di atas.
Pastikan Anda tidak sedang berada di perangkat terpasang saat mencoba melakukan umount.