Beim Laufen umount /path
bekomme ich:
umount: /path: device is busy.
Das Dateisystem ist riesig und daher lsof +D /path
keine realistische Option.
lsof /path
, lsof +f -- /path
und fuser /path
alle geben nichts zurück. fuser -v /path
gibt:
USER PID ACCESS COMMAND
/path: root kernel mount /path
Das ist normal für alle unbenutzten gemounteten Dateisysteme.
umount -l
und umount -f
ist nicht gut genug für meine situation.
Wie finde ich heraus, warum der Kernel meint, dass dieses Dateisystem ausgelastet ist?
fuser -vm /path
...--force
wird härter versuchen zu auszuhängen und-v
oder-vvv
noch mehr wird reaveal , was das Problem mit dem Berg ist. Also versuchen Sie:umount -vvv --force /babdmount
Antworten:
Es scheint, dass der Grund für mein Problem darin
nfs-kernel-server
bestand, dass das Verzeichnis exportiert wurde. Dasnfs-kernel-server
geht wohl hinter die normal geöffneten Dateien und wird somit nicht vonlsof
und aufgelistetfuser
.Als ich das stoppte
nfs-kernel-server
konnte ichumount
das Telefonbuch.Ich habe hier eine Seite mit Beispielen für alle Lösungen erstellt: http://oletange.blogspot.com/2012/04/umount-device-is-busy-why.html
quelle
sudo service samba stop
zuerst Ihre Antwort wirklich aushelfen!sudo service nfs stop
Sie in RHEL6 / CentOS6 und müssen Sie möglicherweise (nicht) auch tun,sudo exportfs -u
um das Exportieren rückgängig zu machen. Denken Sie daran, dannsudo exportfs -r
undsudo service nfs start
wieder auszuführen und den Dienst neu starten.exportfs -u
das betreffende Verzeichnis.Hinzufügen zu BruceCran ‚s Kommentar war oben, die Ursache für meine Manifestation dieses Problems gerade jetzt eine veraltete Loopback montieren. Ich würde überprüft bereits die Ausgabe von
fuser -vm <mountpoint>
/lsof +D <mountpoint>
,mount
undcat /proc/mounts
, überprüft , ob ein alter nfs-kernel-server ausgeführt wurde, ausgeschaltet Quoten, versucht (aber nicht) einumount -f <mountpoint>
und alle , aber fand mich 924 Tage uptime , bevor sie schließlich zum Verzicht auf die Ausgangsprüfung vonlosetup
und Auffinden von zwei veralteten, konfigurierten, aber nicht gemounteten Loopbacks:dann
Ein Gentoo- Forumbeitrag listet auch Swap-Dateien als möglichen Schuldigen auf. Obwohl das Austauschen von Dateien heutzutage sehr selten ist, kann es nicht schaden, die Ausgabe von zu überprüfen
cat /proc/swaps
. Ich bin mir nicht sicher, ob Quoten jemals ein Absteigen verhindern könnten - ich habe mich an Strohhalme geklammert.quelle
Anstatt lsof zum Durchsuchen des Dateisystems zu verwenden, verwenden Sie einfach die Gesamtliste der geöffneten Dateien und suchen Sie danach. Ich finde, das muss schneller gehen, obwohl es weniger genau ist. Es sollte die Arbeit erledigen.
quelle
lsof /path
, sagte ichlsof | grep '/path'
. Der Unterschied ist, dass lsof ohne Argumente alle offenen Dateien mit einer Art Cache-Tabelle anzeigt und grep sehr schnell darin sucht. Die Dinge, die Sie mit lsof versucht haben, lassen es das Dateisystem durchsuchen, was sehr lange dauert.lsof /path
schaut nur auf den Weg. Es wird nicht jede einzelne Datei angezeigt. Es ist oft viel schneller alslsof | grep /path
(in meinem unwissenschaftlichen Test war es YMMV 20-mal schneller), da es nicht alle geöffneten Dateien, sondern nur die Dateien für diesen Pfad betrachtet.lsof /path
ergab sich nichts, währendlsof | grep /path
mir der Prozess gezeigt hat, der geöffnete Dateien zurückhielt und mich daran hinderte, den Mount des Volumes aufzuheben.Für mich war der beleidigende Prozess ein Daemon, der in einer Chroot läuft. Weil es in einer Chroot war
lsof
undfuser
es nicht finden würde.Wenn Sie den Verdacht haben, dass noch etwas in einer Chroot läuft,
sudo ls -l /proc/*/root | grep chroot
werden Sie den Täter finden (ersetzen Sie "Chroot" durch den Pfad zur Chroot).quelle
sudo ls -l /proc/*/status | grep HOST
lsof /mountpoint
undfuser /mountpoint
beiden finden einen Prozess, auch wenn chrooted.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
Damit die Fixiereinheit über die PIDs berichtet, die einen Mount offenhalten, müssen Sie -m verwenden
quelle
lsof /path
Richtig , aber irrelevant: Bietet die gleiche Liste von PIDs wiefuser -m /path
.fuser -M /path
prüft, ob/path
es sich um einen Mountpoint handelt.Wir haben ein proprietäres System, bei dem das Root-Dateisystem normalerweise schreibgeschützt ist. Gelegentlich, wenn Dateien kopiert werden müssen, wird der Schreib- / Lesezugriff erneut aktiviert:
Und dann wieder montiert:
Diesmal gab es jedoch
mount
immer wieder denmount: / is busy
Fehler. Es wurde von einem Prozess verursacht einen offenen Descriptor in eine Datei hält , das war ersetzt durch einen Befehl, der ausgeführt wurde , wenn das Dateisystem read-write wurde. Die wichtige Zeile aus derlsof -- /
Ausgabe ist (Namen wurden geändert):Beachten Sie die
DEL
in der Ausgabe. Durch einen einfachen Neustart des Prozesses, bei dem die gelöschte Datei beibehalten wurde, wurde das Problem behoben.quelle
lsof
undfuser
hat 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
bis erstellt/disk2/pers/mail/postfix/varspool
hatte, um die Anzahl der Schreibvorgänge auf einem SDCARD-basierten Root-Dateisystem (Sheeva Plug) zu minimieren.Mit diesem Symlink auch nach dem Anhalten
postfix
unddovecot
Dienstleistungen (sowohlps aux
als auchnetstat -tuanp
zeigte nichts verwandten) Ich war nicht in der Lageunmount /disk2/pers
.Als ich den Symlink entfernte und die Dateien
postfix
unddovecot
config aktualisierte , um direkt auf die neuen Verzeichnisse zu verweisen,/disk2/pers/
konnte ich die Dienste undunmount
das Verzeichnis erfolgreich stoppen .Nächstes 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
Ich hatte dieses Problem und es stellte sich heraus, dass es im Hintergrund aktive Bildschirmsitzungen gab, von denen ich nichts wusste. Ich habe eine Verbindung zu der anderen aktiven Bildschirmsitzung hergestellt, und die Shell befand sich noch nicht einmal im bereitgestellten Verzeichnis. Das Beenden dieser anderen Shell-Sitzungen hat das Problem für mich behoben.
Ich dachte nur, ich würde meine Entschlossenheit teilen.
quelle
Heute war das Problem eine offene Steckdose (speziell
tmux
):quelle
Ich habe ein paar
bind
undoverlay
Halterungen unter meiner Halterung , die mich versperrten, überprüfen Sie die Tab - Vervollständigung für den Mount-Punkt , den Sie aushängen wollen. Ich vermute, es war vor allem das Overlay-Mount, könnte aber auch das Binding gewesen seinquelle
Dies ist eher ein Workaround als eine Antwort, aber ich poste es, falls es jemandem helfen könnte.
In meinem Fall habe ich versucht, die LVM zu ändern, da ich die / var-Partition vergrößern wollte, also musste ich sie ummounten. Ich habe alle in diesem Beitrag kommentierten und beantworteten Fragen beantwortet (danke an alle und vor allem an @ ole-tange für das Sammeln) und trotzdem den Fehler "Gerät ist beschäftigt" erhalten.
Ich habe versucht, die meisten Prozesse in der im Runlevel 0 angegebenen Reihenfolge zu beenden, nur für den Fall, dass die Reihenfolge in meinem Fall relevant war, aber das hat auch nicht geholfen. Ich habe mir also ein benutzerdefiniertes Runlevel erstellt (das die Ausgabe von chkconfig in neue chkconfig --level-Befehle kombiniert), das 1 (Einzelbenutzermodus) sehr ähnlich ist, aber über Netzwerkfunktionen (mit ssh network und xinet) verfügt.
Da ich RedHat verwendet habe, ist Runlevel 4 als "unbenutzt / benutzerdefiniert" markiert, daher habe ich dieses verwendet und ausgeführt.
init 4
In meinem Fall war dies in Ordnung, da ich den Server in jedem Fall neu starten musste , aber wahrscheinlich wird dies der Fall sein von jemandem, der die Scheiben zwickt.quelle