Czasami chciałabym odmontować urządzenie USB z umount /run/media/theDrive
, ale pojawia się drive is busy
błąd.
Jak dowiedzieć się, które procesy lub programy uzyskują dostęp do urządzenia?
process
open-files
unmounting
Stefan
źródło
źródło
Odpowiedzi:
Użyj,
lsof | grep /media/whatever
aby dowiedzieć się, co używa uchwytu.Rozważ także
umount -l
(leniwy umount), aby uniemożliwić nowym procesom korzystanie z dysku podczas czyszczenia.źródło
fuser -mv /path/to/mountpoint
może być bardziej czytelną alternatywą dla wyszukiwania procesów za pomocą punktu kontrolnego.lsof | grep
działa dla mnie lepiej.fuser -mv
wydaje się po prostu zrzucić ponad 80 niepowiązanych procesów. Korzystam z katalogów powiązanych z montowaniem.umount -l
jest niebezpieczny .mount -o bind
tryb000
pusty katalog na górze zamiast i wyczyść za pomocąlsof +f -- /dev/device
.Większość czasu, najlepiej polecenie stosowania jest lsof ( „ l i y t O pióra f iles”).
gdzie
/media/usb0
jest punkt podłączenia napędu USB lub innego systemu plików do odmontowania.+f --
mówi lsof, aby traktował kolejny argument jako punkt podłączenia; zwykle, ale nie zawsze, zarządza samodzielnie, więc tolsof /media/usb0
też działa. Znajduje otwarte pliki (nawet niepowiązane), pliki zmapowane w pamięci, bieżące katalogi i niektóre bardziej niejasne zastosowania. Musisz uruchomić tę komendę jako root, aby uzyskać informacje o procesach innych użytkowników (i myślę, że istnieją jednorożce, w którychlsof
trzeba uruchomić jako root).Istnieją zastosowania, których lsof nie znajdzie; są one rzadkie na nośnikach wymiennych. Zawierają:
/foo
jeśli/foo/bar
jest to punkt montowania./foo
jeśli/foo/bar
jest to zamontowane urządzenie blokowe lub zwykły plik montowany w pętli, lub jeśli jest to źródło podłączenia do Linuxa.Innym poleceniem, które może być użyte w skrócie, jest utrwalacz, który wyświetla tylko PID procesów z otwartymi plikami na urządzeniu:
źródło
Możesz użyć,
lsof
jak powiedział Peter, lub jeśli jesteś pewien, że chcesz po prostu zabić wszystkie te rzeczy i odmontować je, prawdopodobnie możesz zrobić coś takiego:źródło
-M
bezpieczeństwo.-M
należy zastosować.fuser
:-M, --ismountpoint Request will be fulfilled only if NAME specifies a mountpoint. This is an invaluable seatbelt which prevents you from killing the machine if NAME happens to not be a filesystem.
Otwórz pliki
Procesy z otwartymi plikami są zwykle sprawcami. 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 mocowań z pętlą zwrotną ( dzięki Stephen Kitt ) sprawdź także wyjście:
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:Aby poznać procesy zabijania posiadające anonimowe i-węzły, patrz: Lista aktualnych zegarów inotify (ścieżka, PID) .
inotify
zegarki (Linux)Komentarz ten wyjaśnia, dlaczego
inotify
nie powinno zapobiec odinstalowania, ale uwaga ta opisuje sytuacje, w których będzie :źródło
lsof
.Mountpoints
sekcji.Jeśli korzystasz z GNOME, odmontowanie za pomocą Nautilus spowoduje wyświetlenie komunikatu informującego, który proces nadal korzysta z napędu i pliku, z którego korzysta.
źródło
Dla (przynajmniej) OpenBSD:
Na przykład (użycie
doas
do wykonaniafstat
jako root, ponieważ inaczej widzielibyśmy tylko nasze własne procesy):W takim przypadku nie byłbym w stanie odmontować,
/usr/ports
dopóki użytkownik_pbuild
nie zakończy tych dwóchmake
procesów.źródło
Jest to częsta pułapka: su do innego użytkownika (root lub dowolnego innego użytkownika), przejdź do katalogu podłączonego urządzenia, a następnie wyloguj się jako ten użytkownik. Kiedy zapomnisz, że opuściłeś ten katalog, możesz spróbować znaleźć, dopóki nie będziesz ślepy.
lsof
pokazuje powłokę, z której bieżącego katalogu korzysta to urządzenie. Możesz chcieć ponownie su jako ten użytkownik, aby zmienić katalog.źródło