Ein Prozess blockiert das Aushängen eines Datenträger (I) – lsof

Viele kennen das Problem, gerade bei USB-Speichergeräten, dass ein Programm oder Prozess das Aushängen eines Datenträgers verhindert denn nur ein Gerät was nicht in Benutzung ist kann auch ausgehängt werden. Dabei ist egal ob ein Dokument oder Datei offen ist oder ob man wie im anschließenden Fall nur das Verzeichnis in das es eingehängt wurde offen hat:

# umount /dev/sdb
umount: /media/max/4335-1CEA: target is busy.

Wie ermittelt man nun den Übeltäter? Dabei können wir umständlich alle offenen Programme durchgehen oder als elegantere Variante den Befehl lsof nutzten. Wie bei allen ls-Befehlen wie lsusb, lspci oder ls steht „ls“ für list und das of steht für „open file“.

Der einfachste Aufruf wäre lsof <Gerätedatei>:

# lsof /dev/sdb
lsof: WARNING: can't stat() fuse.portal file system /run/user/1000/doc
Output information may be incomplete.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 2157 max cwd DIR 8,16 16384 1 /media/max/4335-1CEA
bash 13159 root cwd DIR 8,16 16384 1 /media/max/4335-1CEA
lsof 14979 root cwd DIR 8,16 16384 1 /media/max/4335-1CEA
lsof 14980 root cwd DIR 8,16 16384 1 /media/max/4335-1CEA

Hier wurde von dem Benutzer max ein USB-Stick unter KDE unter den Pfad  /media/max/4335-1CEA eingehängt und der lsof-Befehl von root aufgerufen.  Wie man sieht hat Benutzer max den Mountpoint in der Shell bash offen. Man kann auch statt der Gerätedatei den Mountpoint angeben. Das wäre für den obigen Fall:

# lsof /media/max/4335-1CEA/
lsof: WARNING: can't stat() fuse.portal file system /run/user/1000/doc
Output information may be incomplete.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 2157 max cwd DIR 8,16 16384 1 /media/max/4335-1CEA
bash 13159 root cwd DIR 8,16 16384 1 /media/max/4335-1CEA
lsof 15746 root cwd DIR 8,16 16384 1 /media/max/4335-1CEA
lsof 15747 root cwd DIR 8,16 16384 1 /media/max/4335-1CEA

Wie man sieht ist das Resultat identisch. Da lsof ein sehr vielseitiger Befehl ist, dank dem *NIX-Motte alles ist ein file,besitzt der Befehl etliche Optionen von denen wir in diesem Zusammenhang nur wenige brauchen werden. Für den Fall, dass man keinen korrekten Mountpoint angegeben hat gibt es die Option +f die überprüft ob es sich bei dem angegebenen Pfad um ein Wurzelverzeichnis eines Datenträgers (=Mountpoint) handelt. Anderenfalls wird der Befehl mit entsprechder Fehlermeldungen abgebrochen.

pwd
/media/max
# lsof +f -- /media/max/
lsof: WARNING: can't stat() fuse.portal file system /run/user/1000/doc
Output information may be incomplete.
lsof: not a file system: /media/max/
lsof 4.93.2
latest revision: https://github.com/lsof-org/lsof
latest FAQ: https://github.com/lsof-org/lsof/blob/master/00FAQ
latest (non-formatted) man page: https://github.com/lsof-org/lsof/blob/master/Lsof.8
usage: [-?abhKlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-E] [+|-e s] [+|-f[gG]]
[-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]] [-p s]
[+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
Use the ``-h'' option to get more help information.

Das — verhindert das der angegebene Pfad nicht als Parameter interpretiert wird. Die vollständige Ausgabe von lsof +f — /media/max/4335-1CEA/ lautet nun:

# pwd
/media/max/4335-1CEA
# lsof +f -- /media/max/4335-1CEA/
lsof: WARNING: can't stat() fuse.portal file system /run/user/1000/doc
Output information may be incomplete.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 2157 max cwd DIR 8,16 16384 1 /media/max/4335-1CEA
bash 13159 root cwd DIR 8,16 16384 1 /media/max/4335-1CEA
lsof 20355 root cwd DIR 8,16 16384 1 /media/max/4335-1CEA
lsof 20356 root cwd DIR 8,16 16384 1 /media/max/4335-1CEA

Nun sehen wir mit Shellmitteln den Übeltäter der das Aushängen verhindert. Aber wie beendet man den Prozess? Weiter gehts im zweiten Teil.

1 Gedanke zu „Ein Prozess blockiert das Aushängen eines Datenträger (I) – lsof“

Kommentare sind geschlossen.

kais-universum.de