
df -h
Drucke:
Filesystem Size Used Avail Use% Mounted on
/dev/root 59G 6.6G 50G 12% /
devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 2.0G 9.0M 1.9G 1% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/mmcblk0p1 253M 54M 199M 22% /boot
tmpfs 391M 0 391M 0% /run/user/1000
während Folgendes ncdu /
gedruckt wird:
Total disk usage: 1.8 GiB Apparent size: 1.8 GiB Items: 176500
Warum meldet einer, dass 6,6+ GiB verwendet werden, während der andere nur meldet 1.8 GiB
?
Antwort1
Die Ausgabe von df
basiert auf Statistiken auf Dateisystemebene, während ncdu
(und ein regulärer du
) ihre Ergebnisse durch Durchsuchen von Verzeichnissen, Lesen der Größe einzelner Dateien und Zusammenfassen dieser Ergebnisse generieren.
Wenn die du
-style-Befehle als Nicht-Root-Benutzer ausgeführt werden, haben sie nicht unbedingt vollen Zugriff auf alle Verzeichnisse und können daher möglicherweise nicht alles sehen (verwenden Sie sudo ncdu
in diesem Fall).
Versuchen Sie, die Ergebnisse auszuführen du -hs /
und mit der von gemeldeten „Gesamtdatenträgernutzung“ zu vergleichen ncdu /
. Sie werden möglicherweise feststellen, dass die Ergebnisse ähnlich sind … und bei werden du
Ihnen möglicherweise auch Meldungen über eine Reihe von Verzeichnissen angezeigt, auf die der Befehl nicht zugreifen kann und die er daher nicht berücksichtigt. Dasselbe gilt wahrscheinlich für ncdu
, aber es verbirgt einfach die Fehlermeldungen.
Außerdem scheint es mir, dass es ncdu
möglicherweise nicht aktualisiert wurde, um die virtuellen Dateisysteme moderner Linux-Distributionen zu verstehen, und dadurch verwirrt werden könnte. Auf meinem Debian 10-System ncdu /
wird Folgendes gemeldet:
Total disk usage: 75.6 GiB Apparent size: 128.1 TiB Items: 469143
In meinem Fall ist die „Scheinbare Größe“ eindeutig unsinnig und nutzlos. Die „Gesamtdatenträgernutzung“ entspricht ungefähr dem, was ich mit du -hs /
… erhalte, aber da darin eine Reihe von RAM-basierten virtuellen Dateisystemen ( devtmpfs
, tmpfs
) enthalten sind, ist diese Zahl wahrscheinlich auch nicht sehr nützlich.
Wenn ich den Befehl jedoch auf nur ein Dateisystem beschränke (z. B. ncdu -x /
), erhalte ich anscheinend sinnvollere Ergebnisse, die du -shx /
innerhalb eines Rundungsfehlers auch mit der Ausgabe von übereinstimmen, sowie mit der Ausgabe von , df -h
wenn ich bedenke, dass ein Dateisystem eventuell etwas Speicherplatz für seine internen Metadaten benötigt.
Eine weitere mögliche Fehlerquelle wäre die Verwendung erweiterter Dateisystemfunktionen wie BTRFS-Dateisystem-Snapshots. Sicher, Sie haben möglicherweise nur 1,8 GiB an Dateien auf Ihrem Root-Dateisystem, aber wenn das Dateisystem auch zwei Snapshots seiner vorherigen Zustände enthält, kann die Gesamtmenge an belegtem Speicherplatz bis zu dreimal so groß sein wie die Summe der Dateigrößen, die Sie (und jeder du
-ähnliche Befehl) erwarten würden.
Da der df
Befehl seine Informationen durch Abfragen des Dateisystemtreibers erhält, könnte der von ihm gemeldete größere „verwendete“ Wert die Snapshots enthalten, die andernfalls unsichtbar sein könnten, bis mit der richtigen Methode auf sie zugegriffen wird.