Frage df sagt Festplatte ist voll, aber es ist nicht


Auf einem virtualisierten Server, auf dem Ubuntu 10.04 ausgeführt wird, meldet df Folgendes:

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             7.4G  7.0G     0 100% /
none                  498M  160K  498M   1% /dev
none                  500M     0  500M   0% /dev/shm
none                  500M   92K  500M   1% /var/run
none                  500M     0  500M   0% /var/lock
none                  500M     0  500M   0% /lib/init/rw
/dev/sda3             917G  305G  566G  36% /home

Das verwirrt mich aus zwei Gründen: 1.) df sagt, dass / dev / sda1, montiert bei /, eine Kapazität von 7,4 Gigabyte hat, von der nur 7,0 Gigabyte verwendet werden, aber es meldet / zu 100 Prozent voll ist; und 2.) Ich kann Dateien auf / erstellen, so dass eindeutig Platz übrig bleibt.

Möglicherweise relevant ist, dass das Verzeichnis / www eine symbolische Verbindung zu / home / www ist, die sich auf einer anderen Partition (/ dev / sda3, eingehängt an / home) befindet.

Kann mir jemand Vorschläge machen, was hier vor sich geht? Der Server scheint ohne Probleme zu funktionieren, aber ich möchte sicherstellen, dass es kein Problem mit der Partitionstabelle, den Dateisystemen oder etwas anderem gibt, das später zu einer Implosion (oder Explosion) führen könnte.


47
2017-09-24 20:31


Ursprung


Danke an alle für die hilfreichen Antworten. Ich kann keine Dateien als normaler Benutzer erstellen, so scheint es, dass es der 5-Prozent-Puffer ist, der eine Katastrophe verhindert. Jetzt muss ich nur herausfinden, warum der Datenträger voll ist (ich bin ein bisschen besorgt, dass etwas Schädliches passieren könnte, weil keine der Protokolldateien so viel Speicherplatz belegt und nicht viel Software installiert ist, nur ein einfacher LAMP-Server) ... - Chris
Der erste Platz, den ich suchen würde ist / tmp. Eine andere Möglichkeit ist, dass Sie eine gelöschte Datei haben, an der sich ein laufendes Programm befindet. Ich denke du kannst 'lsof | grep gelöscht 'als root um diese zu finden. - Scott


Antworten:


Es ist möglich, dass ein Prozess eine große Datei geöffnet hat, die seitdem gelöscht wurde. Sie müssen diesen Prozess beenden, um den Speicherplatz freizugeben. Sie können den Prozess möglicherweise mithilfe von lsof identifizieren. Auf Linux gelöschte und dennoch geöffnete Dateien sind lsof bekannt und in der Ausgabe von lsof als (deleted) markiert.

Sie können dies überprüfen mit sudo lsof +L1


84
2017-09-27 13:20



Es ist das Geheimnis für mich gelöst. Ich habe eine große Protokolldatei von uwsgi entfernt, ohne den Dienst neu zu starten. Wenn abgefragt df -ahIch habe die Festplatte voll, aber du -sh / sagt, dass ich freien Platz haben sollte. Nach dem Neustart uwsgi habe ich viel freien Platz bekommen! - Fabio Montefuscolo
Ich hatte 40G wert von Logs stecken in Limbo und lsof + L1 gab mir den Röntgenblick, um zu sehen, was passiert ist ;-) Alles, was ich tun musste, war den Dienst neu zu starten. - PJ Brunet


5% (standardmäßig) des Dateisystems sind für Fälle reserviert, in denen das Dateisystem voll ist, um ernsthafte Probleme zu vermeiden. Dein Dateisystem ist voll. Nichts katastrophales passiert wegen des 5% -Puffers - root darf diesen Sicherheitspuffer verwenden und in Ihrer Konfiguration haben Nicht-root-Benutzer keinen Grund, in dieses Dateisystem zu schreiben.

Wenn Sie Daemons haben, die als Nicht-Root-Benutzer ausgeführt werden, aber Dateien in diesem Dateisystem verwalten müssen, werden die Dinge nicht mehr funktionieren. Ein gewöhnlicher solcher Daemon ist named. Ein anderes ist ntpd.


42
2017-09-24 21:46



