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.
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.
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.
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.
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.
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.
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.
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).
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:
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.
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:
NFS
! Sie müssen alle NFS-Export- oder Bereitstellungspunkte auf dem gewünschten Laufwerk stoppenumount
. NFS wird NICHT angezeigtlsof
oderfuser
... also ist es sehr schwierig!Antworten:
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.quelle
lsof /mountpoint
stattlsof /mountpoint/
lsof +f /dev/device
anstelle des Mountpunkts hat einen Vorteil . Gleiches gilt für Kernelprozesse mit anonymen Inodes, die möglicherweise auch in dieser Liste nicht angezeigt werden.Nur für den Fall, dass ... manchmal umount vom Terminal aus aufgerufen wird und Ihr aktuelles Verzeichnis zum gemounteten Dateisystem gehört.
quelle
fuser
fängt aktuelle Arbeitsverzeichnisse wie dieses ab, glaube ich.Sie sollten den Befehl fuser verwenden .
Z.B.
fuser /dev/cdrom
gibt die PID (s) des Prozesses mit zurück/dev/cdrom
.Wenn Sie versuchen, die Bereitstellung aufzuheben, können Sie diesen Prozess mit dem
-k
Schalter beenden (sieheman fuser
).quelle
fuser
wird manchmal Dinge zeigen,lsof
die nicht funktionieren und umgekehrt. so kann man nicht nur das eine oder andere machen!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.
quelle
umount -l /data
tatsächlich funktioniert - der FS ist verschwunden - aber später abmontiert/dev/loop0
und/dev/loop1
eine Weile aufgehängt. Aber jetzt scheint alles in Ordnung zu sein. Diese Antwort ist sehr wichtig, weil es die Menschen hilft, die bekannt habenlsof
undfuser
für Kinder ab .../dev/loop0 /dev/loop1
Loop-Geräte erstellt. Die einzige Möglichkeit, sie loszuwerden, bestand darin, Geräte aufzulisten, indemdmsetup ls
ich den verdächtigen Docker Devicemapper Device Docker-253: 0-4291588-Pool fand.dmsetup remove docker-253:0-4291588-pool
wurde es sauber losÜ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 infuser
oder wird nichts angezeigtlsof
.quelle
(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.
quelle
fuser
oder Standard aufgeführtlsof
./dev/<device>
als/mountpoint
wie/mountpoint
nach einem verschwinden wirdumount -l
.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.
quelle
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
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:
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).
quelle
find /var -lname *disk2*
Dateien öffnen
Prozesse mit geöffneten Dateien sind die üblichen Schuldigen. Zeigen Sie sie an:
Die Verwendung ist vorteilhafter
/dev/<device>
als/mountpoint
: Ein Mountpunkt verschwindet nach einemumount -l
oder wird möglicherweise von einem überlagerten Mount ausgeblendet.fuser
kann auch verwendet werden, hat aber meiner Meinunglsof
nach eine nützlichere Ausgabe. Diesfuser
ist 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):Beenden Sie interaktiv nur Prozesse mit Dateien, die zum Schreiben geöffnet sind:
Nach dem erneuten Bereitstellen von schreibgeschützt (
mount -o remount,ro <mountpoint>
) ist es sicher (r), alle verbleibenden Prozesse abzubrechen:Mountpoints
Der Schuldige kann der Kernel selbst sein. Ein anderes Dateisystem, das auf dem Dateisystem installiert ist, das Sie versuchen,
umount
verursacht Kummer. Überprüfen Sie mit:Überprüfen Sie für Loopback-Halterungen auch die Ausgabe von:
Anonyme Inodes (Linux)
Anonyme Inodes können erstellt werden durch:
open
mitO_TMPFILE
)Dies sind die schwer fassbarsten Pokemon-Typen und werden in
lsof
derTYPE
Spalte als angezeigta_inode
(was in derlsof
Manpage nicht dokumentiert ist ).Sie werden nicht in angezeigt
lsof +f -- /dev/<device>
, daher müssen Sie:Informationen zum Beenden von Prozessen mit anonymen Inodes finden Sie unter: Liste der aktuellen inotify-Uhren (Pfadname, PID) .
quelle
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
fuser
oder angezeigtlsof
. Deaktivieren Sie den Austausch mit:Sie können dies vorher überprüfen und eine Zusammenfassung aller Auslagerungspartitionen oder Auslagerungsdateien anzeigen mit:
oder:
Alternativ zur Verwendung des Befehls
sudo swapoff -a
können Sie den Swap möglicherweise auch deaktivieren, indem Sie einen Dienst oder eine Systemeinheit stoppen . Zum Beispiel:oder:
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
fsck
ohne Neustart auf meiner Root-Partition auszuführen. Dies war auf einem Raspberry Pi mit Raspbian Jessie erforderlich.quelle
Auf dem Dateisystem, das Sie aushängen möchten, gemountete Dateisysteme können den
target is busy
Fehler zusätzlich zu den verwendeten Dateien verursachen. (Zum Beispiel, wenn Siemount -o bind /dev /mnt/yourmount/dev
verwenden 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'
quelle