NTFS, MFT und sehr viele kleine Dateien

Auf einem Windows Server 2008, auf dem eine Software leider auf sehr unkluge Art und Weise Rechnungen als einzelne Textdateien abgelegt hat, wurde aufgrund der Mindestgröße eines Clusters unter NTFS immens viel Speicherplatz wegen mehrerer Millionen Textdateien verschleudert, obwohl die einzelnen Dateien nur wenige Byte brauchen.

Dies ließ sich wieder reduzieren, indem die ganzen Dateien gezippt wurden und somit die NTFS-Clustergröße für die einzelnen Dateien umgangen wurde. Allerdings wurde nicht soviel Platz frei, wie es rein rechnerisch hätte sein sollen. Nach längerer Recherche stellte sich heraus, dass dies an der MFT-Datei des NTFS-Dateisystems liegt.

Um das ganze einmal nachzuvollziehen, habe ich viele kleine Dateien auf einem neu aufgesetzten Windows Server 2012 erstellt. Bei den ca. zwei Millionen Textdateien, die ich angelegt habe, ist auch der Schwund aufgrund der Clustergröße immens. Statt 1,6 GByte sind knapp 7,6 GByte auf der Festplatte belegt.

 

Die Größe der MFT-Datei („vom System benutzt“) ist nach dem Erstellen der vielen kleinen Dateien stark angewachsen:

52069372 KB Speicherplatz auf dem Datenträger insgesamt
10238344 KB in 54029 Dateien
42796 KB in 17348 Indizes
0 KB in fehlerhaften Sektoren
2176796 KB vom System benutzt
65536 KB von der Protokolldatei belegt
39611436 KB auf dem Datenträger verfügbar

4096 Bytes in jeder Zuordnungseinheit
13017343 Zuordnungseinheiten auf dem Datenträger insgesamt
9902859 Zuordnungseinheiten auf dem Datenträger verfügbar

Vor der Erstellung der Dateien betrug die Größe der MFT-Datei nur ein Minimum:

140455 KB vom System benutzt

Dies liegt daran, dass kleine Dateien bei einem NTFS-System direkt in der MFT-Datei abgelegt werden.

 

Die Plattenbelegung nach dem Erstellen der zwei Millionen Dateien:

Die Plattenbelegung nach dem Löschen der zwei Millionen Dateien:

An der MFT-Datei hat sich durch das Löschen der Dateien nichts mehr verändert!

So sollte es eigentlich aussehen, wenn die ganzen Dateien gelöscht wurden (Stand bei einem neu aufgesetzten Server 2012):

 

 

Danach habe ich versucht die MFT wieder zu verkleinern bzw. neu aufzubauen. Eine Software, die dies erledigt scheint es nicht zu geben. Ein Image der Systemplatte zu erstellen, egal mit welchem Imaging-Tool, ist leider zwecklos, da auch die MFT immer wieder in voller Größe zurückgespielt wird.

Einfach alle Dateien von Laufwerk C manuell über den Explorer zu kopieren kann man vergessen. Mit Robocopy oder ähnlichem ebenfalls. Über Linux hat es auch nicht funktioniert. Das kopierte Windows ließ sich nach einer Reparatur zwar starten, aber bei so gut wie jeder zweiten Aktion gab es eine Fehlermeldung.

Allerdings ließ sich das ganze mit Hilfe von Acronis realisieren, indem ich ein Image erstell habe und aus diesem alle Dateien in eine neue Partition wiederhergestellt habe. Nachdem manuellen Kopieren aller Dateien aus dem Acronis-Backup ist die MFT klein, aber leider ist immer noch zu viel Platz belegt. Dies liegt wohl leider daran, dass beim Kopieren die per symbolischer Verknüpfung eingebunden Verzeichnisse von Windows falsch kopiert wurden und somit nun zu viel Platz belegt wird.

52069375 KB Speicherplatz auf dem Datenträger insgesamt
13392624 KB in 72812 Dateien
34084 KB in 17398 Indizes
0 KB in fehlerhaften Sektoren
158527 KB vom System benutzt
65536 KB von der Protokolldatei belegt
3848410 KB auf dem Datenträger verfügbar

4096 Bytes in jeder Zuordnungseinheit
13017343 Zuordnungseinheiten auf dem Datenträger insgesamt
9621035 Zuordnungseinheiten auf dem Datenträger verfügbar

 

Fazit: Die einzige Lösung ist wohl so eine Menge kleiner Dateien auf einer einzelnen Datenplatte und nicht auf der Systempartition zu speichern. Von dort kann man die verbliebenen Daten irgendwann verschieben und die Partition danach formatieren. Die übergroße MFT ist dann Geschichte. Gerade beim Einsatz virtueller Maschinen ist dies recht einfach umzusetzen, muss aber im Vorhinein bedacht werden.

 

Zwei interessante Posts die ich zu den Grundlagen zur Speicherplatzberechnung und der MFT-Datei gefunden habe:
https://blogs.msdn.microsoft.com/ntdebugging/2008/07/03/ntfs-misreports-free-space/
https://blogs.technet.microsoft.com/askcore/2013/03/01/where-did-my-space-go/

Anscheinend ein öfters diskutiertes Thema, leider eher ohne brauchbare Lösung:
https://superuser.com/questions/254054/how-to-reset-an-ntfs-mft-for-no-tracks-of-deleted-files-names-to-be-found-there
https://forum.piriform.com/?showtopic=41378
https://forum.piriform.com/?showtopic=38402
http://www.winfuture-forum.de/index.php?showtopic=178187
https://www.administrator.de/frage/%C3%9Cbergro%C3%9Fe-mft-verkleinern-158205.html

Schreibe einen Kommentar