Diagnose von Speicherplatzproblemen

LinuxBeginner
Jetzt üben

Einführung

Platzmangel auf der Festplatte ist ein häufiges Problem für Systemadministratoren und Entwickler. Wenn eine Festplatte voll ist, können Anwendungen fehlschlagen und das System kann instabil werden. Zu wissen, wie man diese Probleme schnell diagnostiziert und behebt, ist eine entscheidende Fähigkeit.

In diesem Lab übernehmen Sie die Rolle eines Systemadministrators, der eine Warnung bezüglich geringen Speicherplatzes erhalten hat. Sie lernen einen systematischen Ansatz kennen, um zu identifizieren, was den Speicherplatz belegt, und wie man ihn sicher wieder freigibt. Sie werden eine Reihe von Standard-Linux-Kommandozeilen-Tools verwenden: df, du, find und truncate. Am Ende dieses Labs werden Sie zuversichtlich sein, grundlegende Notfälle im Zusammenhang mit dem Speicherplatz bewältigen zu können.

Festplattennutzung prüfen

In diesem Schritt beginnen Sie Ihre Untersuchung mit einem Überblick über die Festplattennutzung aller gemounteten Dateisysteme. Das beste Werkzeug dafür ist der Befehl df (disk free).

Der Befehl df meldet den verwendeten und verfügbaren Speicherplatz auf Dateisystemen. Die Verwendung mit der Option -h (human-readable/menschenlesbar) macht die Ausgabe viel einfacher zu lesen, da die Größen in Potenzen von 1024 (z. B. Kilobytes, Megabytes, Gigabytes) angezeigt werden.

Führen Sie den folgenden Befehl in Ihrem Terminal aus, um die aktuelle Festplattennutzung zu überprüfen:

df -h

Sie werden eine Ausgabe sehen, die dieser ähnelt. Achten Sie besonders auf die Spalte Use% (Nutzungsprozentsatz), insbesondere für das Root-Dateisystem, das auf / gemountet ist. Ein hoher Prozentsatz hier deutet auf ein potenzielles Problem hin.

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda3        40G   38.5G  1.5G  96% /
tmpfs           1.8G     0  1.8G   0% /dev/shm
tmpfs          1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/vdb1        20G  1.2G   19G   6% /home/labex/project
...

Aus der Beispielausgabe können Sie erkennen, dass das Root-Dateisystem (/dev/vda3, gemountet auf /) zu 96 % ausgelastet ist. Dies bestätigt, dass ein Problem mit dem Speicherplatz besteht, das behoben werden muss.

Große Dateien finden

Nachdem Sie in diesem Schritt festgestellt haben, dass die Festplatte voll wird, besteht Ihre nächste Aufgabe darin, herauszufinden, welche Verzeichnisse den meisten Speicherplatz belegen. Der Befehl du (disk usage/Festplattennutzung) ist hierfür perfekt geeignet. Er schätzt die Dateispeichernutzung.

Wir werden du mit den folgenden Optionen verwenden:

  • -s: (summarize/zusammenfassen) um nur eine Gesamtsumme für jedes Argument anzuzeigen.
  • -h: (human-readable/menschenlesbar) um Größen in einem besser lesbaren Format auszugeben (z. B. 1K, 234M, 2G).

Überprüfen wir die Größe des Inhalts in Ihrem project-Verzeichnis. Ihr aktuelles Arbeitsverzeichnis ist ~/project, daher können Sie einen relativen Pfad verwenden.

Führen Sie den folgenden Befehl aus, um die Größe jeder Datei und jedes Unterverzeichnisses im Verzeichnis ~/project anzuzeigen:

