Heim >php教程 >PHP开发 >Strategie zum Löschen von Linux-Serverdateien

Strategie zum Löschen von Linux-Serverdateien

高洛峰
高洛峰Original
2016-11-19 09:05:381264Durchsuche

Der Speicherplatz ist voll

Da Linux keine Papierkorbfunktion hat, werden alle zu löschenden Dateien auf dem Online-Server zuerst in das Systemverzeichnis /tmp verschoben und dann die Daten im /tmp-Verzeichnis. Das tmp-Verzeichnis wird regelmäßig gelöscht. An dieser Strategie ist an sich nichts auszusetzen, aber nach einer Untersuchung wurde festgestellt, dass die Systempartition dieses Servers keine separate /tmp-Partition hatte, sodass die Daten unter /tmp tatsächlich den Platz der Root-Partition belegten. Nachdem das Problem nun gefunden wurde, löschen Sie einfach einige Datendateien, die viel Platz im Verzeichnis /tmp beanspruchen, und überprüfen Sie die drei größten Datendateien in /tmp.

du -sh /tmp/* | sort -nr | head -3

Überprüfen Sie die drei größten Datendateien unter /tmp und stellen Sie anhand der Befehlsausgabe fest, dass sich im Verzeichnis /tmp eine 66-GB-Datei access_log befindet. Diese Datei sollte die von Apache generierte Zugriffsprotokolldatei sein. Aus der Größe des Protokolls geht hervor, dass die Apache-Protokolldatei seit langem nicht bereinigt wurde. Es wird grundsätzlich festgestellt, dass der Root-Speicherplatz aufgrund dieser Datei voll ist. Führen Sie den Vorgang durch Folgender Löschvorgang:

rm /tmp/access_log

Überprüfen Sie dann das System. Ist der Speicherplatz der Root-Partition freigegeben? Anhand der Ausgabe können Sie erkennen, dass der Speicherplatz der Root-Partition immer noch nicht freigegeben ist.

Das Löschen von Dateien gibt keinen Speicherplatz frei

Im Allgemeinen erfolgt das Löschen von Dateien nicht. Es gibt jedoch Ausnahmen, z. B. wenn die Datei durch einen Prozess gesperrt ist oder ein Prozess Daten in die Datei geschrieben hat usw. Um dieses Problem zu verstehen, müssen Sie den Speichermechanismus und die Speicherstruktur von Dateien unter Linux kennen.

Der Daten- und Zeigerteil der Datei

Die Speicherung einer Datei im Dateisystem ist in zwei Teile unterteilt: den Datenteil und den Zeigerteil. Der Zeiger befindet sich im Meta -Daten des Dateisystems Nachdem die Daten gelöscht wurden, wird dieser Zeiger aus den Metadaten gelöscht und der Datenteil wird auf der Festplatte gespeichert. Nachdem die den Daten entsprechenden Zeiger aus den Metadaten gelöscht wurden, kann der von den Dateidaten belegte Speicherplatz überschrieben und neuer Inhalt geschrieben werden. Der Grund, warum der Speicherplatz nach dem Löschen der access_log-Datei nicht freigegeben wurde, liegt im httpd-Prozess ist immer noch Schreiben Sie weiterhin Inhalte in diese Datei, was dazu führt, dass die Datei access_log gelöscht wird. Aufgrund der Prozesssperre wird jedoch der der Datei entsprechende Zeigerteil nicht aus den Metadaten gelöscht, und da der Zeiger nicht gelöscht wird, wird der Systemkernel gelöscht geht davon aus, dass die Datei nicht gelöscht wurde.

Suchen Sie die Liste der gelöschten Dateien, die von der Anwendung belegt sind

Fragen Sie daher den Speicherplatz über den Befehl df ab und er wurde nicht freigegeben. Jetzt haben Sie eine Idee, das Problem zu lösen Um zu sehen, ob es Prozesse gibt, müssen Sie unter Linux den Befehl lsof verwenden. Mit diesem Befehl können Sie eine Liste der gelöschten Dateien abrufen, die noch von der Anwendung belegt sind:

lsof | grep delete

Wie Sie den Ausgabeergebnissen entnehmen können, ist die Datei /tmp/access_log durch den httpd-Prozess gesperrt und der httpd-Prozess schreibt weiterhin Protokolldaten in diese Datei. Aus Spalte 7 können wir ersehen, dass die Größe dieser Protokolldatei etwa 70 GB beträgt und die Gesamtgröße der System-Root-Partition nur 100 GB beträgt. Es ist ersichtlich, dass diese Datei dafür verantwortlich ist, dass der Speicherplatz der System-Root-Partition erschöpft ist . Der Status „gelöscht“ in der letzten Spalte zeigt an, dass die Protokolldatei gelöscht wurde. Da der Prozess jedoch immer noch Daten in diese Datei schreibt, wurde der Speicherplatz nicht freigegeben.

Datei korrekt löschen

Es gibt viele Möglichkeiten, diese Art von Problem zu lösen. Der einfachste Weg ist, den httpd-Prozess zu schließen oder neu zu starten. aber das sind nicht die gebräuchlichsten Ansätze. Für diese Art von Prozess, bei dem weiterhin Protokolle in Dateien geschrieben werden, besteht die beste Möglichkeit, den von der Datei belegten Speicherplatz freizugeben, darin, die Datei online zu löschen. Dies kann mit dem folgenden Befehl erfolgen:

[root@localhost ~]# echo " " >/tmp/access_log

Durch Diese Methode gibt nicht nur sofort Speicherplatz frei, sondern stellt auch sicher, dass der Prozess weiterhin Protokolle in die Datei schreibt. Diese Methode wird häufig zum Bereinigen von Protokolldateien verwendet, die von Webdiensten wie Apache, Tomcat und Nginx online generiert werden.


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn