Ordner ist leer, aber du meldet hohe Nutzung

Ordner ist leer, aber du meldet hohe Nutzung

Ich habe eine 115GBPartition auf meiner Festplatte (die Ausgabe cgdisk /dev/sdaist unten):

Part. #     Size        Partition Type            Partition Name
----------------------------------------------------------------
            1007.0 KiB  free space
   1        499.0 MiB   Windows RE                Basi
   2        100.0 MiB   EFI System                EFI 
   3        16.0 MiB    Microsoft reserved        Micr
   5        43.9 GiB    Linux filesystem          ubuntu-root
   6        43.9 GiB    Linux filesystem          ubuntu-home
   4        114.9 GiB   Linux filesystem          data         <--- this partition
   7        29.5 GiB    Linux filesystem

/dataUnd ich habe diese Partition in meinem gemountet /etc/fstab:

UUID=<drive-uuid>  /data  ext4  defaults  0  0

Wenn ich das mache df -h /data, erhalte ich die folgende Ausgabe:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda4       113G   96G   11G  90% /data

Und wenn ich dues so verwende: du /data -h --max-depth=1 | sort -hr, sehe ich Folgendes:

51G    /data
40G    /data/virtual-box
4.4G   /data/temp
4.1G   /data/manjaro-minikube
1.9G   /data/.nuget
764M   /data/OneDrive
62M    /data/manjaro-lxd
40K    /data/.minikube
16K    /data/lost+found

was, wenn ich mich nicht irre, zeigt, dass /dataes belegt wird 51G, und dann habe ich die Verzeichnisse virtual-box, temp, manjaro-minikube, und, .nugetdie Speicherplatz beanspruchen (die anderen benötigen nicht viel Speicherplatz).

Wenn ich eine lange Auflistung meines Verzeichnisses mache ( ls -alh /data):

total 68K
drwxr-xr-x  10 farzad farzad 4.0K Aug 13 21:47 .
drwxr-xr-x  19 root   root   4.0K Jul 13 10:32 ..
drwx------   2 farzad farzad  16K Mar 22 18:22 lost+found
drwx--x--x  15 root   root   4.0K Aug 20 17:47 manjaro-lxd
drwxr-xr-x   3 farzad farzad 4.0K Jul  3 18:16 manjaro-minikube
drwxrwxr-x   9 farzad farzad 4.0K Jul 30 17:38 .minikube
drwxr-xr-x 202 farzad farzad  16K Aug 17 10:00 .nuget
drwxr-xr-x   3 farzad farzad 4.0K Aug 13 21:47 OneDrive
drwxrwxr-x  16 farzad farzad 4.0K Jun  3 21:45 temp
drwxr-xr-x   6 farzad farzad 4.0K Aug 20 20:21 virtual-box

Ich sehe keine Datei oder etwas, das zu dem 51Ggemeldeten beiträgt /data, daher gehe ich davon aus, dass auf meinem Laufwerk fast leerer Speicherplatz vorhanden ist 65G, aber aus irgendeinem Grund /databelegt das übergeordnete Verzeichnis den Speicherplatz 51Gvon selbst!

Ich habe im Internet recherchiert, aber nichts gefunden. Kann mir bitte jemand sagen, was los ist?


AKTUALISIEREN

Wie in den Antworten vorgeschlagen, habe ich es lsof /data | grep deleted(als Root) ausgeführt, habe aber kein Ergebnis erhalten, obwohl eine Warnung angezeigt wird, bei der ich nicht sicher bin, ob sie relevant ist:

lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.

Antwort1

Ihr /dataWert beträgt 51G. Dies umfasst alle Unterverzeichnisse und Dateien darin. Wenn Sie die von dufür Unterverzeichnisse gemeldeten Größen addieren (und Rundungsprobleme berücksichtigen), erhalten Sie etwa 51G. Wenn reguläre Dateien direkt in vorhanden wären , würden diese ebenfalls /datazum für gemeldeten Wert beitragen ./data

Es wird also dukeine hohe Auslastung gemeldet. Eine dfhohe Auslastung wird durch Folgendes gemeldet: 96GDas Dateisystem ist in Verwendung.

