Login
Newsletter
Mo, 16. Januar 2012, 15:00

Größenverteilung von Dateien ermitteln

Mit »fsstats« kann man herausfinden, wie die Größen der Dateien in einem Verzeichnisbaum verteilt sind.

Seit kurzer Zeit kann das Dateisystem ext4 Blockgrößen von mehr als 4 KB nutzen. In Linux 3.2 wurde die Funktionalität eingebaut, dass das Dateisystem auch mit Blockgrößen bis zu 1 MB erzeugt werden kann, was die Zeit für die Allokierung neuer Blöcke signifikant reduziert. Die neue Option, die nicht mit älteren Kerneln kompatibel ist, sollte offensichtlich nur für Dateisysteme verwendet werden, auf denen ausschließlich große Dateien liegen. Damit stellt sich nun die Frage: Habe ich Verzeichnisse, in denen die neue Funktionalität etwas bringt, und welche Blockgröße sollte ich wählen?

Auskunft darüber könnte das Java-Programm JDiskReport geben, wenn es funktionieren würde. Bei mir tat es das aber nicht - zumindest nicht auf NFS-gemounteten Dateisystemen. Doch es gibt noch eine Alternative. Das Programm fsstats mag optischer weniger hermachen, aber es hat einen unschlagbaren Vorteil: es funktioniert.

fsstats wird nach dem Herunterladen entpackt; das Archiv enthält nur drei Dateien. Eine davon ist das Programm selbst. Es ist in Perl implementiert und wird im einfachsten Fall folgendermaßen aufgerufen:

./fsstats ~/music > out.txt

Wir leiten die Ausgabe in eine Datei um, weil sie recht lang ist, auch wenn uns nicht alles davon interessiert. Mitten in der Datei, kurz nach dem Beginn des Abschnitts BEGIN NORMAL, findet man ein Histogramm der Größenverteilung der Dateien. Die Dateien sind dabei in Größenklassen eingeordnet, die in Zweierpotenzen zunehmen. Das ist genau das, was wir suchten, denn die Blockgrößen von ext4 müssen ebenfalls Zweierpotenzen sein.

Ein Beispiel für das Histogramm:

count=15066 avg=10448.17 KB
min=2.07 KB max=220337.03 KB
[     2-     4 KB):    14 ( 0.09%) (  0.09% cumulative)        47.27 KB ( 0.00%) (  0.00% cumulative)
[     4-     8 KB):   126 ( 0.84%) (  0.93% cumulative)       773.35 KB ( 0.00%) (  0.00% cumulative)
[     8-    16 KB):    62 ( 0.41%) (  1.34% cumulative)       608.87 KB ( 0.00%) (  0.00% cumulative)
[    16-    32 KB):    21 ( 0.14%) (  1.48% cumulative)       509.66 KB ( 0.00%) (  0.00% cumulative)
[    32-    64 KB):     5 ( 0.03%) (  1.51% cumulative)       256.54 KB ( 0.00%) (  0.00% cumulative)
[    64-   128 KB):    13 ( 0.09%) (  1.60% cumulative)      1108.60 KB ( 0.00%) (  0.00% cumulative)
[   128-   256 KB):    21 ( 0.14%) (  1.74% cumulative)      4156.63 KB ( 0.00%) (  0.00% cumulative)
[   256-   512 KB):    33 ( 0.22%) (  1.96% cumulative)     13311.86 KB ( 0.01%) (  0.01% cumulative)
[   512-  1024 KB):   128 ( 0.85%) (  2.81% cumulative)    103231.06 KB ( 0.07%) (  0.08% cumulative)
[  1024-  2048 KB):   453 ( 3.01%) (  5.81% cumulative)    710604.76 KB ( 0.45%) (  0.53% cumulative)
[  2048-  4096 KB):  1710 (11.35%) ( 17.16% cumulative)   5550953.07 KB ( 3.53%) (  4.06% cumulative)
[  4096-  8192 KB):  7420 (49.25%) ( 66.41% cumulative)  45117676.84 KB (28.66%) ( 32.72% cumulative)
[  8192- 16384 KB):  2712 (18.00%) ( 84.42% cumulative)  28360509.83 KB (18.02%) ( 50.74% cumulative)
[ 16384- 32768 KB):  1324 ( 8.79%) ( 93.20% cumulative)  34178294.50 KB (21.71%) ( 72.45% cumulative)
[ 32768- 65536 KB):   988 ( 6.56%) ( 99.76% cumulative)  40339114.66 KB (25.63%) ( 98.07% cumulative)
[ 65536-131072 KB):    34 ( 0.23%) ( 99.99% cumulative)   2616742.69 KB ( 1.66%) ( 99.74% cumulative)
[131072-262144 KB):     2 ( 0.01%) (100.00% cumulative)    414248.89 KB ( 0.26%) (100.00% cumulative)

Die Ausgabe ist auch ohne weitere Erläuterungen verständlich. Nach der Angabe des Größenbereichs stehen die Anzahl der Dateien und deren summierte Größe.

Was kann man nun bezüglich der Blockgröße sagen? Es geht um 150 GB von Daten, meine Musiksammlung, die Dateien in verschiedenen Formaten umfasst. Weniger als 3% der Dateien (unter 450 gesamt) sind kleiner als 1 MB, dabei handelt es sich fast ausschließlich um Cover-Bilder. Würde man die maximal mögliche Blockgröße von 1 MB wählen, wären etwas über 400 MB durch die kleinen Dateien verschwendet, dazu käme ein zusätzlicher Verschnitt von ca. 14550 * 0,5 MB = 7275 MB. Das ist bei den heutigen Festplattengrößen nicht allzu viel, dennoch wäre hier vielleicht eine Blockgröße von 256 KB sinnvoller, denn die Dateien sind ja überwiegend 4-8 MB groß.

Bei Musikdateien wird sich der Aufwand der Änderung nicht unbedingt lohnen, aber es gibt sicher Anwendungsfälle für größere Blöcke. Interessant wären dann Benchmarks, die die Geschwindigkeit vorher und hinterher messen. Zur Zeit liegen solche noch nicht vor. Zu beachten ist, dass die Blockgröße für alle Dateien des Dateisystems gilt und daher auf diesem Dateisystem keine oder nur sehr wenige kleinere Dateien liegen sollten.

Hinweise auf grafische Tools mit vergleichbarer Funktionalität werden gern entgegengenommen.

  • Dieses Werk wurde von seinem Urheber zur uneingeschränkten Nutzung freigegeben und ist damit gemeinfrei (»public domain«).

Kommentare (Insgesamt: 18 || Alle anzeigen )
Re[2]: KDirStat (me, Di, 24. Januar 2012)
Re: KDirStat (nurso, Di, 17. Januar 2012)
K4DirStat (was:Re: KDirStat) (testerus, Di, 17. Januar 2012)
Re[5]: KDirStat (nurso, Mo, 16. Januar 2012)
Re[4]: KDirStat (kneuel, Mo, 16. Januar 2012)
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten