Wie findet man große Dateien, die gelöscht wurden, aber noch in einer Anwendung geöffnet sind? Wie kann man eine solche Datei entfernen, obwohl ein Prozess sie geöffnet hat?
Die Situation ist, dass wir einen Prozess ausführen, der eine Protokolldatei mit einer hervorragenden Geschwindigkeit füllt. Ich kenne den Grund und kann ihn beheben. Bis dahin möchte ich die Protokolldatei speichern oder leeren, ohne den Prozess zu beenden.
Durch einfaches Ausführen werden rm output.log
nur Verweise auf die Datei entfernt, der Speicherplatz auf der Festplatte wird jedoch weiterhin belegt, bis der Vorgang beendet wird. Schlimmer noch: rm
Ich habe jetzt keine Möglichkeit herauszufinden, wo sich die Datei befindet oder wie groß sie ist! Gibt es eine Möglichkeit, die Datei zu finden und möglicherweise zu leeren, obwohl sie in einem anderen Prozess noch geöffnet ist?
Ich beziehe mich speziell auf Linux-basierte Betriebssysteme wie Debian oder RHEL.
rm
noch geöffneten ed-Dateien erhalten?
lsof | grep "(deleted)"
. Wenn keine Prozesse mehr vorhanden sind, bei denen eine gelöschte Datei geöffnet ist, gibt der Kernel die Inode- und Festplattenblöcke frei. Prozesse haben keine "Handler", mit denen sie benachrichtigt werden können, dass eine offene, im Wesentlichen gesperrte Datei von der Festplatte entfernt wurde.
lsof | grep '(deleted)'
funktioniert auch unter Linux. Unter Linux können Sie Löschen von Dateien benachrichtigt werden (auch Dateien , die bereits keinen Eintrag andere in einem beliebigen Verzeichnis haben als / proc / some-pid / fd mehr) mit dem inotify Mechanismus (IN_DELETE_SELF Ereignis)
somefile
es in VIM erstellt und geöffnet und es dann rm
in einem anderen Bash-Prozess bearbeitet. Ich laufe dann lsof | grep somefile
und es ist nicht drin, obwohl die Datei in VIM geöffnet ist.
lsof -p <pid>
geöffneten Dateien und deren Größe auflisten.(deleted)
Neben der gelöschten Datei befindet sich ein . Die gelöschte Datei wird/proc/<pid>/fd/1
wahrscheinlich um verlinkt . Ich weiß nicht, wie ich einen Prozess stoppen kann, ohne ihn zu beenden. Ich würde denken, dass das vom Prozess abhängen würde.