Zusammenfassung der Probleme bei der Speicherplatzfreigabe unter Linux

Zusammenfassung der Probleme bei der Speicherplatzfreigabe unter Linux

Die /Partitionsauslastung eines Servers im IDC ist voll! 100 % erreicht! Nach der Überprüfung stellte ich fest, dass eine Datei zu groß war (80 GB). Nach Rücksprache mit den entsprechenden Kollegen löschte ich die Datei daher endgültig mit rm -f. Ich stellte jedoch fest, dass nach dem Löschen der Datei der Speicherplatz der /-Partition überhaupt nicht freigegeben wurde und die Nutzungsrate immer noch 100 % betrug! Warum ist das so? ?

[root@linux-node1 ~]# df -hFilesystem Größe Verwendet Verfügbar Nutzung% Gemountet auf/dev/mapper/VolGroup00-LogVol00 58G 7,8G 47G 100% /tmpfs 1,9G 0 1,9G 0% /dev/shm/dev/vda1 190M 72M 108M 40% /boot

Ursachenanalyse

In einem Linux-System wird durch das Löschen einer Datei über rm oder den Dateimanager nur die Verknüpfung mit der Verzeichnisstruktur des Dateisystems aufgehoben, d. h., es wird nur die Verknüpfung zwischen der Datei und der Systemverzeichnisstruktur gelöscht. Wenn die Datei beim Löschen geöffnet ist (ein Prozess verwendet die Datei, die Datei ist durch den Prozess gesperrt oder ein Prozess schreibt Daten in die Datei usw.), kann der Prozess die Datei weiterhin lesen, d. h. die Datei wird nicht gelöscht. Der Lesestatus, sodass der Speicherplatz immer belegt ist.

Eine Datei wird im Dateisystem in zwei Teilen gespeichert: dem Datenteil und dem Zeigerteil. Der Zeiger befindet sich in den Metadaten des Dateisystems. Nachdem die Daten gelöscht wurden, wird der Zeiger aus den Metadaten gelöscht und der Datenteil auf der Festplatte gespeichert. Nachdem der den Daten entsprechende Zeiger aus den Metadaten gelöscht wurde, kann der vom Dateidatenteil belegte Speicherplatz überschrieben und neuer Inhalt geschrieben werden. Der Grund, warum der Speicherplatz nach dem Löschen der Datei nicht freigegeben wird, liegt darin, dass es einen Prozess gibt, der noch Inhalt in die Datei schreibt. Infolgedessen wird der der Datei entsprechende Zeigerteil aufgrund der Prozesssperre nicht aus den Metadaten gelöscht, obwohl die Datei gelöscht wird. Da der Zeiger nicht gelöscht wird, geht der Systemkernel davon aus, dass die Datei nicht gelöscht wurde. Daher ist es nicht überraschend, dass der Speicherplatz bei der Abfrage über den Befehl df nicht freigegeben wurde.

Es gibt mehrere Lösungen:

1. Verwenden Sie den Befehl lsof|grep deleted, um eine Liste der Dateien abzurufen, die gelöscht wurden, aber noch immer von Anwendungen belegt sind, und beenden Sie dann den Prozess, der die gelöschten Dateien noch belegt. Es ist zu beachten, dass die Verwendung der ersten Methode zum Beenden des Prozesses etwas mühsam und riskant ist, wenn viele Prozesse die gelöschte Datei verwenden. Da der Kill-Prozess die Dateien im Proc-Dateisystem abschneidet, kann er das System zwingen, die ihm zugewiesenen und verwendeten Dateien zurückzufordern. Sie müssen vor der Verwendung sicherstellen, dass der laufende Prozess dadurch nicht beeinträchtigt wird. Die Anwendung unterstützt diese Methode nicht gut. Wenn eine verwendete Datei abgeschnitten wird, können unvorhersehbare Probleme auftreten.

2. Stoppen oder starten Sie die Anwendung, die die gelöschte Datei verwendet, neu, damit das Betriebssystem den Speicherplatz automatisch zurückgewinnen kann.

