df sagt festplatte ist voll, aber es ist nicht

58

Auf einem virtualisierten Server unter Ubuntu 10.04 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, gemountet bei /, eine Kapazität von 7,4 Gigabyte hat, von denen nur 7,0 Gigabyte verwendet werden, obwohl es zu 100 Prozent voll ist; und 2.) Ich kann Dateien erstellen auf / so hat es eindeutig Platz übrig.

Möglicherweise ist das Verzeichnis / www ein symbolischer Link zu / home / www, das sich auf einer anderen Partition befindet (/ dev / sda3, eingehängt in / home).

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

Chris
quelle
Vielen Dank an alle für die hilfreichen Antworten. Ich kann als normaler Benutzer keine Dateien erstellen. Es sieht also so aus, als ob es der 5-Prozent-Puffer ist, der eine Katastrophe verhindert. Jetzt muss ich nur noch herausfinden, warum die Festplatte voll ist (ich bin ein bisschen besorgt, dass etwas Bösartiges passieren könnte, da keine der Protokolldateien so viel Speicherplatz beansprucht und nicht viel Software installiert ist, sondern nur ein einfacher LAMP-Server). ...
Chris
3
Der erste Platz, den ich suchen würde, ist / tmp. Eine andere Möglichkeit ist, dass Sie eine gelöschte Datei haben, an der ein laufendes Programm festhält. Ich denke, Sie können lsof | ausführen grep gelöscht 'als root um diese zu finden.
Scott

Antworten:

103

Möglicherweise hat ein Prozess eine große Datei geöffnet, die inzwischen gelöscht wurde. Sie müssen diesen Prozess beenden, um Speicherplatz freizugeben. Möglicherweise können Sie den Prozess mithilfe von lsof identifizieren. Unter Linux sind gelöschte und noch offene Dateien lsof bekannt und werden in der Ausgabe von lsof als (gelöscht) markiert.

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

mkomitee
quelle
8
Es hat das Rätsel für mich gelöst. Ich habe eine große Protokolldatei von uwsgi entfernt, ohne den Dienst neu zu starten. Als df -ahich gefragt wurde , war die Festplatte voll, aber du -sh /ich sollte freien Speicherplatz haben. Nach dem Neustart von uwsgi habe ich viel freien Speicherplatz!
Fabio Montefuscolo
Ich hatte 40G im Wert von Protokollen in der Schwebe und lsof + L1 gab mir das Röntgenbild, um zu sehen, was passiert ist ;-) Alles was ich tun musste, war den Dienst neu zu starten.
PJ Brunet
46

5% (standardmäßig) des Dateisystems sind für Fälle reserviert, in denen das Dateisystem voll ist, um schwerwiegende Probleme zu vermeiden. Ihr Dateisystem ist voll. Aufgrund des 5% -Puffers geschieht nichts Katastrophales - Root darf diesen Sicherheitspuffer verwenden, und in Ihrem Setup haben Nicht-Root-Benutzer keinen Grund, in dieses Dateisystem zu schreiben.

Wenn Sie Daemons haben, die als Nicht-Root-Benutzer ausgeführt werden, jedoch Dateien in diesem Dateisystem verwalten müssen, kommt es zu Problemen. Ein häufiger solcher Daemon ist named. Ein anderer ist ntpd.

David Schwartz
quelle
1
Auf die Frage, WARUM Ihre Festplatte voll ist, ist 7G wirklich nicht so viel Speicherplatz. Sie scheinen auch alles unter einer Partition / einem Dateisystem ( /) gespeichert zu haben . Dies wird im Allgemeinen als eine schlechte Sache angesehen (denn wenn etwas durcheinander /kommt und die Welt untergeht ), aber Linux-Distributionen tun dies weiterhin, weil es "einfacher" ist. Ich würde von der Suche in starten /var(insb. /var/log) Für große Logfiles. du -hs /(als root) hilft Ihnen dabei, die größten Verzeichnisse zu finden und weist Sie möglicherweise auf das hin, was aufgeräumt werden muss.
Voretaq7
35

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

