Linux-Dateisystem; Unterschied in der Größenberechnung mit df & du

8

Wenn ich es starte df, zeigt es, dass das Root-Gerät voll ist.

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             9.9G  9.4G     0 100% /

Ich habe mir die inodeVerwendung angesehen und es ist ziemlich viel Platz für das Root-Gerät verfügbar

Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1               640K    103K    538K   16% /

Wenn ich den duBefehl ausführe, wird jedoch angezeigt, dass ich nur 2Gaus verwendet habe 9.9G.

ip-XXX-XXX-XXX-XXX:/$ du -xh --max-depth=1
14M ./etc
4.0K ./mnt
96K ./tmp
3.5M ./bin
0   ./sys
964K ./boot
4.0K ./srv
0   ./dev
55M ./lib
25M ./root
1.1G ./usr
4.0K ./opt
846M ./var
4.3M ./sbin
23M ./home
16K ./lost+found
0   ./proc
2.0G .

Es macht mich einfach verrückt und interessant. Dies ist ein großes Problem für uns, da die Root-Festplatte /voll ist und einige Funktionen auf unserer Website fehlschlagen.

Bitte helfen Sie mir, dieses Problem zu lösen (auch zu verstehen).

Vielen Dank.

Rakesh Sankar
quelle
2
Weitere Informationen zu Verwirrung über freien Linux-Speicherplatz und anderen +df +duFragen unter Unix und Linux .
Gilles 'SO - hör auf böse zu sein'
@ Gilles wie du gesagt hast, ich bin gelaufen du -x /und ich sehe, dass nur 2G verwendet wird und ich habe die Inode-Größe berechnet, die ist 160M. Es hat mir geholfen, das Zeug zu verstehen, aber ich möchte dieses Problem nur lösen.
Rakesh Sankar
Bist du duals root gelaufen ? Andernfalls kann nur über die Dateien berichtet werden, auf die Sie zugreifen können.
Gilles 'SO - hör auf böse zu sein'
@ Gilles Ich laufe alsroot
Rakesh Sankar
Ich habe hier außer dem großartigen ncduProgramm, das zur Visualisierung der Festplattennutzung beiträgt, nicht viel hinzuzufügen .
Rob

Antworten:

4

Wenn Dateien in * nix gelöscht werden, bleiben sie auf der Festplatte (und belegen Speicherplatz), solange sie von einem Prozess geöffnet werden. Es ist ziemlich üblich, dies zu nutzen, um temporäre Dateien zu "sichern", indem sie mit einer kleinen Größe erstellt, gelöscht und dann die gelöschte Datei zum Speichern von Daten verwendet werden, ohne dass andere Prozesse (leicht) darauf zugreifen müssen Der Speicherplatz in gelöschten Dateien kann sehr groß werden, wenn beispielsweise eine temporäre Datenbank oder eine Multimedia-Bearbeitungssitzung auf diese Weise behandelt wird. Eine andere Möglichkeit, wie Sie so viel "verlorenen" Speicherplatz haben könnten, wäre, wenn das System (mehrmals) aktualisiert wurde, ohne Programme neu zu starten oder neu zu starten, was dazu führt, dass alle Ihre alten .so-Bibliotheken von Programmen geöffnet werden, die vor dem gestartet wurden Upgrade und laufen noch.

dfDer von diesen Dateien verwendete Speicherplatz wird angezeigt, da nur angezeigt wird, wie viel Speicherplatz auf dem Gerät zugewiesen ist. Er wird dujedoch nicht angezeigt, da keine entsprechenden Verzeichniseinträge vorhanden sind.

Ein solcher "versteckter" verwendeter Speicherplatz kann nur freigegeben werden, wenn Prozesse, die gelöschte Dateien geöffnet haben, diese schließen. Sie können diese Prozesse mit dem fuserBefehl finden und beenden (oder für viele Daemons ein Signal senden, das sie auffordert, geöffnete Dateien zu schließen und erneut zu öffnen).

