Ich habe einige Samba-Laufwerke, auf die täglich mehrere Benutzer zugreifen. Ich habe bereits Code, um freigegebene Laufwerke (aus einer SQL-Tabelle) zu erkennen und in einem speziellen Verzeichnis bereitzustellen, auf das alle Benutzer zugreifen können.
Ich möchte wissen, ob oder ob es eine Möglichkeit gibt, ein ausgelastetes Gerät zu entfernen, wenn ich ein Laufwerk aus meiner SQL-Tabelle entferne (und es effektiv offline schalte). Bisher habe ich festgestellt, dass jede Form von umount
nicht funktioniert.
Ignorieren Sie die Möglichkeit, Daten zu zerstören. Ist es möglich, ein Gerät zu entfernen, das gerade gelesen wird?
cd
dir gemountet, dann bist du root geworden oder hast dich wieder angemeldet, dann ist die andere Shell gefangen. Tun Sieexit
auf allen Muscheln.Antworten:
JA!! Es gibt eine Möglichkeit, ein ausgelastetes Gerät sofort zu trennen (auch wenn es ausgelastet ist und nicht mit Gewalt abmontiert werden kann). Sie können alle später bereinigen:
HINWEIS:
quelle
-l
Hier ist ein KleinbuchstabeL
(für "Lazy Unmounting"). (Siehe diese verwandte Antwort .)-l
Ich--lazy
werde offene Dateien nicht beschädigen, aber unter Linux kann man anscheinend nicht wissen, wann das Gerät tatsächlich nicht gemountet ist und entfernt werden kannWenn möglich, suchen / identifizieren wir den ausgelasteten Prozess, beenden den Prozess und entfernen dann die Samba-Freigabe, um den Schaden zu minimieren.
lsof | grep '<mountpoint of /dev/sda1>'
(oder was auch immer das montierte Gerät ist)pkill target_process
(tötet beschäftigte Prozesse mit Namen |kill PID
|killall target_process
)umount /dev/sda1
(oder was auch immer das montierte Gerät ist)quelle
lsof
# opkg install lsof
Stellen Sie sicher, dass Sie sich noch nicht im gemounteten Gerät befinden, wenn Sie versuchen, die Verbindung herzustellen.
quelle
umount
.Versuchen Sie Folgendes, aber bevor Sie es ausführen, beachten Sie , dass das
-k
Flag alle laufenden Prozesse abbricht, die das Gerät beschäftigt halten.Die
-i
Flaggefuser
fragt vor dem Töten.quelle
lsof | grep '/dev/<my-device>
habe nichts zurückgegeben, aber das funktioniert super! Vielleicht möchten Sie auch vorschlagen,fuser -m /dev/<my-device>
falls Sie den Prozess herausfinden möchten, bevor Sie ihn beenden.Vermeiden
umount -l
Zum Zeitpunkt des Schreibens empfiehlt die am besten gewählte Antwort die Verwendung
umount -l
.umount -l
ist gefährlich oder bestenfalls unsicher . Zusammenfassend:Umgehen / Alternative
Das nützliche Verhalten von
umount -l
besteht darin, das Dateisystem durch absolute Pfadnamen vor dem Zugriff zu verbergen , wodurch die weitere Verwendung von Mundpunkten minimiert wird.Das gleiche Verhalten kann erreicht werden, indem ein leeres Verzeichnis mit Berechtigungen
000
für das Verzeichnis bereitgestellt wird, dessen Bereitstellung aufgehoben werden soll.Dann werden alle neuen Zugriffe auf Dateinamen unterhalb des Mountpunkts mit null Berechtigungen auf das neu überlagerte Verzeichnis übertragen - neue Blocker für das Aufheben der Bereitstellung werden dadurch verhindert.
Versuchen Sie es zuerst
remount,ro
Der wichtigste Erfolg beim Entsperren ist das schreibgeschützte Remount. Wenn Sie das
remount,ro
Abzeichen erhalten, wissen Sie, dass:mount -o remount,ro /dev/device
Es ist garantiert, dass dies fehlschlägt, wenn Dateien zum Schreiben geöffnet sind. Versuchen Sie es also direkt. Du fühlst dich vielleicht glücklich, Punk!Wenn Sie Pech haben, konzentrieren Sie sich nur auf Prozesse mit Dateien, die zum Schreiben geöffnet sind :
Sie sollten dann in der Lage sein, das Gerät schreibgeschützt erneut bereitzustellen und einen konsistenten Status sicherzustellen.
Wenn Sie zu diesem Zeitpunkt nicht schreibgeschützt erneut bereitstellen können, untersuchen Sie einige der anderen hier aufgeführten möglichen Ursachen .
Schreibgeschützter Re-Mount-Erfolg freigeschaltet 🔓☑
Herzlichen Glückwunsch, Ihre Daten auf dem Mountpoint sind jetzt konsistent und vor künftigem Schreiben geschützt.
Warum
fuser
ist schlechter alslsof
Warum nicht
fuser
früher verwenden? Nun, Sie könnten es haben, arbeiten aberfuser
mit einem Verzeichnis , nicht mit einem Gerät . Wenn Sie also den Mountpoint aus dem Dateinamenraum entfernen und dennoch verwendenfuser
möchten, müssen Sie:mount -o bind /media/hdd /mnt
an einen anderen OrtHier ist wie:
Sie hätten dann:
fuser
.Dies ist komplizierter [1] , ermöglicht Ihnen jedoch Folgendes:
Hier werden Sie interaktiv aufgefordert, die Prozesse mit zum Schreiben geöffneten Dateien abzubrechen. Natürlich können Sie dies tun, ohne den Einhängepunkt überhaupt zu verbergen, aber die oben genannten Nachahmungen
umount -l
, ohne die Gefahren.Der
-w
Schalter beschränkt sich auf Schreibvorgänge und-i
ist interaktiv. Wenn Sie es also nach einem schreibgeschützten Remount eilig haben, können Sie Folgendes verwenden:um alle verbleibenden Prozesse mit Dateien abzubrechen, die unter dem Mountpoint geöffnet sind.
Hoffentlich können Sie das Gerät an dieser Stelle aushängen. (Sie müssen
umount
zweimal auf dem Mountpoint ausgeführt werden, wenn Sie ein Modusverzeichnis000
oben gebunden haben .)Oder verwenden Sie:
um die verbleibenden schreibgeschützten Prozesse, die das Aufheben der Bereitstellung blockieren, interaktiv zu beenden.
Verdammt, ich verstehe immer noch
target is busy
!Offene Dateien sind nicht der einzige Blocker zum Aufheben der Bereitstellung. Weitere Ursachen und deren Abhilfemaßnahmen finden Sie hier und hier .
Selbst wenn Sie einen lauernden Gremlin haben, der Sie daran hindert, das Gerät vollständig abzumelden, haben Sie Ihr Dateisystem zumindest in einem konsistenten Zustand.
Anschließend können Sie
lsof +f -- /dev/device
alle Prozesse mit geöffneten Dateien auf dem Gerät mit dem Dateisystem auflisten und anschließend beenden.[1] Die Verwendung ist weniger kompliziert
mount --move
, aber das erfordertmount --make-private /parent-mount-point
Auswirkungen . Wenn der Mountpoint unter dem/
Dateisystem bereitgestellt wird , möchten Sie dies grundsätzlich vermeiden.quelle
--lazy
es so gefährlich ist, warum gibt es in derumount
Manpage nicht einmal eine Warnung ? Alles, was darin steht, ist " Lazy unmount. Trennen Sie das Dateisystem jetzt von der Dateihierarchie und bereinigen Sie alle Verweise auf dieses Dateisystem, sobald es nicht mehr ausgelastet ist. "Suchen Sie mit exportfs -v nach exportierten NFS-Dateisystemen. Wenn gefunden, entfernen Sie mit exportfs -d share: / directory. Diese werden nicht in der Liste fuser / lsof angezeigt und können den Erfolg von umount verhindern.
quelle
Check out
umount2
:quelle
Jemand hat erwähnt, dass der Fehler angezeigt wird, wenn Sie ein Terminal verwenden und sich Ihr aktuelles Verzeichnis innerhalb des Pfads befindet, den Sie aushängen möchten.
Als Ergänzung müssen Sie in diesem Fall
lsof | grep path-to-be-unmounted
die folgende Ausgabe haben:quelle
Eine andere Alternative, wenn etwas funktioniert, ist das Bearbeiten
/etc/fstab
, Hinzufügen einesnoauto
Flags und ein Neustart des Computers. Das Gerät wird nicht gemountet. Wenn Sie fertig sind, entfernen Sie das Flag und starten Sie es erneut.quelle
Nischenantwort:
Wenn auf diesem Gerät ein zfs-Pool vorhanden ist,
lsof
wird die Verwendung zumindest dann nicht angezeigt, wenn es sich um einen dateibasierten Pool handelt . Aber du kannst einfach rennenund dann abmontieren.
quelle