Często mam problem z podłączeniem katalogu:
umount / mnt / reż umount: / mnt / dir: urządzenie jest zajęte
Istnieje wiele powodów, dla których urządzenie jest zajęte. Czasami są uruchomione procesy, które mają otwarte blokady, czasem są inne katalogi zamontowane na górze /mnt/dir
.
Moje pytanie:
Jakie są kroki, aby sprawdzić, dlaczego nie można odmontować katalogu.
Wiem, że jest wiele powodów, ale możesz wyjaśnić konkretne rozwiązanie.
[EDYTOWAĆ]
[X] działające procesy na zamontowanych woluminach.
[X] inny wolumin jest zamontowany na woluminie, który chcemy odmontować
[_] NFS blokuje wolumin, który chcemy odmontować
Odpowiedzi:
Sposób sprawdzenia to
fuser -vm /mnt/dir
, który należy uruchomić jako root. Powie ci, które procesy uzyskują dostęp do punktu podłączenia.Alternatywą jest
lsof /mnt/dir
, która pokaże każdy otwarty plik na wierzchowcu. Znowu najlepiej uruchomić jako root.Możesz uruchomić dowolny z nich jako inny niż root, ale wtedy dane wyjściowe będą ograniczone do twoich procesów - te od innych użytkowników będą po prostu dyskretnie nie pokazywane, nawet jeśli zapobiegną odmontowaniu systemu plików.
Przykład:
Pole „Dostęp” informuje, w jaki sposób można uzyskać do niego dostęp. W tym przypadku jądro używa go jako mounta (duh, ale odmontowanie będzie w porządku tylko z tym).
bash
ma go jako bieżący katalog roboczy (będzie musiał przejśćcd
do innego katalogu przed odmontowaniem), a gvim ma zarówno bieżący katalog, jak i plik otwarty (będzie musiał zamknąć tego gvima).Na tym wyjściu możesz zobaczyć bieżące katalogi zarówno dla bash, jak i gvim (jako typ
DIR
). Możesz także zobaczyć, który plik gvim ma otwarty do zapisu.Jak wymusić problem:
fuser
ma-k
opcję, która wyśle sygnał (domyślnie:)SIGKILL
do każdego procesu za pomocą mount. Jest to dość silny sposób, aby powstrzymać wierzchowca przed zajęciem. (I oczywiście uważaj na siebieSIGKILL
!)umount
ma-l
opcję wykonania leniwego odmontowania. Podłączenie zostanie usunięte z przestrzeni nazw systemu plików (więc/mnt/Zia/src
w tym przykładzie nie będzie go widać pod ), ale pozostanie zamontowane, więc programy uzyskujące do niego dostęp mogą kontynuować. Kiedy ostatni program, który do niego wejdzie, zakończy się, odmontowanie nastąpi.Jest jeszcze jedna możliwa do naprawienia przyczyna odmontowania, a serwer NFS przestaje działać. Tutaj możesz użyć
umount -f
, ale ryzykujesz utratą danych, jeśli to zrobisz. (Klient mógł zapisywać w pamięci podręcznej zapisy, które nie zostały jeszcze potwierdzone przez serwer, i zapisy te zostaną odrzucone. Aplikacje zostały już jednak poinformowane).źródło
fuser -k
jest bardzo ryzykowne, jak będziesz robił to jako root i jeśli nie jesteś bardzo pewny, jakie procesy będą zabijane można zrobić naprawdę spektakularny uszkodzenia poleceniem nieostrożnego ...-k
opcji, więc będziesz wiedział, które procesy zamierzasz zabić. Ale dodam ostrzeżenie.fuser -vm
pokazał „mount kernel”. musiałem zrobićsystemctl stop opt.mount
zamiast manualnegoumount
.umount -f
i NFS. Mój problem związany był z NFS, gdzie moje komputery programistów zmieniły adresy IP i nie mogłem usunąć udziału.Powinieneś użyć:
źródło
-l
to dokładnie taka opcja, kiedy nawet-f
nie działa.Kolejny wolumin jest zamontowany na woluminie, który chcemy odmontować:
mount
Komenda pozwala wiedzieć wszystko tomy zamontowany jeśli invoqued bez argumentów ani opcji (z wyjątkiem-v
). Możesz mieć listę aktywnych punktów montowania, dodając trochę perla:Następnie po prostu grepuj nad punktem kontrolnym, z którego chcesz odmontować, a będziesz wiedział, czy na tym systemie są zamontowane systemy plików.
Masz dwa rozwiązania . Odmontuj systemy plików lub przenieś je za pomocą
mount --move olddir newdir
(jądro> 2.5.1)źródło
Otwórz pliki
Procesy z otwartymi plikami są zwykle winowajcami. Wyświetl je:
Zaletą używania
/dev/<device>
zamiast jest/mountpoint
: punkt montowania zniknie poumount -l
lub może zostać ukryty przez nakładane montowanie.fuser
można również użyć, ale moim zdaniemlsof
ma bardziej użyteczny efekt.fuser
Jest to jednak przydatne, jeśli chodzi o zabijanie procesów powodujących twoje dramaty, abyś mógł dalej żyć.Wyświetl listę plików
<mountpoint>
(patrz zastrzeżenie powyżej):Interaktywnie zabijaj tylko procesy z plikami otwartymi do zapisu:
Po ponownym zamontowaniu tylko do odczytu (
mount -o remount,ro <mountpoint>
) można bezpiecznie (r) zabić wszystkie pozostałe procesy:Punkty montażowe
Winowajcą może być samo jądro. Inny system plików zamontowany w systemie plików, który próbujesz
umount
wywołać, jest smutny. Sprawdź z:W przypadku montowania w pętli zwrotnej sprawdź także dane wyjściowe:
Anonimowe i-węzły (Linux)
Anonimowe i-węzły mogą być tworzone przez:
open
zO_TMPFILE
)Są to najbardziej nieuchwytne typu pokemon i pojawiają się w
lsof
„STYPE
kolumnę jakoa_inode
(który Undocumented wlsof
stronę człowieka ).Nie pojawią się w
lsof +f -- /dev/<device>
, więc musisz:Dla procesów posiadających anonimowych węzłów zabijania, patrz: Lista bieżących Inotify zegarki (pathname, PID) .
źródło
Pytanie, jak sprawdzić, czy NFS uzyskuje dostęp do katalogu, który ma zostać odmontowany, nadal pozostaje bez odpowiedzi.
Mam tylko to:
Sprawdź, czy nfsd działa:
Pokaż zamontowane katalogi według klientów:
i bez
showmount
argumentów pokazuje tylko hosty klienta, nawet jeśli są w trybie off-line. Zakładam, że jest to specjalne zachowanie NFS.źródło
Dla mnie problem polegał na tym, że byłem zalogowany więcej niż raz (przez ssh) i na jednym z logowań byłem w wierszu poleceń, gdzie pwd znajdował się w folderze podrzędnym względem punktu montowania.
źródło