Czasami chciałabym odmontować urządzenie USB z umount /run/media/theDrive, ale pojawia się drive is busybłąd.
Jak dowiedzieć się, które procesy lub programy uzyskują dostęp do urządzenia?
Czasami chciałabym odmontować urządzenie USB z umount /run/media/theDrive, ale pojawia się drive is busybłąd.
Jak dowiedzieć się, które procesy lub programy uzyskują dostęp do urządzenia?
Odpowiedzi:
Użyj, lsof | grep /media/whateveraby dowiedzieć się, co używa uchwytu.
Rozważ także umount -l(leniwy umount), aby uniemożliwić nowym procesom korzystanie z dysku podczas czyszczenia.
fuser -mv /path/to/mountpointmoże być bardziej czytelną alternatywą dla wyszukiwania procesów za pomocą punktu kontrolnego.
lsof | grepdziała dla mnie lepiej. fuser -mvwydaje się po prostu zrzucić ponad 80 niepowiązanych procesów. Korzystam z katalogów powiązanych z montowaniem.
umount -ljest niebezpieczny . mount -o bind tryb 000pusty 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”).
lsof +f -- /media/usb0
gdzie /media/usb0jest 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 to lsof /media/usb0też 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órych lsoftrzeba uruchomić jako root).
Istnieją zastosowania, których lsof nie znajdzie; są one rzadkie na nośnikach wymiennych. Zawierają:
/foojeśli /foo/barjest to punkt montowania./foojeśli /foo/barjest 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:
fuser -m /media/usb0
Możesz użyć, lsofjak powiedział Peter, lub jeśli jesteś pewien, że chcesz po prostu zabić wszystkie te rzeczy i odmontować je, prawdopodobnie możesz zrobić coś takiego:
fuser -Mk /mnt/path
umount /mnt/path
-Mbezpieczeństwo.
-Mnależ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.
Procesy z otwartymi plikami są zwykle sprawcami. Wyświetl je:
lsof +f -- <mountpoint or device>
Zaletą używania /dev/<device>zamiast jest /mountpoint: punkt montowania zniknie po umount -llub może zostać ukryty przez nakładane montowanie.
fusermożna również użyć, ale moim zdaniem lsofma bardziej użyteczny efekt. fuserJest 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):
fuser -vmM <mountpoint>
Interaktywnie zabijaj tylko procesy z plikami otwartymi do zapisu:
fuser -vmMkiw <mountpoint>
Po ponownym zamontowaniu tylko do odczytu ( mount -o remount,ro <mountpoint>) można bezpiecznie (r) zabić wszystkie pozostałe procesy:
fuser -vmMk <mountpoint>
Winowajcą może być samo jądro. Inny system plików zamontowany w systemie plików, który próbujesz umountwywołać, jest smutny. Sprawdź z:
mount | grep <mountpoint>/
W przypadku mocowań z pętlą zwrotną ( dzięki Stephen Kitt ) sprawdź także wyjście:
losetup -la
Anonimowe i-węzły mogą być tworzone przez:
openz O_TMPFILE)Są to najbardziej nieuchwytne typu pokemon i pojawiają się w lsof„S TYPEkolumnę jako a_inode(który Undocumented w lsofstronę człowieka ).
Nie pojawią się w lsof +f -- /dev/<device>, więc musisz:
lsof | grep a_inode
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 :
odmontowany może zawiesić
vx_softcnt_flush()połączenie. Zawieszenie występuje, ponieważ zegarki inotify zwiększająi_countzmienną i powodują, żev_os_hold valuepozostaje ona podniesiona do momentu zwolnienia blokady przez obserwatora inotify.
lsof.
Mountpointssekcji.
Dla (przynajmniej) OpenBSD:
$ fstat /mnt/mountpoint
Na przykład (użycie doasdo wykonania fstatjako root, ponieważ inaczej widzielibyśmy tylko nasze własne procesy):
$ doas fstat /usr/ports
USER CMD PID FD MOUNT INUM MODE R/W SZ|DV NAME
_pbuild make 15172 wd /usr/ports 3923598 drwxrwxr-x r 1536 /usr/ports/
_pbuild make 40034 wd /usr/ports 3923598 drwxrwxr-x r 1536 /usr/ports/
W takim przypadku nie byłbym w stanie odmontować, /usr/portsdopóki użytkownik _pbuildnie zakończy tych dwóch makeprocesów.
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. lsofpokazuje powłokę, z której bieżącego katalogu korzysta to urządzenie. Możesz chcieć ponownie su jako ten użytkownik, aby zmienić katalog.