Linux: Welcher Prozess verursacht „Gerät beschäftigt“, wenn dabei umount? [geschlossen]

StackOverflow https://stackoverflow.com/questions/624154

Frage

Linux: Welcher Prozess verursacht "device busy", wenn umount tut

War es hilfreich?

Lösung

Sehen Sie sich die lsof Befehl (Liste geöffneten Dateien) - es kann Ihnen sagen, welche Prozesse halten, was offen ist. Manchmal schwierig es ist aber oft etwas so einfaches wie sudo lsof | grep (your device name here) es für Sie tun können.

Andere Tipps

Nur für den Fall ... passiert manchmal, dass Sie umount vom Terminal anrufen, und Ihr aktuelles Verzeichnis gehört zum hängten Dateisystem.

Sie sollten verwenden die Fixierer Befehl.

Eg. fuser /dev/cdrom kehrt die pid (e) des Verfahrens mit /dev/cdrom.

Wenn Sie aushängen versuchen, können Sie töten Thesen Prozess den -k Schalter (siehe man fuser).

Überprüfen

für Open-Loop-Geräte abgebildet in einer Datei auf dem Dateisystem mit „losetup -a“. Sie würde nicht mit entweder lsof oder Fixiereinheit angezeigt.

Überprüfen Sie auch /etc/exports. Wenn Sie Pfade innerhalb des einhängepunkt via NFS exportieren, wird es diesen Fehler geben, wenn sie versuchen zu auszuhängen und nichts wird in fuser oder lsof angezeigt.

lsof +f -- /mountpoint

