Ich habe eine 115GB
Partition auf meiner Festplatte (die Ausgabe cgdisk /dev/sda
ist 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
/data
Und 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 du
es 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 /data
es belegt wird 51G
, und dann habe ich die Verzeichnisse virtual-box
, temp
, manjaro-minikube
, und, .nuget
die 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 51G
gemeldeten beiträgt /data
, daher gehe ich davon aus, dass auf meinem Laufwerk fast leerer Speicherplatz vorhanden ist 65G
, aber aus irgendeinem Grund /data
belegt das übergeordnete Verzeichnis den Speicherplatz 51G
von 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 /data
Wert beträgt 51G
. Dies umfasst alle Unterverzeichnisse und Dateien darin. Wenn Sie die von du
fü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 /data
zum für gemeldeten Wert beitragen ./data
Es wird also du
keine hohe Auslastung gemeldet. Eine df
hohe Auslastung wird durch Folgendes gemeldet: 96G
Das Dateisystem ist in Verwendung.
Da /data
es sich um einen Einhängepunkt handelt, erwarten Sie, dass die beiden Werte gleich sind. Die beiden Tools funktionieren jedoch unterschiedlich: du
Sie durchsuchen Verzeichnisse, addieren die Größe der gefundenen Objekte und df
fragen das Dateisystem nach seinem Wissen über den eigenen Status ab.
Solche großen Abweichungen können folgende Ursachen haben:
du
konnte nicht auf alle Objekte zugreifen (oder Informationen dazu erhalten). Gab es einenpermission denied
Fehler?- Es liegt eine Inkonsistenz im Dateisystem vor;
fsck.ext4
akae2fsck
kö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,
du
kann 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 andf
). 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_file
Das bedeutet, dass das Dateisystem die Datei erst dann wirklich löscht, wennsome_daemon
es 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 ausdf
, was gesagt wird, aber nicht aufdu
.
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 du
für gemeldete Betrag /data
die Summe aller seiner untergeordneten Verzeichnisse (mit einigen Rundungen) ist, habe ich wohl versucht, die Diskrepanzen zwischen df
und zu rechtfertigen, und dachte, dass ich die Ausgabe von für und alle seine untergeordneten Verzeichnisse du
summieren sollte, um dasselbe Ergebnis wie zu erhalten .du
/data
df
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 0
für das sechste Feld, aber wie sich herausstellte, führte dies dazu, dass Inodes nicht bereinigt wurden, was daher den GROßEN Unterschied zwischen df
und 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 1
und 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 28G
die Verwendung anstelle von 51G
), aber das Gute ist, dass sowohl als du
auch df
denselben 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.