"Kein Platz mehr auf dem Gerät", df zeigt eine Diskrepanz an

15

Vor ein paar Stunden hat sich meine Root-Partition gefüllt, ich habe Dateien von ihr weggeschoben und df meldet:

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/hda1             183G  174G     0 100% /

Es sollten also 9 GB frei sein, aber es wird gemeldet, dass 0 vorhanden ist und die Verwendung immer noch bei 100% liegt.

Ich habe als root getestet, zB

# echo test >a ; cat a
test

es funktioniert wie erwartet; Als normaler Benutzer erhalte ich jedoch immer noch den Fehler:

$ echo test >a ; cat a
bash: echo: write error: No space left on device

Das Stammverzeichnis, in dem ich den positiven Test durchgeführt habe, und mein Stammverzeichnis befinden sich auf derselben Partition. Der Eintrag für fstab lautet:

/dev/hda1 / ext3 noatime,defaults,errors=remount-ro 0 1
Kennzeichen
quelle

Antworten:

34

Die meisten Dateisysteme reservieren einen bestimmten Prozentsatz für root, sodass Sie sich weiterhin als root anmelden und Probleme mit dem Speicherplatz beheben können. Normalerweise sind dies 5%. 9 GB sind ungefähr 5% von 183 GB, dies wäre also sinnvoll. Mit tune2fs können Sie sehen, wie viel reserviert ist:

# tune2fs -l /dev/sda1 | grep -i reserved
Reserved block count:     936488
Reserved GDT blocks:      1019
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)

Sie können es mit ändern

# tune2fs -m 3 /dev/sda1
tune2fs 1.41.9 (22-Aug-2009)
Setting reserved blocks percentage to 3% (561893 blocks)

Bei modernen großen Laufwerken sind 5% wahrscheinlich etwas zu hoch, und Sie möchten sie wahrscheinlich niedriger einstellen. Sie möchten es nicht auf Null setzen.

David Pashley
quelle
1
Ich kann nicht glauben, dass ich das nicht wusste. Ich sage lieber nicht, wie lange ich Linux schon benutze ...
markieren Sie den
@nfm Hey, ich mache seit Jahren grundlegende Linux-Administration auf Heimboxen und habe noch nie davon gehört. +1 für tolle Informationen :-)
Topher Fangio
5

im with bob, versuche df -i, wenn du zum Beispiel ein paar kranke Ausgabecrontabs hast, kann dein / var / spool / clientmqueue / -Verzeichnis voll werden

CDATA
quelle
3

Schauen Sie sich auch INODES an. Wenn Sie in einer "Vanilla" -Installation zu viele kleine Dateien haben, können diese Inodes, jedoch keinen Speicherplatz belegen. Sie werden feststellen, dass Sie über ausreichend Speicherplatz verfügen. Da Ihre Inodes jedoch voll sind, können Sie diesen Speicherplatz nicht verwenden.

Bob Rivers
quelle
3
Die meisten modernen Unices haben selbst auf kleinen Dateisystemen eine sehr große Anzahl von Inodes. Es ist manchmal ein Problem, aber da der Benutzer die Datei c überhaupt erstellen kann, ist es unwahrscheinlich, dass es sich um ein Inode-Problem handelt. (Verzeichniseinträge erfordern Inodes, auch wenn sie keinen Platz benötigen).
Chris
2

"Standardmäßig hat jedes Dateisystem in Unix etwas Speicherplatz für den Superuser (Root). Dies bedeutet, dass kein regulärer Unix-Benutzer Ihr Dateisystem zu 100% ausfüllen kann und immer genug Speicherplatz zur Verfügung steht, um die normale Funktion fortzusetzen. "

Von: http://www.unixtutorial.org/commands/tune2fs/

Dave P.
quelle
1

Eine andere Sache, die überprüft werden muss, ist, ob sich in diesem Dateisystem offene Dateien befinden (insbesondere Protokolle). Durch das Löschen von Dateien wird der Speicherplatz auf der Festplatte erst gelöscht, wenn die Datei tatsächlich geschlossen wird.

Chris Anderson
quelle
0

Ich wette, 1 $, dass Clyde die Antwort hat. Ein Prozess hat eine Datei auf diesem Gerät geöffnet. Unter Linux wird die Datei erst wirklich entfernt, wenn der Prozess, der sie geöffnet hält, sie loslässt.

Ich würde anfangen mit: lsof | grep hda1

Greeblesnort
quelle