Linux: Welcher Prozess verursacht "Gerät beschäftigt", wenn umount ausgeführt wird? [geschlossen]

78

Linux: Welcher Prozess verursacht "Gerät beschäftigt", wenn umount ausgeführt wird?

Flybywire
quelle
Sie müssen weitere Informationen bereitstellen. Es könnte verschiedene Antworten geben ...
AAA
Welche Infos brauchst du? Was sind die möglichen Antworten?
Flybywire
Zurücksetzen der letzten Änderungen. Zunächst einmal ist Shell-Scripting genauso programmierbar wie .net, SQL-Abfragen oder die Entwicklung von iPhones. Zweitens macht das Entfernen der Linux-Bezeichnung die Frage ehrgeizig. BSD, OSX usw. haben eine etwas andere Semantik und Solaris usw. noch mehr.
MarkusQ
nicht vergessen NFS! Sie müssen alle NFS-Export- oder Bereitstellungspunkte auf dem gewünschten Laufwerk stoppen umount. NFS wird NICHT angezeigt lsofoder fuser... also ist es sehr schwierig!
Trevor Boyd Smith

Antworten:

107

Schauen Sie sich den Befehl lsof an (Liste geöffneter Dateien) - er kann Ihnen sagen, welche Prozesse was offen halten. Manchmal ist es schwierig, aber oft etwas so Einfaches, wie sudo lsof | grep (your device name here)es für Sie tun könnte.

MarkusQ
quelle
14
In meinem Fall zeigte das Abrufen des Gerätenamens kein Ergebnis. Das Abrufen des Pfads, in den das Gerät tatsächlich eingebunden wurde, war jedoch erfolgreich. Durch das Beenden dieses Prozesses konnte ich das Gerät schließlich erfolgreich umhängen.
brAzzi64
In meinem Fall hat der Befehl nichts angezeigt. Das Beenden des SSH-Clients und das erneute Anmelden haben dies getan.
Machineaddict
4
Sie waren wahrscheinlich in dieser Richtung, als Sie versuchten, sie abzunehmen.
Bosiwow
4
lsof /mountpointstattlsof /mountpoint/
Songhir
Die Verwendung lsof +f /dev/deviceanstelle des Mountpunkts hat einen Vorteil . Gleiches gilt für Kernelprozesse mit anonymen Inodes, die möglicherweise auch in dieser Liste nicht angezeigt werden.
Tom Hale
43

Nur für den Fall, dass ... manchmal umount vom Terminal aus aufgerufen wird und Ihr aktuelles Verzeichnis zum gemounteten Dateisystem gehört.

Alvatar
quelle
4
Hab mich auch. Sie können dies erkennen, wenn lsof den "Bash" -Prozess (Debian) auflistet
Matthias Bayer
fuserfängt aktuelle Arbeitsverzeichnisse wie dieses ab, glaube ich.
Trevor Boyd Smith
26

Sie sollten den Befehl fuser verwenden .

Z.B. fuser /dev/cdromgibt die PID (s) des Prozesses mit zurück /dev/cdrom.

Wenn Sie versuchen, die Bereitstellung aufzuheben, können Sie diesen Prozess mit dem -kSchalter beenden (siehe man fuser).

Ben
quelle
2
Zu Ihrer Information fuserwird manchmal Dinge zeigen, lsofdie nicht funktionieren und umgekehrt. so kann man nicht nur das eine oder andere machen!
Trevor Boyd Smith
Hat nicht funktioniert, aber du hast mir die Idee gegeben, meinen Mediaplayer zu töten, und das hat funktioniert, also danke für die Idee ;-)
PJ Brunet
18

Suchen Sie mit "losetup -a" nach Geräten mit offener Schleife, die einer Datei im Dateisystem zugeordnet sind. Sie werden weder mit lsof noch mit der Fixiereinheit angezeigt.

Jay
quelle
1
Genau! Ich hatte Loop-Geräte auf ISO-Dateien auf der betreffenden Partition gemountet. Das hat umount -l /datatatsächlich funktioniert - der FS ist verschwunden - aber später abmontiert /dev/loop0und /dev/loop1eine Weile aufgehängt. Aber jetzt scheint alles in Ordnung zu sein. Diese Antwort ist sehr wichtig, weil es die Menschen hilft, die bekannt haben lsofund fuserfür Kinder ab ...
Tomasz Gandor
Das war der Schlüssel für mich. In meinem Fall hat das Docker-Devicemapper-Speicherlaufwerk /dev/loop0 /dev/loop1Loop-Geräte erstellt. Die einzige Möglichkeit, sie loszuwerden, bestand darin, Geräte aufzulisten, indem dmsetup ls ich den verdächtigen Docker Devicemapper Device Docker-253: 0-4291588-Pool fand. dmsetup remove docker-253:0-4291588-poolwurde es sauber los
Robododge
16

