it-swarm.com.de

df unter Linux zeigt nach dem Entfernen der Datei nicht den richtigen freien Speicherplatz an

Ich habe Dateiserver, die zum Speichern von Dateien verwendet werden. Dateien können sich dort eine Woche oder ein Jahr lang befinden. Wenn ich Dateien vom Server entferne, spiegelt der Befehl df leider nicht den freigegebenen Speicherplatz wider. Schließlich wird der Server voll (df zeigt 99% an), und mein Skript sendet dort keine weiteren Dateien, außer dass möglicherweise ein paar Dutzend GB freier Speicherplatz vorhanden sind.

Ich habe das Flag noatime auf den bereitgestellten Partitionen, wenn dies einen Unterschied macht.

157
user11350

Durch das Löschen des Dateinamens wird die Datei nicht gelöscht. Ein anderer Prozess hält die Datei offen, sodass sie nicht gelöscht wird. Starten Sie diesen Prozess neu oder beenden Sie ihn, um die Datei freizugeben.

Verwenden

lsof +L1

um herauszufinden, welcher Prozess eine gelöschte (nicht verknüpfte) Datei verwendet.

249

wie Ignacio erwähnt, wird durch das Löschen der Datei der Speicherplatz erst freigegeben, wenn Sie die Prozesse löschen, für die offene Handles für diese Datei vorhanden 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 wurde gelöscht, um den Prozess zu identifizieren, in dem sich die Datei befindet

[[email protected] log]$ /usr/sbin/lsof |grep deleted
Java       8859   hudson    1w      REG              253,0 3662503356    7578206 /crucible/data/current/var/log/fisheye.out (deleted)

Führen Sie dann Folgendes aus:

cd /proc/PID/fd

dann

[[email protected] fd]$ ls -l |grep deleted
total 0
l-wx------ 1 hudson devel 64 Feb  7 11:48 1 -> /crucible/data/current/var/log/fisheye.out (deleted)

Die "1" ist der Dateideskriptor. Geben Sie nun "> FD" ein, um diesen Speicherplatz zurückzugewinnen

> 1

Möglicherweise müssen Sie den Vorgang wiederholen, wenn andere Prozesse die Datei enthalten.

29
Adrián Deccico

Eine Möglichkeit besteht darin, dass die von Ihnen gelöschten Dateien mehr Verweise 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 entweder an (Eintrag mit dem Namen Links) oder führen Sie sie mit ls -l aus (sollte die zweite Spalte sein).

Wenn sich herausstellt, dass auf die Dateien an anderer Stelle verwiesen wird, müssen Sie wahrscheinlich die Datei (en) ls -i, 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 auch im selben Dateisystem zu bleiben).

8

Wenn die Partition so konfiguriert wurde, dass ein bestimmter Teil des Speicherplatzes nur für die Root-Nutzung reserviert wird, enthält df diesen Speicherplatz nicht als verfügbar.

[[email protected]]# df -h
Filesystem            Size  Used Avail Use% Mounted on
...
/dev/optvol           625G  607G     0 100% /opt
...

Selbst nachdem Speicherplatz durch Löschen von Dateien/Verzeichnissen wiederhergestellt 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 Nicht-Root-Benutzer zu erstellen.

Zusätzlich können Sie die Dateisystemkonfiguration überprüfen, indem Sie ausführen

tune2fs -l <device> | egrep "Block count|Reserved block count

und Berechnung des tatsächlichen Prozentsatzes selbst.

Führen Sie aus, um die für die reine Root-Verwendung reservierte Festplatte% zu ändern

tune2fs -m <percentage> <device>
6
luka5z

Die Datei wird durch den Vorgang, der sie öffnet, weiterhin gesperrt. Führen Sie die folgenden Schritte aus, um Speicherplatz freizugeben:

  1. Lauf Sudo lsof | grep deleted und sehen, welcher Prozess die Datei hält. Beispielergebnis:

    $ Sudo lsof | grep deleted
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
    cron     1623 root    5u   REG   0,21        0 395919638 /tmp/tmpfPagTZ4 (deleted)
    
  2. Beende den Prozess mit Sudo kill -9 {PID}. Im obigen Beispiel beträgt die PID 1623.

    $ Sudo kill -9 1623
    
  3. Führen Sie df aus, um zu überprüfen, ob bereits Speicherplatz frei ist. Wenn es noch voll ist, müssen Sie möglicherweise einige Sekunden warten und erneut prüfen.

4
Aminah Nuraini

Da ich weiß, dass eine Menge von Ihnen dies für Redhat in /var und gzipping-Dateien, die erwarten, dass FS schrumpft, aber stattdessen wächst), stellen Sie einfach sicher, dass Sie den Syslog-Neustart durchführen

lsof -v file

würde dir das sowieso zeigen.

1
user1802263

Die anderen Antworten sind richtig: Wenn Sie eine Datei löschen und kein Speicherplatz freigegeben wird, liegt dies normalerweise entweder daran, dass die Datei noch geöffnet ist, oder daran, dass andere Hardlinks vorhanden sind.

Verwenden Sie zur Unterstützung bei der Fehlerbehebung ein Tool, das Ihnen sagt, wo der Speicherplatz des Laufwerks belegt ist: Mit du können Sie sich einen Überblick über den Speicherplatz des Speicherplatzes verschaffen. Verwenden Sie noch besser ein grafisches Tool wie xdiskusage (es gibt viele davon), um den Täter zu finden. Mit xdiskusage und Freunden können Sie einen Drilldown in die größten Weltraumschweine durchführen, um herauszufinden, wohin der Weltraum geht.

Auf diese Weise finden Sie schnell Dateien, die aufgrund eines zweiten Hardlinks noch Speicherplatz belegen. Es wird auch Speicherplatz angezeigt, der von gelöschten, aber geöffneten Dateien belegt ist (as (Berechtigung verweigert), glaube ich, da der Dateiname nicht gelesen werden kann).

1
sleske

Ich benutze EXT2, FSCK hat mir in dieser Situation geholfen. Versuchen Sie jetzt, Shut herunterzufahren. Nach einigen Neustarts und fsck sehe ich halb genutzten Speicherplatz.

0
Marcellus

Eine weitere Option: Die Festplatte ist möglicherweise voll, da kontinuierlich Daten erstellt werden: Protokolle, Kerne und dergleichen. Es ist möglich, dass der Platz tatsächlich freigegeben wird, aber sofort voll ist. Ich habe tatsächlich einen solchen Fall gesehen. df gibt in diesem Fall einfach kein Lochbild. Verwenden Sie du, um mehr zu erfahren.

0
Chen Levy