df -i
Clifford Ilkay
quelle
17

Die meisten Linux-Dateisysteme reservieren 5% Speicherplatz nur für den Root-Benutzer.

Sie können dies mit z

dumpe2fs /dev/sda1 | grep -i reserved

Sie können den reservierten Betrag folgendermaßen ändern:

tune2fs -m 0 /dev/sda1

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

David Goodwin
quelle
8

Ich hatte dieses Problem und war verblüfft darüber, dass das Löschen verschiedener großer Dateien die Situation nicht verbesserte (ich wusste nichts über den 5% -Puffer), obwohl ich hier einige Hinweise hatte

Von root gingen die größten Verzeichnisse auf, die sich durch wiederholtes Ausführen ergaben:

du -sh */ 

bis ich ein verzeichnis für webserver logdateien bekam, die einige absolut massive logs hatten

was ich mit abgeschnitten habe

:>lighttpd.error.log

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

zzapper
quelle
14
Das sollte eigentlich mit "... dann habe ich die Protokollrotation eingerichtet" enden.
Hayalci
hayalci: festgestellt, dass die logrotation auf das falsche verzeichnis zeigte.
zzapper
8

Zusätzlich zu den bereits vorgeschlagenen Ursachen können in einigen Fällen auch folgende auftreten:

  • Eine andere Festplatte wird "über" den vorhandenen Ordner geladen, der mit Daten gefüllt ist
  • du berechnet die ausgegebene Größe der bereitgestellten Festplatte und df zeigt die tatsächlich ausgegebenen Daten an
  • Lösung: Hängen Sie (wenn möglich) alle Nicht-Root-Laufwerke aus und überprüfen Sie die Größe mit du -md 1erneut. Korrigieren Sie die Situation, indem Sie versteckte Ordner an einen anderen Ort verschieben oder an einem anderen Ort einhängen.
Robert Lujo
quelle
Wie finden Sie andere Mount-Punkte als df?
Hogan
@Hogan: Vielleicht würde es helfen, "mount" oder "cat / etc / fstab" zu nennen?
Robert Lujo
5

df -hrundet die Werte. Sogar die Prozentsätze sind gerundet. Lassen Sie das weg -hund Sie sehen feinkörnigere Unterschiede.

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

mailq
quelle
Könnte auch sein, dass ihm die freien Inodes ausgehen. Führen Sie 'df -i' aus, um die Verwendung von Inodes zu erhalten.
Andrew Fall
Er hat keine Informationen vor , dass die Festplatte ist voll. Er denkt nur, dass die Festplatte voll ist. 100% genutzter Speicherplatz ohne Fehler ist nur "praktisch voll".
mailq
1

Ich habe ein großes Update mehrerer Bibliotheken durchgeführt und es gab viele unnötige Bibliotheken und temporäre Dateien, so dass ich im Ordner "/" Speicherplatz freigebe, indem ich Folgendes verwende:

apt-get install -f
sudo apt-get clean

Und leeren Sie Ihren Müll

Aburbanol
quelle
Dies ist ein vernünftiger allgemeiner Ratschlag zur Reduzierung der Festplattennutzung, der jedoch nicht die Frage beantwortet, warum df angibt, dass die Festplatte voll ist, wenn dies nicht der Fall ist.
Andrew Schulman
0

Überprüfen Sie die / lost + found, ich hatte ein System (Centos 7) und einige Dateien in der / lost + found aßen den gesamten Speicherplatz auf

Jude Zhu
quelle
0

Wenn Ihre Partition btrfs ist, ist möglicherweise ein Teilvolumen vorhanden, das Speicherplatz belegt. Ein btrfs-Dateisystem kann viele Subvolumes haben, von denen nur eines gemountet ist. Mit können Sie btrfs subvolume list <dir>alle Subvolumes auflisten und btrfs subvolume delete <dir>/<subvolume>eines löschen. Stellen Sie sicher, dass Sie nicht den standardmäßig bereitgestellten löschen.

user377486
quelle