Die Speicherplatznutzung summiert sich bei df & du nicht auf

13

Ich versuche df -h, Speicherplatz freizugeben. Wenn ich das mache , habe ich ein Dateisystem mit dem Namen / dev / mapper / vg00-var, das angibt, dass 4G, 3,8G verwendet werden und 205M übrig sind.

Das entspricht meinem / var-Verzeichnis.

Wenn ich in / var absteige und tue du -kscxh *, ist die Summe 2.1G

2.1G + 200M frei = 2.3G ... Meine Frage ist also, wo sind die restlichen 1.7G?

Codecraft
quelle
Was du -shx /varheißt das?
Kyle Smith
1
Möglicherweise haben Sie auch Dateien gelöscht, deren Dateihandles geöffnet sind. Das Betriebssystem gibt den Speicherplatz erst frei, wenn die Handles geschlossen sind, aber Sie sehen sie nicht mit "du". Sie können "lsof / var | grep deleted" (oder etwas ähnliches) ausführen, um diese zu sehen. Dies wäre eigentlich keine überraschende Feststellung in / var / log, wenn die Protokolle gedreht werden, der Protokollierungsprozess jedoch nicht ordnungsgemäß ausgeführt wird.
CJC
Ich hatte einige verrückte Protokolldateien gelöscht, es schien, als hätten sie sich nicht gedreht, aber trotzdem hatte ich eine Ein-Wort-E-Mail von einem Freund "Neustart" - dachte, er sei sarkastisch, aber anscheinend nicht :) Ich Habe meinen Speicherplatz wiedergefunden .... Katastrophe abgewendet (vorerst).
Codecraft
@Codecraft Ja, ein Neustart löscht definitiv alle offenen Datei-Handles, obwohl das so ähnlich ist, als würde man ein Ei mit einem Hammer knacken.
CJC
@cjc solange ich bei der yolky goodness bin ...! Irgendwelche Vorschläge, wie ich offene Dateihandles löschen könnte, ohne mein Ei zu hämmern?
Codecraft

Antworten:

20

Wahrscheinlich haben Sie eine gelöschte große Protokolldatei, Datenbankdatei oder ähnliches herumliegen und warten darauf, dass der Prozess die Datei enthält, die sie freigibt.

Unter Linux wird die Verknüpfung der Datei durch Löschen der Datei einfach aufgehoben. Es wird tatsächlich gelöscht, wenn mit dieser Datei keine Dateizugriffsnummern mehr verbunden sind. Wenn Sie also eine 2-GB-Protokolldatei haben, die Sie manuell mit rm löschen, wird der Speicherplatz erst freigegeben, wenn Sie den Syslog-Dämon neu starten (oder ein HUPSignal an ihn senden ).

Versuchen

lsof -n | grep -i deleted

und prüfen Sie, ob noch gelöschte Zombiedateien im Umlauf sind.

Janne Pikkarainen
quelle
Ich konnte Ihren Befehl nicht ausführen, aber das, was Sie sagten, schien zu scheitern - ich hatte einige verrückte Protokolle manuell gelöscht, und am Ende führte ein Neustart dazu, dass der Speicherplatz neu berechnet und korrekt angezeigt wurde.
Codecraft
Es funktionierte für uns mit Apache-Protokollen, die das Verzeichnis / var / log / apache / füllten. Sie müssen also möglicherweise weder Ihren gesamten Server noch Syslog neu starten, sondern nur den Dienst, den Sie in der Ausgabe des obigen Befehls finden.
Yvan
Hatte das gerade selbst. Wir hatten den tomcat6 catalina.out nicht durch logrotate gefangen zu werden, löschten wir es, als es 4Gb erreichte und regelte logrotate. Wochen später fragten wir uns, warum die 4 GB nicht zurückgekommen waren. Dieser lsofBefehl hat gezeigt, dass viele Tomcat-Dateien gelöscht werden müssen. Tomcat wird neu gestartet und plötzlich haben wir wieder jede Menge Platz!
Nick
Endlich eine Antwort, die mir geholfen hat. PostgreSQL war abgestürzt und hatte Verbindungen zu 400 GB (!!!) nicht verknüpfter Dateien auf einer 1-TB-Festplatte offen gelassen. Das Neustarten von Postgres hat das Problem behoben.
Sudo