3. Sie können das Betriebssystem auch neu starten, aber das ist nicht die beste Methode. 4. Bei dieser Art von Prozess, bei dem ständig Protokolle in Dateien geschrieben werden, besteht die beste Möglichkeit, den von der Datei belegten Speicherplatz freizugeben, darin, die Datei online zu löschen. Auf diese Weise kann nicht nur der Speicherplatz sofort freigegeben werden, sondern der Prozess kann auch weiterhin Protokolle in die Datei schreiben.

So löschen Sie Dateien online (z. B. /home/wangshibo.log):

# echo " " > /home/wangshibo.logb)# cat /dev/null > /home/wangshibo.logc)# > /home/wangshibo.log

Es gibt noch ein weiteres Phänomen bei der Speicherplatznutzung: Die Speicherplatznutzungsrate ist bei der Überprüfung mit dem Befehl df -h nicht hoch und es ist immer noch viel freier Speicherplatz vorhanden. Beim Erstellen von Dateien oder Schreiben von Daten wird jedoch eine Fehlermeldung angezeigt, die besagt, dass die Festplatte voll ist: „ Kein Speicherplatz mehr auf dem Gerät “!

Im Allgemeinen wird dieses Problem dadurch verursacht, dass der Ressourcenspeicherplatz im Partitionsverzeichnis nach dem Löschen nicht tatsächlich freigegeben wird. Der spezifische Verarbeitungsablauf ist wie folgt:

1. Führen Sie zunächst df -lh aus, um die Festplattennutzung zu prüfen. Sie werden feststellen, dass der belegte Speicherplatz unter der Partition /data sehr groß ist, aber tatsächlich nicht so viel Platz einnimmt! 2. Suchen Sie die Partition, auf der sich die gelöschten Dateien befinden, z. B. die Partition /data. 3. Überprüfen Sie alle gelöschten Dateien: lsof -n /data |grep deleted 4. Beenden Sie den Löschvorgang dieser Dateien, um Speicherplatz freizugeben: lsof -n /data |grep deleted|awk '{print $2}'|xargs kill -95. Führen Sie dann lsof -n /data |grep delete erneut aus, und es sollten keine Ergebnisse angezeigt werden. 6. Hinweis: Wenn Sie den gelöschten Prozess einfach beenden, überprüfen Sie mit df -h die /data-Partition. Der belegte Speicherplatz ist möglicherweise für einen Moment zu groß, aber wenn der gelöschte Prozess beendet wird, werden Ressourcen nach und nach freigegeben, der belegte Speicherplatz unter der /data-Partition wird nach und nach kleiner und der verfügbare Speicherplatz wird nach und nach größer.)

Die meisten Dateisysteme reservieren etwas Speicherplatz für den Notfall (z. B. wenn die Festplatte voll ist). Dadurch wird sichergestellt, dass einige kritische Anwendungen (z. B. Datenbanken) bei voller Festplatte etwas Platz haben, sodass sie nicht sofort abstürzen und das Überwachungssystem und der Administrator Zeit haben, dies zu bemerken. Manchmal ist dieser reservierte Festplattenspeicher jedoch eine Verschwendung, wenn er nicht verwendet wird.

In Linux-Systemen sind bei den Dateisystemen ext2, ext3 und ext4 normalerweise standardmäßig 5 % des Speicherplatzes reserviert. Wenn die Festplatte beispielsweise 2 TB groß ist, bedeutet dies, dass 100 GB Speicherplatz reserviert werden. Ist das nicht ein bisschen verschwenderisch? Die Standardeinstellung von 5 % kann mit dem Befehl „tune2fs“ geändert werden, um beispielsweise nur 2 % des Speicherplatzes zu reservieren. Es wird jedoch nicht empfohlen, den Wert auf 0 % zu setzen, da dies in realen Umgebungen unsicher ist.

