Unter Fragmentierung (Fragment = Bruchstück) versteht man im Zusammenhang mit Datenträgern die ungünstige Verteilung von Datenblöcken, so dass sich die Zugriffszeiten auf die Daten durch zusätzliche Bewegungen der Schreib-/Leseköpfe verlängern. Unter Defragmentierung versteht man die Neuordnung von Datenblöcken fragmentierter Dateien auf den Spuren und Sektoren der Festplatte, so dass Zugriffe mit optimaler Geschwindigkeit durchgeführt werden können.
Inhaltsverzeichnis |
Ein Datenträger (auf dem Lesen und Schreiben erlaubt ist) ist kein statisches Gebilde, sondern es finden dauernd Lese-, Schreib- und Löschoperationen statt. Manche Operationen geben Speicherplatz wieder frei, manche benötigen neuen Speicherplatz. Dieses dauernde Freigeben und erneute Belegen von Speicherblöcken führt dazu, dass zum einen die unbenutzten Speicherblöcke sich über die Festplatte verteilen (Freispeicherfragmentierung) und zum anderen Dateien und Metadateien nicht mehr am Stück auf den Spuren der Festplatte abgespeichert sind (Dateifragmentation). Eine weitere Quelle für Fragmentierung ist das Verlängern schon bestehender Dateien.
Im folgenden Diagramm sei dieser Vorgang veranschaulicht:
| Vorgang | Speicherblock | |||||
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| Datei "dokument.doc" entsteht | dokument.doc (1/1) | Frei | ||||
| Datei "film.avi" entsteht | dokument.doc (1/1) | film.avi (1/1) | Frei | |||
| "dokument.doc" wird größer | dokument.doc (1/2) | film.avi (1/1) | dokument.doc (2/2) | Frei | ||
| Nach der Defragmentierung | dokument.doc (1/1) | film.avi (1/1) | Frei | |||
Es gibt mehrere Arten von Fragmentierung (auch wenn mit Fragmentierung meist die Intrafile-Fragmentierung gemeint ist):
Fragmentierung hat mehrere Auswirkungen:
Es gibt verschiedene Strategien, um die Fragmentierung eines Dateisystems zu reduzieren.
Bei allen Arten von Dateisystemen bewirkt ein Freilassen von 5% bis 20% des Speicherplatzes ein Verringern der Fragmentierung. Fatal sind (auch nur kurzzeitig) zu 100% gefüllte Dateisysteme. Das Dateisystem hat zunehmend weniger Freiheiten, Dateien sinnvoll abzuspeichern.
Es gibt verschiedene Möglichkeiten, die Fragmentierung eines Dateisystems anzugeben.
Die durch unterschiedliche Verfahren bestimmte Fragmentierungsgrade sind nicht vergleichbar; nicht einmal durch gleiche Verfahren bestimmte Fragmentierungen sind vergleichbar, weil die realen Auswirkungen bei vielen Verfahren weiterhin von Blockgröße, durchschnittlicher Dateigröße und Geschwindigkeit des Mediums abhängen.
Die Prozentzahlen der Fragmentierung, die Werkzeuge verschiedener Betriebssysteme anzeigen, sind nicht direkt vergleichbar:
Ein Fragmentierungsgrad von 1% in einem ext2-Dateisystem bedeutet, dass Fragmente aus durchschnittlich 100 Blocks bestehen. Die Fragmentierung einer Datei kann man sich mit dem Befehl filefrag (meist im Paket e2fsprogs) ausgeben lassen.
Ein Fragmentierungsgrad von 1% in einem NTFS-Dateisystem bedeutet, dass jede hundertste Datei fragmentiert ist und 99% unfragmentiert sind, was in der Praxis keine Beeinträchtigung darstellt. Wenn sich auf einem Dateisystem große Dateien befinden, können selbst 100% Fragmentierung keinerlei Auswirkung haben (10 große Dateien, jeweils in zwei Fragmente zerlegt, bilden ein 100% fragmentiertes Dateisystem). Unter NTFS sind nicht nur einzelne Dateien von Fragmentierung betroffen, sondern auch die MFT.
Aus dieser unterschiedlichen Sichtweise der Messung der Fragmentierung beruht der Mythos, dass Unix-Dateisysteme nicht oder nur gering fragmentieren.
Ext2 implementiert mehrere Mechanismen, um Fragmentierung zu reduzieren. Dazu gehört das Zusammenfassen von Blöcken zu Blockgruppen. Dateien werden dann möglichst gleichmäßig auf Blockgruppen verteilt. Dadurch entsteht eine gleichmäßige Verteilung von Dateien (und freien Bereichen) auf der Platte. Im Gegensatz zu FAT werden nun Dateien immer in möglichst schlecht passende freie Bereiche gelegt, also kleine Dateien in große Lücken, um auf Größenänderungen der betreffenden Dateien ohne Verluste reagieren zu können. Hinter jeder Datei versucht Ext2 auch genug Platz zu lassen, sodass kleinere Größenänderungen von Dateien nicht prompt zu einer Fragmentierung führen. Durch die Verteilung der Daten über den kompletten nutzbaren Bereich fällt im Serverbetrieb die Fragmentierung weniger ins Gewicht als beim Lesen im „Burst“-Modus. So ordnen moderne Festplatten-Scheduler die Lese- oder Schreibanforderungen derart, dass Suchzeiten (z. B. des Schreib-Lese-Kopfes der Platte) minimal werden.
Eine weitergehende Reduzierung von Fragmenten erhält man z. B. durch das Dateisystem XFS, welches Schreiboperationen verzögert (delayed write) und im RAM möglichst komplett zwischenspeichert. Bei kleinen Dateien ist so die komplette Dateigröße dem Dateisystem bekannt, bevor die Datei auf die Platte geschrieben wird. So kann XFS eine optimale Stelle für die Datei finden. Passt die Datei nicht komplett in den RAM, wird natürlich schon vorher begonnen den Puffer auf den Datenträger zu schreiben.
Bei der Beurteilung der Fragmentierung von Dateisystemen muss man zwischen Durchsatz und Performance unterscheiden: Performance ist die Datenrate, die ein Anwender mit einem einzelnen Prozess maximal vom Dateisystem (in MB/s) erreichen kann. Durchsatz ist die Datenrate, die das Dateisystem über alle Anwender und Prozesse (mit mehreren, konkurrierenden IO-Anfragen) summiert liefern kann. In Multitasking- bzw. Multiuser-Systemen ist der Durchsatz oft sehr viel größer als die Performance. Linux hat Algorithmen, die den Durchsatz, nicht die Performance des Systems erhöhen. Starke Fragmentierung wirkt sich stärker auf die Performance aus. Bei Systemen mit vielen konkurrierenden Anfragen an das Dateisystem wird eine (größere) Datei ohnehin nicht in einem Stück gelesen, der Schreib-Lese-Kopf wird mehrfach bewegt um auch anderen Anfragen nachzugehen.
Unter Microsoft Windows steht allen Benutzern der mitgelieferte Defragmentierer zur Verfügung. Im Vergleich zu kommerziellen Alternativen verfügt er jedoch nur über einen eingeschränkten Funktionsumfang. Die unter Linux und Unix-Varianten verwendeteten Dateisysteme sind weitestgehend selbstdefragmentierend und benötigen eigentlich keine Programme zur Defragmentierung. Dennoch gibt es für einige Dateisysteme Defragmentierungsprogramme, die in den jeweiligen Support-Paketen der Distributionen enthalten sind. Ext2 kann durch defrag, XFS mit Hilfe von xfs_fsr defragmentiert werden, was aber im normalen Einsatz nie nötig ist. Andere populäre Dateisysteme, wie beispielsweise ReiserFS stellen solche Programme erst gar nicht zur Verfügung.