Da /dataes sich um einen Einhängepunkt handelt, erwarten Sie, dass die beiden Werte gleich sind. Die beiden Tools funktionieren jedoch unterschiedlich: duSie durchsuchen Verzeichnisse, addieren die Größe der gefundenen Objekte und dffragen das Dateisystem nach seinem Wissen über den eigenen Status ab.

Solche großen Abweichungen können folgende Ursachen haben:

  • dukonnte nicht auf alle Objekte zugreifen (oder Informationen dazu erhalten). Gab es einen permission deniedFehler?
  • Es liegt eine Inkonsistenz im Dateisystem vor; fsck.ext4aka e2fsckkönnte helfen.
  • (höchstwahrscheinlich) Es gibt mindestens eine Datei, die gelöscht wurde (alle Verzeichniseinträge, die auf den entsprechenden Inode zeigen, wurden entfernt, die Datei erscheint in keiner Verzeichnisliste, dukann also nichts davon wissen), aber sie wird immer noch von einem Prozess verwendet (das Dateisystem behält also die Daten und berücksichtigt sie bei der Meldung an df). Siehediese Antwort,diese Frage.

    Der folgende Befehl sollte solche Dateien und Prozesse finden, die sie verwenden:

    lsof /data | grep deleted
    

    Beispielausgabe:

    some_daemon  …  …  …  …  …  …  …  /data/temp/huge_file (deleted)
    

    huge_fileDas bedeutet, dass das Dateisystem die Datei erst dann wirklich löscht, wenn some_daemones nicht mehr verwendet wird. Beachten Sie, dass der Prozess im Allgemeinen noch an die Datei anhängen oder sie kürzen kann, sodass die Datei größer oder kleiner werden kann. Dies wirkt sich auf das aus df, was gesagt wird, aber nicht auf du.

Antwort2

Es stellte sich also heraus, dass es hier einige Probleme gab (danke @Kamil für die Hilfe bei der Suche):

Obwohl ich zunächst intuitiv davon ausging, dass der von dufür gemeldete Betrag /datadie Summe aller seiner untergeordneten Verzeichnisse (mit einigen Rundungen) ist, habe ich wohl versucht, die Diskrepanzen zwischen dfund zu rechtfertigen, und dachte, dass ich die Ausgabe von für und alle seine untergeordneten Verzeichnisse dusummieren sollte, um dasselbe Ergebnis wie zu erhalten .du/datadf

Das andere Problem, das hauptsächlich die Diskrepanzen verursacht, lag an meiner Konfiguration /etc/fstab:

UUID=<uuid>  /data  ext4  defaults  0  0
                                       ^
                                     ISSUE

Als ich mein erstellt habe /etc/fstab, dachte ich, dass ich meinen Start nicht durch das Aktivieren von Dateisystemprüfungen ( fsck) auf meinem Mount verlängern müsste, daher 0für das sechste Feld, aber wie sich herausstellte, führte dies dazu, dass Inodes nicht bereinigt wurden, was daher den GROßEN Unterschied zwischen dfund verursachte du.

Wenn wir uns also ansehen man 5 fstab, können wir erkennen, dass zum Aktivieren der Prüfungen das Root-Dateisystem den Wert haben muss 1und andere Dateisysteme den Wert haben müssen 2. Daher habe ich die Zeile wie folgt geändert:

UUID=<uuid>  /data  ext4  defaults  0  2

Und nach dem Neustart wurden viele Probleme gemeldet fsck. Ich habe beschlossen, sie zu beheben. Jetzt erscheint die Ausgabe von du /data -h --max-depth=1 | sort -hr:

28G    /data
16G    /data/virtual-box
4.5G   /data/temp
4.1G   /data/manjaro-minikube
1.9G   /data/.nuget
824M   /data/OneDrive
64M    /data/manjaro-lxd
40K    /data/.minikube
16K    /data/lost+found

Und Ausgabe von df /data -h:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda4       113G   28G   80G  26% /data

Es ist erwähnenswert, dass ich im Vergleich zu meiner ursprünglichen Frage einige Dateien entfernt habe (daher 28Gdie Verwendung anstelle von 51G), aber das Gute ist, dass sowohl als duauch dfdenselben Wert melden :)

Antwort3

Ihr Befehl sortiert die Ergebnisse vom höchsten zum niedrigsten Wert. Der höchste Wert ist dergesamtDer von verwendete Speicherplatz /data, nicht der von ihm selbst verwendete Speicherplatz.

verwandte Informationen