Saya punya beberapa drive samba yang sedang diakses oleh banyak pengguna setiap hari. Saya sudah memiliki kode untuk mengenali drive bersama (dari tabel SQL) dan memasangnya di direktori khusus di mana semua pengguna dapat mengaksesnya.
Saya ingin tahu, jika saya menghapus drive dari tabel SQL saya (secara efektif mengambil offline) bagaimana, atau bahkan, ada cara untuk meng-unmount perangkat yang sibuk? Sejauh ini saya telah menemukan bahwa segala bentuk umount
tidak berfungsi.
Mengabaikan kemungkinan menghancurkan data - apakah mungkin untuk melepas perangkat yang sedang dibaca?
cd
me-mount dir, maka Anda menjadi root atau login lagi maka shell lainnya terperangkap. Lakukanexit
pada semua kerang.Jawaban:
IYA!! Ada cara untuk melepaskan perangkat yang sibuk dengan segera (bahkan jika perangkat itu sibuk dan tidak dapat dilepas dengan paksa). Anda dapat membersihkan semuanya nanti:
CATATAN:
sumber
-l
sini adalah huruf kecilL
(untuk "malas unmount"). (Lihat jawaban terkait ini .)-l
Saya--lazy
tidak akan merusak file yang terbuka, tetapi di Linux sepertinya Anda tidak tahu kapan perangkat ini benar-benar dilepas dan dapat dihapusJika memungkinkan, mari cari / identifikasi proses yang sibuk, matikan prosesnya, lalu unmount share 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)sumber
lsof
:# opkg install lsof
Pastikan Anda tidak berada di perangkat yang terpasang saat Anda mencoba melakukan umount.
sumber
umount
.Coba yang berikut, tetapi sebelum menjalankannya perhatikan bahwa
-k
flag akan mematikan semua proses yang sedang berjalan yang membuat perangkat sibuk.The
-i
merek Benderafuser
meminta sebelum membunuh.sumber
lsof | grep '/dev/<my-device>
tidak mengembalikan apa pun, tetapi ini bekerja dengan baik! Mungkin ingin juga menyarankanfuser -m /dev/<my-device>
jika Anda ingin mengetahui prosesnya sebelum mematikannya.Menghindari
umount -l
Pada saat penulisan, jawaban terpilih merekomendasikan penggunaan
umount -l
.umount -l
berbahaya atau paling tidak aman . Singkatnya:Bekerja di sekitar / alternatif
Perilaku yang berguna dari
umount -l
menyembunyikan filesystem dari akses dengan nama path absolut , sehingga meminimalkan penggunaan moutpoint lebih lanjut.Perilaku yang sama ini dapat dicapai dengan memasang direktori kosong dengan izin di
000
atas direktori yang akan dilepas.Maka setiap akses baru ke nama file di bawah mountpoint akan mengenai direktori yang baru saja dilapis dengan izin nol - dengan demikian pemblokir baru ke unmount dicegah.
Coba dulu dulu
remount,ro
Pencapaian unmount utama yang akan dibuka adalah remount hanya-baca. Saat Anda mendapatkan
remount,ro
lencana, Anda tahu bahwa:mount -o remount,ro /dev/device
dijamin gagal jika ada file yang terbuka untuk ditulis , jadi cobalah langsung. Anda mungkin merasa beruntung, punk!Jika Anda kurang beruntung, fokus hanya pada proses dengan file yang terbuka untuk ditulis :
Anda kemudian harus dapat memasang kembali perangkat hanya-baca dan memastikan kondisi yang konsisten.
Jika Anda tidak dapat me-remount read-only pada saat ini, selidiki beberapa kemungkinan penyebab lain yang tercantum di sini .
Hanya baca-pasang kembali pencapaian tidak terkunci 🔓☑
Selamat, data Anda di mountpoint sekarang konsisten dan terlindungi dari penulisan di masa mendatang.
Mengapa
fuser
kalah denganlsof
Mengapa tidak menggunakan yang
fuser
tadi? Yah, Anda bisa saja, tetapifuser
beroperasi pada direktori , bukan perangkat , jadi jika Anda ingin menghapus mountpoint dari ruang nama file dan masih menggunakanfuser
, Anda harus:mount -o bind /media/hdd /mnt
untuk ke lokasi lainBegini caranya:
Anda kemudian akan memiliki:
fuser
.Ini lebih berbelit-belit [1] , tetapi memungkinkan Anda untuk menggunakan:
yang secara interaktif akan meminta untuk menghentikan proses dengan file yang terbuka untuk ditulis. Tentu saja, Anda bisa melakukan ini tanpa menyembunyikan titik mount sama sekali, tetapi mimik di atas
umount -l
, tanpa ada bahaya.The
-w
beralih Membatasi menulis proses, dan-i
interaktif, jadi setelah read-hanya remount, jika Anda itu terburu-buru Anda kemudian dapat menggunakan:untuk membunuh semua proses yang tersisa dengan file yang terbuka di bawah mountpoint.
Semoga pada titik ini, Anda dapat melepas perangkat. (Anda harus menjalankan
umount
pada mountpoint dua kali jika Anda telah memasang000
direktori mode di atas.)Atau gunakan:
untuk secara interaktif membunuh proses read-only yang tersisa memblokir unmount.
Sial, aku masih mengerti
target is busy
!Buka file bukan satu-satunya penghambat unmount. Lihat di sini dan di sini untuk sebab lain dan obatnya.
Bahkan jika Anda memiliki beberapa gremlin bersembunyi yang mencegah Anda melepas perangkat sepenuhnya, Anda setidaknya memiliki sistem file Anda dalam keadaan konsisten.
Anda kemudian dapat menggunakan
lsof +f -- /dev/device
untuk mendaftar semua proses dengan file terbuka di perangkat yang berisi sistem file, dan kemudian membunuh mereka.[1] Ini tidak terlalu berbelit-belit untuk digunakan
mount --move
, tetapi itu membutuhkanmount --make-private /parent-mount-point
implikasi . Pada dasarnya, jika mountpoint dipasang di bawah sistem/
file, Anda ingin menghindari ini.sumber
--lazy
sangat berbahaya, mengapa tidak ada peringatan diumount
halaman manual? Yang dikatakannya adalah " Malas unmount. Lepaskan filesystem dari hirarki file sekarang, dan bersihkan semua referensi ke filesystem ini segera setelah tidak sibuk lagi. "Periksa sistem file NFS yang diekspor dengan exportfs -v. Jika ditemukan, hapus dengan direktori exportfs -d share: /. Ini tidak muncul di daftar fuser / lsof, dan dapat mencegah umount dari berhasil.
sumber
Lihat
umount2
:sumber
Seseorang telah menyebutkan bahwa jika Anda menggunakan terminal dan direktori Anda saat ini berada di dalam jalur yang ingin di-unmount, Anda akan mendapatkan kesalahan.
Sebagai pelengkap, dalam hal ini, Anda
lsof | grep path-to-be-unmounted
harus memiliki output di bawah:sumber
Alternatif lain ketika sesuatu berfungsi adalah mengedit
/etc/fstab
, menambahkannoauto
tanda dan me-reboot mesin. Perangkat tidak akan dipasang, dan ketika Anda selesai melakukan apa saja, hapus bendera dan reboot lagi.sumber
Niche Answer:
Jika Anda memiliki kumpulan zfs di perangkat itu, setidaknya saat kumpulan berbasis file,
lsof
tidak akan menunjukkan penggunaannya. Tapi Anda bisa langsung laridan kemudian lepaskan.
sumber