Ich habe Dateiserver, die zum Speichern von Dateien verwendet werden. Die Dateien können sich dort eine Woche oder ein Jahr lang befinden. Leider df
spiegelt der Befehl beim Entfernen von Dateien vom Server nicht den freigewordenen Speicherplatz wider. Schließlich ist der Server also voll ( df
zeigt 99% an), und mein Skript sendet keine weiteren Dateien dorthin, außer dass möglicherweise ein paar Dutzend GB freier Speicherplatz vorhanden sind.
Ich habe ein noatime
Flag auf den gemounteten Partitionen, wenn das einen Unterschied macht.
linux
filesystems
disk-space-utilization
Aminah Nuraini
quelle
quelle
Antworten:
Durch Löschen des Dateinamens wird die Datei nicht wirklich gelöscht. Ein anderer Prozess hält die Datei geöffnet, sodass sie nicht gelöscht wird. Starten Sie diesen Prozess neu oder beenden Sie ihn, um die Datei freizugeben.
Verwenden
um herauszufinden, welcher Prozess eine gelöschte (nicht verknüpfte) Datei verwendet.
quelle
Wie Ignacio erwähnt, wird durch das Löschen der Datei der Speicherplatz erst freigegeben, wenn Sie die Prozesse löschen, für die für diese Datei Handles geöffnet sind.
Trotzdem können Sie den Speicherplatz zurückfordern, ohne die Prozesse zu beenden. Sie müssen lediglich die Dateideskriptoren entfernen.
Führen Sie zuerst lsof | aus grep gelöscht, um den Prozess zu identifizieren, der die Datei enthält
Dann führen Sie aus:
dann
Die "1" ist der Dateideskriptor. Geben Sie nun "> FD" ein, um diesen Speicherplatz freizugeben
Möglicherweise müssen Sie den Vorgang wiederholen, wenn die Datei in anderen Prozessen gespeichert ist.
quelle
> FD
tun?>
Befehl einen Namen? ich musste von zsh auf bash umsteigen, um es nutzen zu können. Ist es möglich, es auf zsh auszuführen?Eine Möglichkeit ist, dass die gelöschten Dateien mehr Referenzen im Dateisystem haben. Wenn Sie Hardlinks erstellt haben, verweisen mehrere Dateinamen auf dieselben Daten, und die Daten (der tatsächliche Inhalt) werden erst dann als frei / verwendbar markiert, wenn alle Verweise darauf entfernt wurden. Bevor Sie Dateien löschen, geben Sie sie an (Eintrag mit dem Namen Links) oder geben Sie ls -l ein (sollte die zweite Spalte sein).
Wenn sich herausstellt, dass auf die Dateien an anderer Stelle verwiesen wird, müssen Sie vermutlich die Datei (en) mit ls -i suchen, um die Inode-Nummer zu finden, und dann mit -inum <Inode-Nummer> suchen, um die zu finden andere Verweise auf diese Datei (Sie möchten wahrscheinlich auch -mount verwenden, um im selben Dateisystem zu bleiben).
quelle
Die Datei ist immer noch durch den Prozess gesperrt, der sie öffnet. Führen Sie die folgenden Schritte aus, um Speicherplatz freizugeben:
Führen Sie aus,
sudo lsof | grep deleted
und überprüfen Sie, welcher Prozess die Datei enthält. Beispielergebnis:Beenden Sie den Vorgang mit
sudo kill -9 {PID}
. In obigem Beispiel ist die PID 1623.Führen Sie
df
den Befehl aus, um zu überprüfen, ob bereits Speicherplatz verfügbar ist. Wenn es immer noch voll ist, müssen Sie möglicherweise einige Sekunden warten und es erneut überprüfen.quelle
Wenn die Partition so konfiguriert wurde, dass ein bestimmter Teil des Speicherplatzes nur für die Root-Verwendung reserviert
df
wird , wird dieser Speicherplatz nicht als verfügbar angegeben.Auch nachdem Speicherplatz durch Löschen von Dateien / Verzeichnissen freigegeben wurde, kann ein Benutzer ohne Rootberechtigung nicht auf eine bestimmte Partition schreiben.
Sie können leicht überprüfen, ob dies der Fall ist, indem Sie versuchen, eine Datei auf einem Gerät als Root- und als Nicht-Root-Benutzer zu erstellen.
Zusätzlich können Sie die Dateisystemkonfiguration überprüfen, indem Sie ausführen
und Berechnen der tatsächlichen% auf eigene Faust.
Führen Sie den folgenden Befehl aus, um die für die Verwendung als Root reservierte Festplatte% zu ändern
quelle
Die anderen Antworten sind richtig: Wenn Sie eine Datei löschen und der Speicherplatz nicht freigegeben wird, liegt dies in der Regel daran, dass die Datei noch geöffnet ist oder andere Hardlinks vorhanden sind.
Verwenden Sie zur Fehlerbehebung ein Tool, das angibt, wo der Speicherplatz verbraucht wird: Mit diesem Tool können Sie
du
sich einen Überblick über den Speicherplatz verschaffen. Verwenden Sie noch besser ein grafisches Tool wie xdiskusage (es gibt viele davon), um den Täter aufzuspüren. Mit xdiskusage und Freunden können Sie die größten Weltraumfresser durchsuchen, um herauszufinden, wohin der Weltraum geht.Auf diese Weise finden Sie schnell Dateien, die aufgrund eines zweiten Hardlinks noch Speicherplatz belegen. Es wird auch den von gelöschten, aber geöffneten Dateien belegten Platz anzeigen (wie (Erlaubnis verweigert), glaube ich, da es den Dateinamen nicht lesen kann).
quelle
Da ich weiß, dass eine
/var
Menge von Ihnen dies für RedHat-In- und Gzipping-Dateien tut, die eine Verkleinerung des FS erwarten, aber stattdessen größer werden, stellen Sie einfach sicher, dass Sie einen Neustart des Syslog-Dienstes durchführen. undwürde dir das sowieso zeigen.
quelle
Eine weitere Option: Die Festplatte ist möglicherweise aufgrund eines Prozesses voll, bei dem kontinuierlich Daten erstellt werden: Protokolle, Kerne und dergleichen. Es ist möglich, dass tatsächlich Speicherplatz freigegeben wird, der jedoch sofort voll ist. Ich habe tatsächlich einen solchen Fall gesehen.
df
In diesem Fall ergibt sich einfach kein Bild. Verwenden Siedu
, um mehr zu erfahren.quelle
Ich benutze EXT2, FSCK hat mir in dieser Situation geholfen. Versuchen Sie shudown -F jetzt, nach einigen Neustarts und Fscks, sehe ich die Hälfte des verwendeten Speicherplatzes.
quelle
Um zu überprüfen, welche gelöschten Dateien Speicherplatz belegt haben, geben Sie den Befehl ein
Es werden die gelöschten Dateien angezeigt, die Speicher enthalten.
Beende dann den Prozess mit pid oder name
Überprüfen Sie jetzt, ob Sie den gleichen Speicher haben
Wenn nicht, geben Sie den folgenden Befehl ein, um festzustellen, welche Datei den Speicher belegt
Erwähnen Sie eine beliebige Größe, die angibt, welche Dateien über der Schwellengröße liegen, und löschen Sie die Datei. Der Speicher bleibt erhalten
quelle
Öffnen Sie das Terminal. Versuchen Sie diesen Befehl. und löschen Sie Ihre Datei
quelle