Mam dyski samby, do których codziennie ma dostęp wielu użytkowników. Mam już kod do rozpoznawania udostępnionych dysków (z tabeli SQL) i montowania ich w specjalnym katalogu, w którym wszyscy użytkownicy mogą uzyskać do nich dostęp.
Chcę wiedzieć, jeśli usunę dysk ze swojej tabeli SQL (skutecznie przełączając go w tryb offline), w jaki sposób, a nawet czy istnieje sposób na odmontowanie zajętego urządzenia? Do tej pory odkryłem, że żadna forma umount
nie działa.
Ignorując możliwość zniszczenia danych - czy można odmontować urządzenie, które jest obecnie odczytywane?
cd
zamontowałeś katalog, potem zostałeś rootem lub zaloguj się ponownie, a druga powłoka została uwięziona. Zróbexit
na wszystkich muszlach.Odpowiedzi:
TAK!! Istnieje sposób na natychmiastowe odłączenie zajętego urządzenia (nawet jeśli jest zajęte i nie można go odmontować na siłę). Możesz wyczyścić wszystko później:
UWAGA:
źródło
-l
tutaj jest mała literaL
(dla „leniwego odmontowywania”). (Zobacz tę pokrewną odpowiedź .)-l
/--lazy
Nie będzie uszkodzonych Otwarte pliki, ale na Linux wydaje się , że nie może wiedzieć, kiedy urządzenie jest faktycznie odmontowana i mogą zostać usunięteJeśli to możliwe, zlokalizujmy / zidentyfikuj zajęty proces, zabij proces, a następnie odmontuj udział samby, aby zminimalizować uszkodzenia.
lsof | grep '<mountpoint of /dev/sda1>'
(lub cokolwiek to jest zamontowane urządzenie)pkill target_process
(zabija zajętych proc. według nazwy |kill PID
|killall target_process
)umount /dev/sda1
(lub cokolwiek to jest zamontowane urządzenie)źródło
lsof
:# opkg install lsof
Upewnij się, że nadal nie jesteś w zamontowanym urządzeniu, gdy próbujesz odmontować.
źródło
umount
.Spróbuj wykonać następujące czynności, ale przed uruchomieniem zwróć uwagę, że
-k
flaga zabije wszystkie uruchomione procesy, utrzymując urządzenie w ruchu.Te
-i
marki flagfuser
zapytać przed zabiciem.źródło
lsof | grep '/dev/<my-device>
nic nie zwróciło, ale działa świetnie! Może również zasugerowaćfuser -m /dev/<my-device>
na wypadek, gdybyś chciał poznać proces przed jego zabiciem.Uniknąć
umount -l
W momencie pisania odpowiedzi najlepiej głosująca zaleca użycie
umount -l
.umount -l
jest niebezpieczne lub w najlepszym razie niebezpieczne . W podsumowaniu:Obejść / alternatywa
Przydatnym zachowaniem
umount -l
jest ukrywanie systemu plików przed dostępem przez bezwzględne nazwy ścieżek, minimalizując w ten sposób dalsze użycie moutpointów.To samo zachowanie można osiągnąć, montując pusty katalog z uprawnieniami
000
do odmontowania katalogu.Wówczas wszelkie nowe dostępy do nazw plików poniżej punktu montowania trafią do nowo nałożonego katalogu z zerowymi uprawnieniami - w ten sposób zapobiega się nowym blokerom odmontowania.
Najpierw spróbuj
remount,ro
Najważniejszym osiągnięciem odmontowanym do odblokowania jest ponowne zamontowanie tylko do odczytu. Po zdobyciu
remount,ro
odznaki wiesz, że:mount -o remount,ro /dev/device
z pewnością zawiedzie, jeśli istnieją pliki do zapisu , więc spróbuj tego od razu. Możesz mieć szczęście, punku!Jeśli masz pecha, skup się tylko na procesach z plikami otwartymi do zapisu :
Powinieneś być w stanie ponownie zamontować urządzenie tylko do odczytu i zapewnić spójny stan.
Jeśli w tym momencie nie możesz ponownie zamontować tylko do odczytu, sprawdź inne możliwe przyczyny wymienione tutaj .
Osiągnięcie ponownego montażu tylko do odczytu odblokowane 🔓☑
Gratulacje, Twoje dane w punkcie montowania są teraz spójne i chronione przed przyszłym zapisem.
Dlaczego
fuser
jest gorszy odlsof
Dlaczego nie skorzystać z użycia
fuser
wcześniej? Cóż, możesz mieć, alefuser
działa na katalogu , a nie na urządzeniu , więc jeśli chcesz usunąć punkt montowania z przestrzeni nazw plików i nadal używaćfuser
, musisz:mount -o bind /media/hdd /mnt
do innej lokalizacjiOto jak:
Miałbyś wtedy:
fuser
.Jest to bardziej skomplikowane [1] , ale umożliwia użycie:
który interaktywnie poprosi o zabicie procesów z plikami otwartymi do zapisu. Oczywiście możesz to zrobić bez ukrywania punktu montowania, ale powyższe naśladowania
umount -l
, bez żadnego niebezpieczeństwa.Do
-w
ogranicza przełączyć się do procesów, a pisanie-i
jest interaktywny, więc po read-only Remount, jeśli jesteś on pośpiechu można następnie użyć:aby zabić wszystkie pozostałe procesy z plikami otwartymi pod punktem montowania.
Mam nadzieję, że w tym momencie możesz odmontować urządzenie. (Będziesz musiał uruchomić
umount
się na punkcie montowania dwa razy, jeśli powiązałeś zamontowany000
katalog trybu na górze.)Albo użyj:
interaktywnie zabijać pozostałe procesy tylko do odczytu blokujące odmontowanie.
Cholera, wciąż dostaję
target is busy
!Otwarte pliki to nie jedyny odmontowany bloker. Zobacz tutaj i tutaj aby poznać inne przyczyny i ich rozwiązania.
Nawet jeśli masz jakiegoś czającego się gremlina, który uniemożliwia ci całkowite odmontowanie urządzenia, przynajmniej masz system plików w spójnym stanie.
Następnie można użyć
lsof +f -- /dev/device
do wyświetlenia listy wszystkich procesów z otwartymi plikami na urządzeniu zawierającym system plików, a następnie zabić je.[1] Jest mniej skomplikowany w użyciu
mount --move
, ale wymagamount --make-private /parent-mount-point
to pewnych konsekwencji . Zasadniczo, jeśli punkt montowania jest zamontowany w/
systemie plików, należy tego uniknąć.źródło
--lazy
jest tak niebezpieczny, dlaczego naumount
stronie podręcznika nie ma tak ostrzeżenia ? Mówi tylko: „ Leniwy odmontuj. Odłącz teraz system plików od hierarchii plików i wyczyść wszystkie odniesienia do tego systemu plików, jak tylko nie będzie on już zajęty. ”Sprawdź eksportowane systemy plików NFS za pomocą exportfs -v. Jeśli znaleziono, usuń katalog exportfs -d share: /. Nie pojawiają się one na liście fuser / lsof i mogą uniemożliwić sukces umount.
źródło
Sprawdź
umount2
:źródło
Ktoś wspomniał, że jeśli używasz terminala, a bieżący katalog znajduje się w ścieżce, którą chcesz odmontować, otrzymasz błąd.
Jako uzupełnienie, w tym przypadku,
lsof | grep path-to-be-unmounted
musisz mieć poniżej wyniku:źródło
Inną alternatywą, gdy coś działa, jest edycja
/etc/fstab
, dodanienoauto
flagi i ponowne uruchomienie komputera. Urządzenie nie zostanie zamontowane, a kiedy cokolwiek skończysz, usuń flagę i uruchom ponownie.źródło
Odpowiedź niszowa:
Jeśli masz pulę ZFS na tym urządzeniu, przynajmniej gdy jest to pula oparta na plikach,
lsof
nie pokaże użycia. Ale możesz po prostu ucieca następnie odmontować.
źródło