(als listet die Prozesse Dateien auf dem Berg mit unter / einhängepunkt. Besonders nützlich für die Feststellung (s) Verfahren sind ein bereitgestelltes USB-Stick oder CD / DVD verwendet wird.

lsof und Fixierer sind in der Tat zwei Möglichkeiten, um den Prozess zu finden, die eine bestimmte Datei geöffnet hält. Wenn Sie nur umount erfolgreich sein wollen, sollten Sie seine -f und -l Optionen untersuchen.

Das ist genau, warum der "Fixiereinheit -m / mount / point" vorhanden ist.

übrigens, ich glaube nicht, „Fixiereinheit“ oder „lsof“ zeigt an, wann eine Ressource, die von Kernelmodul gehalten wird, obwohl ich in der Regel nicht über diese Frage hat ..

lsof und Fixierer hat mir auch nichts.

Nach einem Prozess alle möglichen Verzeichnisse umbenennen das System jedes Mal in .old und einen Neustart, nachdem ich Änderungen vorgenommen fand ich ein bestimmtes Verzeichnis (in Bezug auf Postfix), der dafür verantwortlich war.

Es stellte sich heraus, dass ich einmal hatte einen symbolischen Link von / var / spool / postfix gemacht / disk2 / pers / mail / postfix / varspool um Datenträger zu minimieren, schreibt auf einem SDCARD-basierten Root-Dateisystem (Sheevaplug).

Mit diesem Symlink auch nach dem Postfix und Dovecot Beenden von Diensten (sowohl ps aux sowie netstat -tuanp nichts zeigte verwandt) ich nicht in der Lage war zu aushängen / disk2 / Pers.

Wenn ich den Symlink entfernt und die Postfix und Dovecot Konfigurationsdateien aktualisiert, um direkt auf die neuen Verzeichnisse auf / disk2 / Pers Punkt / I konnte erfolgreich die Dienste beenden und das Verzeichnis aushängen.

Das nächste Mal werde ich genauer ansehen am Ausgang:

ls -lR /var | grep ^l | grep disk2

Der obige Befehl wird rekursiv alle symbolischen Links in einem Verzeichnisbaum Liste (hier unter / var Start) und die Namen herauszufiltern, die Mount-Punkt zu einem bestimmten Zielpunkt (hier disk2).

Öffnen von Dateien

Prozesse mit offenen Dateien sind die üblichen Verdächtigen. Zeigen Sie ihnen:

lsof +f -- <mountpoint or device>

Es ist ein Vorteil der Verwendung von /dev/<device> anstatt /mountpoint: a. Einhängepunkt verschwindet nach einer umount -l, oder es kann durch einen überlagerten Berg versteckt werden

fuser kann auch verwendet werden, aber meiner Meinung nach lsof hat eine Nutzleistung. Jedoch fuser nützlich ist, wenn es um die Prozesse zu töten verursacht Ihre Dramen kommt, so dass Sie mit Ihrem Leben auf kann.

Liste Dateien auf <mountpoint> (siehe Vorbehalt oben):

fuser -vmM <mountpoint>

interaktiv töten verarbeitet nur mit Dateien zum Schreiben geöffnet:

fuser -vmMkiw <mountpoint>

read-only Nach Remontage (mount -o remount,ro <mountpoint>), ist es sicher (r), um alle verbleibenden Prozesse zu töten:

fuser -vmMk <mountpoint>

Mountpoints

Der Täter kann die Kernel selbst. Ein weiteres Dateisystem auf dem Dateisystem gemountet Sie versuchen, Trauer umount verursachen. Wenden Sie sich an:

mount | grep <mountpoint>/

Für Loopback-Mounts, überprüfen Sie auch die Ausgabe von:

losetup -la

Anonymous Inodes (Linux)

Anonymous Inodes erstellt werden können:

  • Temporäre Dateien (open mit O_TMPFILE)
  • inotify Uhren
  • [eventfd]
  • [eventpoll]
  • [timerfd]

Dies sind die am schwersten Art von pokemon und erscheinen in lsof der TYPE Spalte als a_inode (die in der lsof Manpage ).

Sie werden nicht in lsof +f -- /dev/<device> erscheinen, so dass Sie brauchen werden:

lsof | grep a_inode

Für Prozesse halten anonym Inodes Tötung finden Sie unter: Liste aktuellen inotify Uhren (Pfadname, PID)

Wenn Sie immer noch nicht Ihr Gerät aushängen oder mounten, nachdem Sie alle Dienste und Prozesse mit offenen Dateien zu stoppen, dann kann es zu einer Auslagerungsdatei oder Swap-Partition dem Gerät beschäftigt zu halten sein. Dies wird zeigen, nicht mit fuser oder lsof auf. Schalten Sie tauschen mit:

sudo swapoff -a

Sie können im Voraus überprüfen und eine Zusammenfassung aller Swap-Partitionen oder Auslagerungsdateien mit zeigen:

swapon -s

oder:

cat /proc/swaps

Als Alternative des Befehl sudo swapoff -a zu verwenden, können Sie auch in der Lage sein, den Swap zu deaktivieren, indem Sie einen Dienst stoppen oder systemd Einheit. Zum Beispiel:

sudo systemctl stop dphys-swapfile

oder:

sudo systemctl stop var-swap.swap

In meinem Fall Swap ausgeschaltet war notwendig, zusätzlich zu stoppen alle Dienste und Prozesse mit offenen Dateien für das Schreiben, so dass ich meine Root-Partition mounten könnte als nur lesen, um fsck auf meiner Root-Partition zu laufen ohne Neustart. Dies war notwendig, auf einem Raspberry Pi läuft Raspbian Jessie.

Dateisysteme auf dem Dateisystem gemountet Sie versuchen, die target is busy Fehler zusätzlich zu allen Dateien aushängen kann dazu führen, die in Gebrauch sind. (Zum Beispiel, wenn Sie mount -o bind /dev /mnt/yourmount/dev, um dort chroot zu verwenden.)

Um die Dateisysteme montiert auf dem Dateisystem die folgenden zu finden:

mount | grep '/mnt/yourmount'

Um von anderen, welche Dateien in Gebrauch der Rat bereits vorgeschlagen, finden Sie hier:

lsof | grep '/mnt/yourmount'

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top