Überprüfen Sie auch /etc/exports. Wenn Sie Pfade innerhalb des Mountpunkts über NFS exportieren, wird dieser Fehler beim Versuch, die Bereitstellung aufzuheben, angezeigt, und in fuseroder wird nichts angezeigt lsof.

Malvineous
quelle
In unserem Fall war es unser Problem.
Raulsaeztapia
1
Warum sollte es nicht auftauchen? Liegt das daran, dass sich nfs teilweise im Kernel befindet? (Im Gegensatz dazu, dass es sich vollständig um einen
User-Space handelt
9
lsof +f -- /mountpoint

(wie die Prozesse unter Verwendung von Dateien auf dem Mount aufgelistet, die am / mountpoint gemountet sind. Besonders nützlich, um herauszufinden, welche Prozesse einen gemounteten USB-Stick oder eine CD / DVD verwenden.

mas
quelle
Dies hat mir geholfen, einen Prozess zu finden, dessen aktuelles Arbeitsverzeichnis das AUTOCLEAR eines Loop-Geräte-Mount verhindert hat. Es war nicht in fuseroder Standard aufgeführt lsof.
Tom Hale
Noch besser ist es zu verwenden, /dev/<device>als /mountpointwie /mountpointnach einem verschwinden wird umount -l.
Tom Hale
7

lsof und fuser sind in der Tat zwei Möglichkeiten, um den Prozess zu finden, der eine bestimmte Datei offen hält. Wenn Sie nur möchten, dass umount erfolgreich ist, sollten Sie die Optionen -f und -l untersuchen.

Anonym
quelle
1
Ich hatte dieses Problem kürzlich und weder Fixiereinheit noch lsof zeigten etwas mit dem Gerät an, aber umount -l erlaubte mir, es zu entfernen. Zumindest scheint es so (-l bedeutet Lazy Unmount, Trenne das Dateisystem jetzt von der Dateisystemhierarchie und bereinige alle Verweise auf das Dateisystem, sobald es nicht mehr beschäftigt ist.)
Jeff Welling
5

Genau deshalb gibt es die "Fixiereinheit -m / mount / point".

Übrigens glaube ich nicht, dass "fuser" oder "lsof" anzeigen, wann eine Ressource vom Kernelmodul gehalten wird, obwohl ich dieses Problem normalerweise nicht habe.


quelle
8
Aber genau das ist das Problem, das ich zu haben scheine. Wie debuggt man das?
K3 --- rnc
2

lsof und fuser haben mir auch nichts gegeben.

Nachdem ich alle möglichen Verzeichnisse in .old umbenannt und das System jedes Mal neu gestartet hatte, nachdem ich Änderungen vorgenommen hatte, fand ich ein bestimmtes Verzeichnis (in Bezug auf Postfix), das dafür verantwortlich war.

Es stellte sich heraus, dass ich einmal einen Symlink von / var / spool / postfix zu / disk2 / pers / mail / postfix / varspool erstellt hatte, um das Schreiben von Datenträgern auf einem SDCARD-basierten Root-Dateisystem (Sheeva Plug) zu minimieren.

Mit diesem Symlink konnte ich / disk2 / pers auch nach dem Stoppen der Postfix- und Dovecot-Dienste (sowohl ps aux als auch netstat -tuanp zeigten nichts Verwandtes an) nicht aushängen.

Als ich den Symlink entfernte und die Postfix- und Dovecot-Konfigurationsdateien so aktualisierte, dass sie direkt auf die neuen Verzeichnisse auf / disk2 / pers / verweisen, konnte ich die Dienste erfolgreich stoppen und das Verzeichnis aushängen.

Das nächste Mal werde ich mir die Ausgabe von:

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

Der obige Befehl listet rekursiv alle symbolischen Links in einem Verzeichnisbaum auf (hier beginnend mit / var) und filtert die Namen heraus, die auf einen bestimmten Ziel-Mount-Punkt verweisen (hier disk2).

Captcha
quelle
Ich suche tatsächlich nach symbolischen Links (das ^ l in meinem Befehl). Ihr Befehl ist möglicherweise schneller, hat aber nicht den gleichen Effekt.
Captcha
D'oh ... das liegt daran, dass ich den Befehl getippt habe. Es sollte seinfind /var -lname *disk2*
womble
1

Dateien öffnen

Prozesse mit geöffneten Dateien sind die üblichen Schuldigen. Zeigen Sie sie an:

lsof +f -- <mountpoint or device>

Die Verwendung ist vorteilhafter /dev/<device>als /mountpoint: Ein Mountpunkt verschwindet nach einem umount -loder wird möglicherweise von einem überlagerten Mount ausgeblendet.

fuserkann auch verwendet werden, hat aber meiner Meinung lsofnach eine nützlichere Ausgabe. Dies fuserist jedoch nützlich, wenn es darum geht, die Prozesse zu beenden, die Ihre Dramen verursachen, damit Sie mit Ihrem Leben weitermachen können.

Listen Sie die Dateien auf <mountpoint>(siehe Einschränkung oben):

fuser -vmM <mountpoint>

Beenden Sie interaktiv nur Prozesse mit Dateien, die zum Schreiben geöffnet sind:

fuser -vmMkiw <mountpoint>

Nach dem erneuten Bereitstellen von schreibgeschützt ( mount -o remount,ro <mountpoint>) ist es sicher (r), alle verbleibenden Prozesse abzubrechen:

fuser -vmMk <mountpoint>

Mountpoints

Der Schuldige kann der Kernel selbst sein. Ein anderes Dateisystem, das auf dem Dateisystem installiert ist, das Sie versuchen, umountverursacht Kummer. Überprüfen Sie mit:

mount | grep <mountpoint>/

Überprüfen Sie für Loopback-Halterungen auch die Ausgabe von:

losetup -la

Anonyme Inodes (Linux)

Anonyme Inodes können erstellt werden durch:

  • Temporäre Dateien ( openmit O_TMPFILE)
  • Uhren inotifizieren
  • [eventfd]
  • [eventpoll]
  • [timerfd]

Dies sind die schwer fassbarsten Pokemon-Typen und werden in lsofder TYPESpalte als angezeigt a_inode(was in der lsofManpage nicht dokumentiert ist ).

Sie werden nicht in angezeigt lsof +f -- /dev/<device>, daher müssen Sie:

lsof | grep a_inode

Informationen zum Beenden von Prozessen mit anonymen Inodes finden Sie unter: Liste der aktuellen inotify-Uhren (Pfadname, PID) .

Tom Hale
quelle
1

Wenn Sie Ihr Gerät nach dem Stoppen aller Dienste und Prozesse mit geöffneten Dateien immer noch nicht aushängen oder erneut bereitstellen können, ist möglicherweise eine Auslagerungsdatei oder eine Auslagerungspartition vorhanden, die Ihr Gerät beschäftigt. Dies wird nicht mit fuseroder angezeigt lsof. Deaktivieren Sie den Austausch mit:

sudo swapoff -a

Sie können dies vorher überprüfen und eine Zusammenfassung aller Auslagerungspartitionen oder Auslagerungsdateien anzeigen mit:

swapon -s

oder:

cat /proc/swaps

Alternativ zur Verwendung des Befehls sudo swapoff -akönnen Sie den Swap möglicherweise auch deaktivieren, indem Sie einen Dienst oder eine Systemeinheit stoppen . Zum Beispiel:

sudo systemctl stop dphys-swapfile

oder:

sudo systemctl stop var-swap.swap

In meinem Fall war das Deaktivieren des Austauschs erforderlich, zusätzlich zum Stoppen von Diensten und Prozessen mit zum Schreiben geöffneten Dateien, damit ich meine Root-Partition als schreibgeschützt erneut bereitstellen konnte, um sie fsckohne Neustart auf meiner Root-Partition auszuführen. Dies war auf einem Raspberry Pi mit Raspbian Jessie erforderlich.

Simon Gould
quelle
0

Auf dem Dateisystem, das Sie aushängen möchten, gemountete Dateisysteme können den target is busyFehler zusätzlich zu den verwendeten Dateien verursachen. (Zum Beispiel, wenn Sie mount -o bind /dev /mnt/yourmount/devverwenden möchtenchroot dort möchten.)

Führen Sie die folgenden Schritte aus, um herauszufinden, welche Dateisysteme auf dem Dateisystem bereitgestellt sind:

mount | grep '/mnt/yourmount'

Um herauszufinden, welche Dateien verwendet werden, befolgen Sie die Ratschläge, die bereits von anderen hier vorgeschlagen wurden:

lsof | grep '/mnt/yourmount'

Slobodan Pejic
quelle