# df -TFilesystem Type 1K-blocks Used Available Use% Mounted on/dev/vda1 ext4 41151808 4962148 34076228 13% /devtmpfs devtmpfs 1931468 0 1931468 0% /devtmpfs tmpfs 1941204 0 1941204 0% /dev/shmtmpfs tmpfs 1941204 652 1940552 1% /runtmpfs tmpfs 1941204 0 1941204 0% /sys/fs/cgrouptmpfs tmpfs 388244 0 388244 0% /run/user/0[root@ss-server ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/vda1 40G 4.8G 33G 13% /devtmpfs 1.9G 0 1.9G 0% /devtmpfs 1.9G 0 1.9G 0% /dev/shmtmpfs 1.9G 620K 1.9G 1% /runtmpfs 1.9G 0 1.9G 0% /sys/fs/cgrouptmpfs 380M 0 380M 0% /run/user/0

Beispielsweise ist die „/“-Partition oben das ext4-Dateisystem und das Standardsystem reserviert 5 % oder 2 GB Speicherplatz. Jetzt können Sie den Befehl „tune2fs“ verwenden, um den vom System reservierten Speicherplatz auf 2 % zu ändern.

# tune2fs -m 2 /dev/vda1tune2fs 1.42.9 (28.12.2013) Prozentsatz reservierter Blöcke auf 2 % festlegen (209.704 Blöcke)

Nach der Ausführung wird festgestellt, dass in der Partition "/" 1 GB Speicherplatz freigegeben wurde und der vom System reservierte Speicherplatz nun 2 % beträgt.

/Dev/SHMTMPFS 1,9G 620K 1,9g 1%/RUNTMPFS 1,9G 0 1,9G 0%/SYS/FS/CGROUPTMPFS 380 m 0 380 m 0%/Run/user/0 [root@ss -server ~]# df -hFiles verwendet 0 1,9g 0% /devtmpfs 1,9g 0 1,9g 0% /Dev /SHMTMPFS 1,9G 620K 1,9G 1% /RUNTMPFS 1,9G 0 1,9G 0% /SYS /FS /CGROUPTMPFS 380M 0 380M 0% /RUN /UBERE /UBER /0 0

Dies ist das Ende dieses Artikels über die Freigabe von Festplattenspeicher unter Linux. Weitere Informationen zur Freigabe von Festplattenspeicher unter Linux finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

<<:  mySql SQL-Abfrageoperation für statistische Mengen

>>:  Detaillierte Erklärung zur Einführung benutzerdefinierter Schriftarten (Font-Face) in CSS

Artikel empfehlen

JavaScript-Webformularfunktion Kommunikation voller praktischer Informationen

1. Einleitung Vorher haben wir über das Front-End...

HTML+Sass implementiert HambergurMenu (Hamburger-Menü)

Vor ein paar Tagen habe ich mir ein Video von ein...

Der gesamte Prozess der Entwicklung eines Google-Plug-Ins mit vue+element

Einfache Funktion: Klicken Sie auf das Plug-In-Sy...

HTML implementiert die Funktion zur Erkennung der Eingabevervollständigung

Verwenden Sie „onInput(event)“, um festzustellen,...

Tabellen dynamisch in HTML hinzufügen_PowerNode Java Academy

Ohne weitere Umschweife werde ich den Code direkt...

Eine kurze Diskussion über die Docker-Compose-Netzwerkeinstellungen

Tutorial zur Netzwerknutzung Offizielle Website d...

So extrahieren Sie Zeichenfolgenelemente aus nicht festen Positionen in MySQL

Vorwort Hinweis: Die Testdatenbankversion ist MyS...

Diskussion zur horizontalen und vertikalen Zentrierung von Elementen in HTML

Beim Entwerfen einer Seite müssen wir das DIV häu...

15 Best Practices für HTML-Anfänger

Hier sind 30 Best Practices für HTML-Anfänger. 1....

Beispiel zum schnellen Löschen einer 2T-Tabelle in MySQL in Innodb

Vorwort Dieser Artikel stellt hauptsächlich den r...

Mehrere Möglichkeiten zum Löschen von Arrays in Vue (Zusammenfassung)

Inhaltsverzeichnis 1. Einleitung 2. Mehrere Mögli...

Webdesign-Tipps für Formular-Eingabefelder

1. Gestricheltes Feld, wenn die Abbrechen-Schaltfl...