Önlemek umount -l
Yazma sırasında, en çok oy alan cevap kullanılmasını önerir umount -l
.
umount -l
tehlikeli veya en iyi ihtimalle güvensizdir . Özetle:
- Aslında cihazın bağlantısını kesmez, sadece dosya sistemini ad alanından kaldırır. Dosya açma yazma işlemine devam edilebilir.
- Btrfs dosya sistemi bozulmasına neden olabilir
Geçici çözüm / alternatif
Kullanışlı davranışı umount -l
, dosya sistemini mutlak erişimden gizlemektir. yol adları ile erişmesini engellemek ve böylece daha fazla nokta noktası kullanımını en aza indirmektir.
Aynı davranış, izinleri olan boş bir dizin bağlayarak da gerçekleştirilebilir 000
bağlayarak da gerçekleştirilebilir.
Daha sonra, bağlama noktasının altındaki dosya adlarına yeni erişim, yeni yerleştirilmiş dizine sıfır izinle vurur - bu nedenle, çıkarılan yeni engelleyiciler engellenir.
İlk önce remount,ro
Kilidi açılacak en büyük sökme başarısı salt okunur remoldur. Eğer kazanmak zaman remount,ro
rozeti, bunu biliyor:
- Bekleyen tüm veriler diske yazıldı
- Gelecekteki tüm yazma girişimleri başarısız olur
- Cihazın fiziksel olarak bağlantısını kesmeniz gerekiyorsa veriler tutarlı bir durumdadır.
mount -o remount,ro /dev/device
yazma için açık dosyalar varsa başarısız olacağı garanti edilir , bu yüzden hemen deneyin. Kendini şanslı hissediyorsun, punk!
Şanssızsanız, yalnızca yazmaya açık dosyaları olan işlemlere odaklanın :
lsof +f -- /dev/<devicename> | awk 'NR==1 || $4~/[0-9]+[uw -]/'
Ardından, cihazı salt okunur olarak yeniden monte edebilmeniz ve tutarlı bir durum sağlayabilmeniz gerekir.
Bu noktada salt okunur yeniden bağlayamıyorsanız, burada listelenen diğer olası nedenlerden bazılarını araştırın .
Salt okunur yeniden bağlama başarısı kilidi 🔓☑
Tebrikler, bağlama noktasındaki verileriniz artık tutarlı ve gelecekteki yazılardan korunuyor.
Neden fuser
daha düşüklsof
Neden fuser
daha önce kullanmıyorsunuz ? Eh, sahip olabilirsiniz, ancak bir aygıtfuser
üzerinde değil, bir dizin üzerinde çalışır , bu nedenle bağlama noktasını dosya adı alanından kaldırmak ve hala kullanmak istiyorsanız, şunları yapmanız gerekir:fuser
- Bağlantı noktasını geçici
mount -o bind /media/hdd /mnt
olarak başka bir konuma kopyalayın
- Orijinal bağlama noktasını gizleyin ve ad alanını engelleyin:
Bunu nasıl yapacağınız aşağıda açıklanmıştır:
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"
Daha sonra sahip olacaksınız:
- Orijinal ad alanı gizlendi (başka dosya açılamadı, sorun daha kötüye gidemez)
- Çalıştırılacağı yinelenen bağlanan bir dizin (bir aygıtın aksine)
fuser
.
Bu daha kıvrımlıdır [1] , ancak şunları kullanmanızı sağlar:
fuser -vmMkiw <mountpoint>
bu da etkileşimli olarak süreçleri yazmaya açık dosyalar ile öldürmeyi isteyecektir. Tabii ki, bunu montaj noktasını gizlemeden yapabilirsiniz, ancak yukarıdaki taklit eder.umount -l
tehlikeler olmadan eder.
-w
Anahtar süreçlerini yazmaya kısıtlar ve -i
bunu daha sonra kullanabileceği bir acele iseniz, salt okuma yeniden bağlama böylece sonra interaktif:
fuser -vmMk <mountpoint>
bağlama noktasının altında kalan dosyalarla tüm kalan işlemleri öldürmek.
Umarım bu noktada, cihazın bağlantısını kesebilirsiniz. ( umount
Bir modu bağlarsanız bağlama noktasında iki kez koşmanız gerekir000
dizini .)
Veya kullan:
fuser -vmMki <mountpoint>
bağlantısını keserek geri kalan salt okunur işlemleri etkileşimli olarak öldürmek.
Lanet olsun, hala alıyorum target is busy
!
Açık dosyalar tek sökme engelleyici değildir. Buraya ve buraya bakınDiğer nedenler ve çözümleri için .
Cihazın bağlantısını tamamen kesmenizi engelleyen gizli bir gremlin olsa bile, en azından dosya sisteminizi tutarlı bir durumda tuttunuz.
Daha sonra lsof +f -- /dev/device
, dosya sistemini içeren aygıtta açık dosyaları olan tüm işlemleri listelemek ve sonra bunları öldürmek için kullanabilirsiniz.
[1] Kullanmak daha az kıvrımlıdır mount --move
, ancak bunun mount --make-private /parent-mount-point
sonuçları olan gerektirir . Temel olarak, bağlama noktası /
dosya sisteminin altına monte edilirse, bundan kaçınmak istersiniz.