Saturday, September 11, 2010

Welcher Prozess blockiert das Laufwerk?

Das Problem ist unter Linux- und UNIX-Benutzern altbekannt: Irgendein Prozess blockiert mal wieder das DVD-Laufwerk, den USB-Stick oder sonst ein Medium, welches man gerade unmounten möchte, und sabotiert den Versuch mit einer Meldung wie umount: /media/cdrom0: device is busy.

Klassischerweise greift man hier zum Befehl fuser:

fuser -m /dev/sr0

beispielsweise sucht Anwendungen, die auf das das CD-ROM-Laufwerk /dev/sr0 zugreifen (-m nicht vergessen, sonst werden nur Anwendungen gefunden, die genau diese Datei geöffnet haben; die Option bewirkt, dass auch der Mountpunkt inklusive allen Unterverzeichnissen überprüft wird). Hier haben wir einen Schuldigen gefunden:

/dev/sr0:             5841

Der Prozeß mit der Nummer 5841 blockiert also unser Laufwerk.

Deutlich komfortabler ist der Befehl lsof:

lsof /dev/sr0

liefert uns standardmäßig gleich ein paar mehr Infos:

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
dosbox  5841 ignaz   14r   REG   11,0 50942045 1371 /media/cdrom0/ressci.001
dosbox  5841 ignaz   16r   REG   11,0 18623497 1368 /media/cdrom0/resource.sfx
dosbox  5841 ignaz   17r   REG   11,0 23470911 1365 /media/cdrom0/resource.aud

Jetzt wissen wir, dass der schuldige Prozess das Programm dosbox ist, ohne erst in der Prozessliste nachschauen zu müssen, und sehen ganz nebenbei auch gleich die fraglichen Dateien, die das Laufwerk blockieren.

Sowohl fuser als auch lsof beziehen ihre Daten aus dem /proc-Dateisystem, wir können hier also auch selbst einen Blick riskieren:

ls -l /proc/5841/fd

zeigt uns die Liste der von DOSBox geöffneten Dateien - hier finden wir auch unsere drei Dateien von eben wieder.

lrwx------ 1 ignaz users 64 2010-09-11 16:38 0 -> /dev/pts/1
lrwx------ 1 ignaz users 64 2010-09-11 16:38 1 -> /dev/pts/1
lrwx------ 1 ignaz users 64 2010-09-11 16:38 10 -> /dev/nvidia1
l-wx------ 1 ignaz users 64 2010-09-11 16:38 11 -> /dev/sequencer
lrwx------ 1 ignaz users 64 2010-09-11 16:38 12 -> /dev/snd/pcmC0D0p
lr-x------ 1 ignaz users 64 2010-09-11 16:38 13 -> /dev/input/event5
lr-x------ 1 ignaz users 64 2010-09-11 16:38 14 -> /media/cdrom0/ressci.001
lr-x------ 1 ignaz users 64 2010-09-11 16:38 15 -> /home/ignaz/c/SIERRA/GK2DOS/RESSCI.PAT
lr-x------ 1 ignaz users 64 2010-09-11 16:38 16 -> /media/cdrom0/resource.sfx
lr-x------ 1 ignaz users 64 2010-09-11 16:38 17 -> /media/cdrom0/resource.aud
lrwx------ 1 ignaz users 64 2010-09-11 16:38 2 -> /dev/pts/1
lrwx------ 1 ignaz users 64 2010-09-11 16:38 3 -> socket:[45729]
lrwx------ 1 ignaz users 64 2010-09-11 16:38 4 -> socket:[45731]
lrwx------ 1 ignaz users 64 2010-09-11 16:38 5 -> /dev/nvidiactl
lrwx------ 1 ignaz users 64 2010-09-11 16:38 6 -> /dev/nvidia1
lrwx------ 1 ignaz users 64 2010-09-11 16:38 7 -> /dev/nvidia1
lrwx------ 1 ignaz users 64 2010-09-11 16:38 8 -> /dev/nvidia0
lrwx------ 1 ignaz users 64 2010-09-11 16:38 9 -> /dev/nvidia1