Auf die Frage von WARUM Ihre Festplatte ist voll, 7G ist wirklich nicht so viel Platz. Sie scheinen auch zu haben alles unter einer Partition / Dateisystem (/). Dies wird allgemein als ein schlechtes Ding angesehen (denn wenn etwas drunter und drüber geht) / füllt sich, und die Welt endet), aber Linux-Distributionen bestehen immer noch darauf, weil es "einfacher" ist. Ich würde damit anfangen, hineinzuschauen /var (esp. /var/log) für große Logfiles. du -hs / (als root) wird Ihnen helfen, die größten Verzeichnisse zu finden und Sie möglicherweise darauf hinweisen, was aufgeräumt werden muss. - voretaq7


Sie haben möglicherweise keine Inodes mehr. Überprüfen Sie die Inode-Verwendung mit diesem Befehl:

df -i

33
2017-09-24 21:48





Die meisten Linux-Dateisysteme reservieren 5% Speicherplatz, um nur den Root-Benutzer zu verwenden.

Sie können dies mit z.B.

dumpe2fs /dev/sda1 | grep -i reserved

Sie können den reservierten Betrag ändern mit:

tune2fs -m 0 /dev/sda1

In den meisten Fällen scheint der Server weiterhin gut zu funktionieren - vorausgesetzt, alle Prozesse werden als 'root' ausgeführt.


15
2017-09-25 08:39





Ich hatte dieses Problem und war verblüfft, dass das Löschen verschiedener großer Dateien die Situation nicht verbesserte (wusste nicht über den Puffer von 5%)

Von root gingen die größten Verzeichnisse verloren, die sich wiederholten: -

du -sh */ 

bis ich ein Verzeichnis für Webserver-Log-Dateien kam, die einige absolut massive Logs hatten

was ich mit abgeschnitten habe

:>lighttpd.error.log

plötzlich war df -h zu 48% verbraucht!


8
2017-11-26 13:25



Das sollte eigentlich mit "... dann habe ich Log-Rotation einrichten." - hayalci
hayalci: festgestellt, dass die Logrotation auf das falsche Verzeichnis verweist. - zzapper


Neben bereits vorgeschlagenen Ursachen könnte es in einigen Fällen auch folgendes geben:

  • Ein anderer Datenträger wird "über" dem vorhandenen Ordner, der mit Daten voll ist, montiert
  • du wirst berechnen die Größe der bereitgestellten Festplatte und df zeigen wirklich ausgegeben
  • Lösung: (wenn möglich) unmounten Sie alle Nicht-Root-Laufwerke und überprüfen Sie die Größe mit du -md 1 nochmal. Die Situation durch Verschieben beheben versteckt Ordner zu einem anderen Ort oder an einem anderen Ort montieren.

8
2017-10-23 18:41



Wie finden Sie Mountpunkte außer df? - Hogan
@Hogan: Vielleicht würde "mount" oder "cat / etc / fstab" aufrufen? - Robert Lujo


df -h Rundet die Werte auf. Sogar die Prozentsätze sind gerundet. Auslassen der -hund Sie sehen feinkörnigere Unterschiede.

Oh. Und ext3 und Derivate reservieren einen Prozentsatz (Standard 5%) für das Dateisystem für genau diese problematische Konstellation. Wenn Ihr Root-Dateisystem wirklich voll wäre (0 Byte verbleibend), können Sie das System nicht starten. Der reservierte Teil verhindert dies.


5
2017-09-24 20:40



Könnte auch sein, dass er keine freien Inodes mehr hat. Führen Sie 'df -i' aus, um die Inodes-Verwendung zu erhalten. - Andrew Case
Er hat keine Informationen über die Festplatte bereitgestellt ist voll. Nur er denkt dass die Festplatte voll ist. 100% belegter Platz ohne Fehler ist nur "virtuell voll". - mailq


check the / lost + found, ich hatte ein System (centos 7) und einige der Dateien in / lost + found haben den ganzen Platz verschlungen


0
2017-11-23 22:31





Wenn Ihre Partition Btrfs ist, kann ein Subvolume Platz beanspruchen. Ein btrfs-Dateisystem kann viele Subvolumes haben, von denen nur eines gemountet ist. Sie können verwenden btrfs subvolume list <dir> um alle Subvolumes aufzulisten und btrfs subvolume delete <dir>/<subvolume> um eins zu löschen. Stellen Sie sicher, dass Sie die standardmäßig angehängte nicht löschen.


0
2018-05-16 19:25