du -sh ~/project/*

Der Befehl erzeugt eine Ausgabe, die die Größe jedes Elements anzeigt. Sie sollten die große Datei sehen, die während der Laboreinrichtung erstellt wurde.

3.0G /home/labex/project/large_data_archive.dat

Diese Ausgabe teilt Ihnen mit, dass eine Datei namens large_data_archive.dat in Ihrem Projektverzeichnis 3,0 GB Speicherplatz belegt. Obwohl dies eine Quelle der Speicherbelegung ist, deutete die df-Ausgabe aus dem vorherigen Schritt auf ein größeres Problem hin, das sich möglicherweise außerhalb des Home-Verzeichnisses befindet.

Große Log-Dateien lokalisieren

In diesem Schritt untersuchen Sie eine weitere häufige Ursache für Speicherplatzprobleme: große Protokolldateien (Log-Dateien). System- und Anwendungsprotokolle werden oft im Verzeichnis /var/log gespeichert. Wenn sie nicht ordnungsgemäß verwaltet werden, können diese Dateien unbegrenzt wachsen.

Der Befehl find ist ein leistungsstarkes Dienstprogramm zur Suche nach Dateien und Verzeichnissen. Sie können ihn verwenden, um Dateien basierend auf verschiedenen Kriterien wie Name, Typ und Größe zu lokalisieren.

Wir werden find verwenden, um nach allen Dateien (-type f) im Verzeichnis /var/log zu suchen, die größer als 10 Megabyte (-size +10M) sind. Da das Verzeichnis /var/log dem Benutzer root gehört, müssen Sie sudo verwenden, um administrative Rechte zu erteilen, damit der Befehl alle Dateien überprüfen kann.

Führen Sie den folgenden Befehl in Ihrem Terminal aus:

sudo find /var/log -type f -size +10M

Der Befehl scannt das angegebene Verzeichnis und gibt den Pfad jeder Datei aus, die den Kriterien entspricht. Ihre Ausgabe zeigt möglicherweise mehr als eine Datei an.

/var/log/syslog
/var/log/journal/deaaf690a67544aaaa83c02167a202c6/user-6000@0005fc8f16f7df1a-7ea5bde2c8c33f92.journal~

Die Ausgabe zeigt deutlich, dass /var/log/syslog größer als 10 MB ist. Obwohl möglicherweise auch andere große Dateien wie Journal-Protokolle vorhanden sind, konzentrieren wir uns für diese Übung auf syslog. Sie haben nun eine spezifische, große Protokolldatei identifiziert, die zum Speicherplatzproblem beiträgt.

Eine Log-Datei bereinigen

Nachdem Sie in diesem Schritt eine große Protokolldatei identifiziert haben, müssen Sie den von ihr belegten Speicherplatz freigeben. Das einfache Löschen der Datei mit rm kann manchmal zu Problemen führen, wenn ein Dienst aktiv in sie schreibt. Eine sicherere Methode besteht darin, den Inhalt der Datei zu leeren, ohne die Datei selbst zu löschen.

Der Befehl truncate ist für diesen Zweck konzipiert. Er kann die Größe einer Datei auf eine angegebene Größe verkleinern oder erweitern. Indem Sie die Größe auf Null setzen, leeren Sie die Datei effektiv.

Sie verwenden truncate mit der Option -s 0, welche die Dateigröße auf 0 Bytes setzt. Auch hier benötigen Sie sudo, da Sie eine Systemdatei ändern.

Führen Sie den folgenden Befehl aus, um den Inhalt von syslog zu leeren:

sudo truncate -s 0 /var/log/syslog

Ein erfolgreicher truncate-Befehl erzeugt keine Ausgabe. Um zu überprüfen, ob er funktioniert hat, können Sie den Befehl ls -lh verwenden, um die neue Größe der Datei zu überprüfen.

ls -lh /var/log/syslog

Die Ausgabe sollte nun anzeigen, dass die Dateigröße 0 beträgt.

-rw-r----- 1 syslog adm 0 Oct 22 15:31 /var/log/syslog

Sie haben die große Protokolldatei erfolgreich und sicher geleert und dadurch Speicherplatz freigegeben.

Die Korrektur überprüfen

In diesem Schritt führen Sie die letzte und wichtigste Aktion durch: die Überprüfung, ob Ihre Bemühungen das Problem mit dem Speicherplatz behoben haben. Sie verwenden erneut den Befehl df -h, genau wie im ersten Schritt.

Durch den Vergleich der neuen Ausgabe mit der ursprünglichen können Sie bestätigen, dass Speicherplatz freigegeben wurde.

Führen Sie den Befehl df -h ein weiteres Mal aus:

df -h

Sie sollten eine Ausgabe sehen, bei der der Use% (Nutzungsprozentsatz) für das Root-Dateisystem (/) niedriger ist als in Schritt 1.

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda3        40G   37G  3.0G  92% /
tmpfs           1.8G     0  1.8G   0% /dev/shm
tmpfs          1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/vdb1        20G  1.2G   19G   6% /home/labex/project
...

Die Auslastung ist von 96 % auf 92 % gesunken, was bestätigt, dass das Abschneiden (Truncating) der Protokolldatei funktioniert hat. Um die Bereinigung abzuschließen, können Sie auch die große Datendatei löschen, die Sie in Ihrem Projektverzeichnis gefunden haben.

rm ~/project/large_data_archive.dat

Führen Sie nun ein letztes Mal df -h aus, um das Endergebnis all Ihrer Bereinigungsaktionen zu sehen. Der verfügbare Speicherplatz sollte noch weiter gestiegen sein. Dies bestätigt, dass Sie das Problem mit dem Speicherplatz erfolgreich diagnostiziert und behoben haben.

Zusammenfassung

Herzlichen Glückwunsch zum Abschluss des Labs! Sie haben erfolgreich ein häufiges Problem mit dem Speicherplatz auf einem Linux-System diagnostiziert und behoben.

In diesem Lab haben Sie einen praktischen, schrittweisen Workflow gelernt:

  1. Sie verwendeten df -h, um einen Überblick über die Festplattennutzung zu erhalten und ein Problem zu bestätigen.
  2. Sie verwendeten du -sh, um die Größe bestimmter Verzeichnisse zu überprüfen und große Dateien zu identifizieren.
  3. Sie verwendeten find, um Dateien anhand spezifischer Kriterien, wie der Größe, zu suchen und große Protokolldateien einzugrenzen.
  4. Sie lernten, truncate -s 0 als sichere Methode zu verwenden, um eine Datei zu leeren, ohne sie zu löschen.
  5. Schließlich haben Sie Ihre Korrektur überprüft, indem Sie df -h erneut ausgeführt haben, um den freigegebenen Speicherplatz zu sehen.

Diese Befehle sind wesentliche Werkzeuge für jeden Linux-Benutzer oder Systemadministrator. Mit diesem Wissen sind Sie nun besser gerüstet, um Ihre Systeme reibungslos am Laufen zu halten.