Linux: Welcher Prozess verursacht „Gerät beschäftigt“, wenn dabei umount? [geschlossen]
Frage
Linux: Welcher Prozess verursacht "device busy", wenn umount tut
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
).
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
mitO_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'