Dave Sherohman
quelle
danke, gute Infos, etwas (mehr), das ich heute verstehe. Aber um einen hiddenverwendeten Speicherplatz zu finden , versuche ich, den fuserBefehl auszuführen , um alle Dateien anzuzeigen , die von einem Prozess verwendet werden, aber nicht verknüpft sind - ich konnte keinen finden. Haben Sie einen Befehl oder eine Anweisung, die mich dazu bringt, ihn zu finden? Dies ist der Befehl, den ich benutzefuser -v -a /
Rakesh Sankar
Ich musste es neu starten, um den versteckten Speicherplatz zu entfernen, aber ich konnte keine geeignete Lösung finden, um diese versteckten Dateien zu entfernen.
Rakesh Sankar
1

Es gab Zeiten, in denen, wenn die Festplatte voll wird, bis zum Neustart / erneuten Bereitstellen verwirrt werden kann, dass die Festplatte noch voll ist, selbst wenn Sie eine Menge Dateien gelöscht haben.

BugFinder
quelle
Ich kann nicht neu starten, da es sich um eine Produktionsstätte handelt. Aber ich suche nach einer Lösung, die mir helfen kann, diesen verborgenen Raum zu finden und zurückzubringen.
Rakesh Sankar
Es ist vielleicht Produktion, aber manchmal ist ein Neustart die einzige Antwort. Das ist das unglückliche Problem, dass es Ihre Root-Festplatte ist und Ihr gesamtes Betriebssystem darauf ist. Aus diesem Grund befürworten viele die Verwendung von tmp, var, home usw. auf anderen Festplatten, da diese dann erneut bereitgestellt werden können. Es scheint häufiger zu sein, dass das Betriebssystem nicht erkennt, dass der Speicherplatz für die Root-Festplatte verfügbar ist.
BugFinder
1

Auf meiner Seite habe ich syslogd einfach neu gestartet, um den Speicherplatz zurückzugewinnen. Ich hatte 3 GB vermisst! Mein Server war 250 Tage alt.

Vincent Martineau
quelle
0

Es gibt eine Möglichkeit, Speicherplatz zu bereinigen, ohne die Anwendung neu zu starten. Hier sind die Details:

  1. fooAngenommen , Sie führen einen Prozess aus und erstellen eine 2-GB-Datei mit dem Namen abc.log. Angenommen, dieses abc.log wird von einer anderen Person gelöscht.

  2. Holen Sie sich foodie PID (sagen wir 123). Es /proc/123/fdwird also eine Liste der Dateideskriptoren angezeigt, die von geöffnet wurden foo. Eine mit abc.log wird als gelöscht angezeigt. Sagen wir fdvon abs.log ist 111. Wenn Sie laufen less /proc/123/fd/111, es wird Ihnen immer noch alles , was 2 GB Daten zeigen.

  3. Ausführen echo " " > /proc/123/fd/111. Dadurch wird der Inhalt mit einer leeren Zeichenfolge überschrieben. Wenn Sie nach diesem Befehl versuchen df, werden weitere 2 GB angezeigt, die durch Bereinigen von abc.log wiederhergestellt wurden.

Das ist es. Ich habe dies unter CentOS versucht und es funktioniert.

Kaustubh Sathe
quelle
Dies ist eine nützliche Sache zu wissen. Aber es ist keine Antwort auf die Frage.
Isaac Rabinovitch
Entschuldigung, meine Ans war mehr auf die Bereinigung des Speicherplatzes ausgerichtet, wenn Sie die Prozess-ID kennen, die die Datei gelöscht hat. In diesem speziellen Fall müssen Sie alle Dateien in / proc / [0-9] * / fd durchgehen, die gelöschten Dateien durchsuchen und der oben genannten Logik folgen.
Kaustubh Sathe
Wenn Sie wirklich neugierig sind, welche Datei das Speicherplatzleck verursacht hat, bereinigen Sie jeweils die gelöschte Datei, überprüfen Sie jedes Mal die df-Ausgabe und protokollieren Sie diese Informationen.
Kaustubh Sathe