Ich habe oft ein Problem beim Ummounten eines Verzeichnisses:
umount / mnt / dir umount: / mnt / dir: Gerät ist beschäftigt
Es gibt viele Gründe, warum das Gerät ausgelastet ist. Manchmal laufen Prozesse mit offenen Sperren, manchmal sind andere Verzeichnisse darüber angehängt /mnt/dir
.
Meine Frage:
Was sind die Schritte, um zu überprüfen, warum ein Verzeichnis nicht abgehängt werden konnte.
Ich weiß, dass es viele Gründe gibt, aber es ist in Ordnung, wenn Sie eine bestimmte Lösung erläutern.
[BEARBEITEN]
[X] Ausführen von Prozessen auf bereitgestellten Volumes.
[X] Ein anderes Volume wird über einem Volume bereitgestellt, dessen Bereitstellung aufgehoben werden soll.
[_] NFS sperrt das Volume, dessen Bereitstellung aufgehoben werden soll
Antworten:
Der Weg zu überprüfen ist
fuser -vm /mnt/dir
, welche als root ausgeführt werden muss. Hier erfahren Sie, welche Prozesse auf den Mount-Punkt zugreifen.Eine Alternative ist
lsof /mnt/dir
, die jede geöffnete Datei auf dem Mount anzeigt. Wieder am besten als root ausführen.Sie können einen dieser Prozesse als Nicht-Root ausführen, die Ausgabe ist jedoch auf Ihre Prozesse beschränkt. Die Prozesse anderer Benutzer werden nur stillschweigend nicht angezeigt, obwohl sie das Aufheben der Bereitstellung des Dateisystems verhindern.
Beispiel:
Das Feld "Zugriff" informiert Sie darüber, wie darauf zugegriffen wird. In diesem Fall wird der Kernel als Mount verwendet.
bash
hat es als aktuelles Arbeitsverzeichnis (musscd
vor dem Unmounten in ein anderes Verzeichnis) und gvim hat sowohl das aktuelle Verzeichnis als auch eine geöffnete Datei (muss dieses gvim schließen).In dieser Ausgabe sehen Sie die aktuellen Verzeichnisse für bash und gvim (als Typ
DIR
). Sie können auch sehen, welche Datei gvim zum Schreiben geöffnet hat.So erzwingen Sie das Problem:
fuser
hat eine-k
Option, die ein Signal (Standard:)SIGKILL
an jeden Prozess sendet , der den Mount verwendet. Dies ist eine ziemlich gewaltsame Methode, um zu verhindern, dass das Reittier beschäftigt ist. (Und natürlich pass auf was du willstSIGKILL
!)umount
hat die-l
Option, ein Lazy Unmount durchzuführen. Der Mount wird aus dem Dateisystem-Namespace entfernt (daher wird er/mnt/Zia/src
im Beispiel nicht mehr angezeigt), bleibt jedoch gemountet, sodass Programme, die darauf zugreifen, dies weiterhin tun können. Wenn das letzte Programm, das darauf zugreift, beendet wird, wird die Bereitstellung tatsächlich aufgehoben.Es gibt eine letzte Ursache, die behoben werden kann, wenn das Aufheben der Bereitstellung fehlschlägt. Dies ist ein NFS-Server, der ausfällt. Hier können Sie verwenden
umount -f
, aber Sie riskieren Datenverlust, wenn Sie dies tun. (Der Client hat möglicherweise Schreibvorgänge zwischengespeichert, die vom Server noch nicht bestätigt wurden, und diese werden verworfen. Apps wurde jedoch bereits mitgeteilt, dass der Schreibvorgang erfolgreich war.)quelle
fuser -k
ist extrem riskant, wie Sie es als root tun würden , und wenn Sie nicht sind sehr sicher , von denen Prozesse werden getötet off Sie wirklich spektakulären Schaden mit einem sorglosen Befehl tun können ...-k
Option ausgeführt, sodass Sie wissen, welche Prozesse Sie beenden werden . Aber ich werde eine Warnung hinzufügen.fuser -vm
zeigte "Kernel Mount". musste mansystemctl stop opt.mount
statt manuell machenumount
.umount -f
und NFS. Mein Problem bestand im Zusammenhang mit NFS, bei dem die IP-Adressen meiner Entwickler geändert wurden und ich die Freigabe nicht entfernen konnte.Du solltest benutzen:
quelle
-l
ist genau die Option, die verwendet werden kann, wenn-f
nicht einmal funktioniert.Ein anderes Volume wird über einem Volume bereitgestellt, dessen Bereitstellung aufgehoben werden soll:
Mit dem
mount
Befehl können Sie alle bereitgestellten Volumes kennen, wenn Sie ohne Argumente oder Optionen abgerufen werden (außer-v
). Sie können eine Liste der aktiven Mountpunkte erstellen, indem Sie etwas Perl hinzufügen:Greifen Sie dann einfach über den Punkt, von dem aus Sie die Bereitstellung aufheben möchten, und Sie werden wissen, ob über diesen Punkt Dateisysteme bereitgestellt sind.
Dann haben Sie zwei Lösungen . Entweder die Dateisysteme aushängen oder mit
mount --move olddir newdir
(Kernel> 2.5.1) verschiebenquelle
Dateien öffnen
Prozesse mit offenen Dateien sind die üblichen Schuldigen. Zeigen Sie sie an:
Die Verwendung von
/dev/<device>
anstelle von hat den Vorteil, dass/mountpoint
ein Mountpunkt nach einem verschwindetumount -l
oder von einem überlagerten Mount ausgeblendet wird.fuser
kann auch verwendet werden, aber meiner Meinung nachlsof
hat eine nützlichere Ausgabe. Diesfuser
ist jedoch hilfreich, wenn es darum geht, die Prozesse zu beenden, die Ihre Dramen verursachen, damit Sie mit Ihrem Leben weitermachen können.Dateien
<mountpoint>
auflisten (siehe Warnung oben):Beenden Sie interaktiv nur Prozesse mit Dateien, die zum Schreiben geöffnet sind:
Nach dem erneuten Einhängen von read-only (
mount -o remount,ro <mountpoint>
) ist es sicher (r), alle verbleibenden Prozesse abzubrechen:Mountpoints
Der Täter kann der Kernel selbst sein. Ein anderes Dateisystem, das auf dem Dateisystem gemountet ist, das Sie versuchen,
umount
verursacht Trauer. Erkundigen Sie sich bei:Überprüfen Sie bei Loopback-Mounts auch die Ausgabe von:
Anonyme Inodes (Linux)
Anonyme Inodes können erstellt werden durch:
open
mitO_TMPFILE
)Dies sind die am schwersten fassbaren Arten von Pokémon. Sie werden in
lsof
derTYPE
Spalte alsa_inode
(undokumentiert in derlsof
Manpage ) angezeigt .Sie werden nicht in angezeigt
lsof +f -- /dev/<device>
, daher müssen Sie:Informationen zum Beenden von Prozessen mit anonymen Inodes finden Sie unter: Auflisten der aktuellen Inotify-Überwachungen (Pfadname, PID) .
quelle
Die Frage, wie überprüft werden kann, ob NFS auf ein Verzeichnis zugreift, dessen Bereitstellung aufgehoben werden soll, ist noch nicht beantwortet.
Was ich habe, ist nur das:
Überprüfen Sie, ob nfsd ausgeführt wird:
Bereitgestellte Verzeichnisse nach Clients anzeigen:
und ohne
showmount
Argumente werden nur Client-Hosts angezeigt, auch wenn sie offline sind. Ich gehe davon aus, dass dies ein spezielles Verhalten von NFS ist.quelle
Für mich bestand das Problem darin, dass ich mehrmals (über ssh) angemeldet war und mich bei einer der Anmeldungen an der Eingabeaufforderung befand, in der sich die pwd in einem Ordner befand, der dem Mount-Punkt untergeordnet war.
quelle