miniatur|Visualisierung der Fragmentierung und des anschließenden Defragmentiervorgangs Unter Fragmentierung (Fragment = Bruchstück) versteht man die verstreute Speicherung von logisch zusammengehörigen Datenblöcken des Dateisystems auf einem Datenträger, was als Spezialfall der allgemeinen Speicherfragmentierung betrachtet werden kann. Bei Speichermedien mit sequentiellem Zugriff wie Festplatten kann Fragmentierung zu einer spürbaren Verlangsamung der Lese- und Schreibvorgänge führen.
Unter Defragmentierung versteht man die mit speziellen Programmen durchführbare Neuordnung von fragmentierten Datenblöcken auf dem Speichermedium, so dass logisch zusammengehörige Datenblöcke möglichst aufeinanderfolgend auf dem Datenträger abgelegt werden. Dies kann den sequentiellen Zugriff beschleunigen und damit die Arbeitsgeschwindigkeit des gesamten Systems erhöhen.
Bei anderen Speicher-Technologien hingegen, wie Flash-Speicher – allen voran SSDs, bringt eine Defragmentierung keinerlei Vorteil, im Gegenteil kann sie dem Laufwerk sogar schaden.
Entstehung 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 sich zum einen die unbenutzten Speicherblöcke auf dem Datenträger verteilen (Freispeicherfragmentierung) und zum anderen die logisch zusammenhängenden Datenblöcke von Dateien und Metadateien nicht mehr hintereinander auf dem Datenträger abgespeichert werden (Dateifragmentation). Eine weitere Ursache von Fragmentierung ist das Verlängern schon bestehender Dateien.
Vereinfacht ausgedrückt: Wenn das Betriebssystem eine Datei auf dem Speichermedium ablegen will, kann es vorkommen, dass diese nicht zusammenhängend, sondern verstreut auf dem Datenträger gespeichert wird. Einige Dateisysteme prüfen nicht, ob die Daten innerhalb des freien Speicherplatzes zusammenhängend abgelegt werden können, sondern beginnen den Speichervorgang einfach in dem ersten freien Speicherplatzbereich. Es kommt jedoch nicht selten vor, dass dieser Speicherbereich nicht groß genug ist, um die gesamte Datei aufzunehmen. In diesem Fall beschreibt das Dateisystem den ersten freien Speicherbereich, bis dieser voll ist, und legt den restlichen Teil der Datei wiederum im nächsten freien Speicherbereich ab.
Im folgenden Diagramm wird dieser Vorgang veranschaulicht: Vorgang Speicherblock 1 2 3 4 5 6 Datei file.odt entsteht file.odt frei Datei film.avi entsteht file.odt film.avi frei file.odt wird größer file.odt (1/2) film.avi file.odt (2/2) frei nach der Defragmentierung file.odt film.avi frei
Arten Es gibt mehrere Arten der Fragmentierung (auch wenn mit Fragmentierung meist die Intrafile-Fragmentierung gemeint ist): Intrafile-Fragmentierung ist das Verteilen von Nutzdateien auf dem Datenträger, so dass kleine zusätzliche Verzögerungszeiten beim sequentiellen Lesen von Dateien auftreten können. Interfile-Fragmentierung ist das Verteilen von Dateien und Metadateien, die normalerweise nacheinander gelesen werden. Sie spielt vor allem beim korrelierten Lesen vieler kleiner Dateien eine Rolle (zum Beispiel Verzeichnisse mit vielen kleinen Bildern). Metafile-Fragmentierung ist das Fragmentieren von Verzeichnissen, Blockbelegungstabellen und ähnlichen Metainformationen. Fragmentierung des unbenutzten Speicherplatzes; sie stellt selbst keinen Nachteil für den Zugriff auf Dateien dar, ist aber eine der Ursachen für die Entstehung von Fragmentierung (Neuanlegen von Dateien).
Auswirkungen Beim Lesen und Schreiben von fragmentierten Daten kann es je nach Beschaffenheit des Speichermediums zu Geschwindigkeitseinbußen kommen. Bei modernen Dateisystemen (ReiserFS, XFS, NTFS) kommt es zusätzlich zu einer Vergrößerung der Metadaten, die beschreiben, wo sich die Daten auf dem Speichermedium befinden.
Am Beispiel einer Festplatte lässt sich die negative Auswirkung der Fragmentierung besonders gut verdeutlichen: Beim Lesen einer fragmentierten Datei, die überall verstreut auf der Magnetscheibe der Festplatte abgelegt ist, muss der Lesekopf der Festplatte in kurzen Abständen sehr oft und über längere Strecken hinweg auf der Magnetscheibe neu positioniert werden. Dies bewirkt viele kleine Verzögerungen, die sich im Bereich von einigen Millisekunden bewegen. Je nach Größe der Datei, Fragmentierungsgrad und Zugriffszeit der Festplatte können sich diese Verzögerungen über den gesamten Lesevorgang zu einer spürbaren Verlangsamung summieren.
Im Gegensatz dazu existieren auch andersartige Speichermedien, die ohne bewegte Teile auskommen und damit nicht von mechanisch begründeten Verzögerungen bei Lese- und Schreiboperationen betroffen sind. Dazu gehören unter anderem Datenträger, die auf Speicherchips (vornehmlich Flash-Speicher) aufbauen, beispielsweise USB-Sticks, Speicherkarten oder SSDs. Nur teilweise von diesem Problem betroffen sind Hybridfestplatten, die sowohl Magnetplatten als auch Speicherchips zum dauerhaften Ablegen von Daten nutzen.
Jedoch können auch derartige Speichermedien von einem fragmentierten Dateisystem verlangsamt werden. Aufgrund der anderen internen Organisation des Speichers sind die Auswirkungen einer Fragmentierung abhängig von Gerät und Hersteller jedoch sehr unterschiedlich und können nicht mit einer Festplatte verglichen werden. Der Controller dieser Speichermedien legt die Daten je nach Modell mitunter nicht in der physischen Reihenfolge auf den Speicherchips ab, die vom Dateisystem abgebildet wird, denn da sich Speicherchips nicht beliebig oft beschreiben lassen, muss beispielsweise das häufige Schreiben auf dieselbe physische Adresse mittels wear leveling vermieden werden. Dadurch lässt sich keine verlässliche Aussage bezüglich der Auswirkung von Fragmentierung auf Flash-Speichermedien treffen. Sicher ist jedoch, dass sich das Durchführen einer Defragmentierung negativ auf die Lebensdauer von Flash-Speichermedien auswirkt, da diese nicht unbegrenzt oft beschreibbar sind.
Vermeiden und Verringern Es gibt verschiedene Strategien, um die Fragmentierung eines Dateisystems zu reduzieren. Diese Strategien sind primär auf Festplatten als verwendete Datenträger bezogen und könnten sich bei anderen Speichermedien nicht oder nur wenig vorteilhaft auswirken.
Bei allen Arten von Dateisystemen bewirkt ein Freilassen von 5 bis 20 Prozent des Speicherplatzes ein Verringern der Fragmentierung. Je voller ein Dateisystem belegt ist, desto wahrscheinlicher tritt auch Fragmentierung auf, da die freien Bereiche immer kleiner werden. Sobald eine Datei abgelegt werden soll, die größer ist als die größte „Lücke“, ist eine kontinuierliche Speicherung nicht mehr möglich und sie fragmentiert zwangsläufig.
Vermeiden von Fragmentierung Ein probates Mittel ist das Trennen von Programmen und von Nutzerdaten. Das Dateisystem macht dazu keinen Unterschied, jedoch entstehen Fragmente bei Nutzerdaten fortlaufend und bei Programmen mit jedem Update. Eine Trennung erfordert also das Verteilen auf verschiedene Partitionen. Dazu gibt es passende Hilfsmittel, insbesondere für das Verlagern der Nutzerdaten. Im Ergebnis wird auch das Defragmentieren der Partitionen weniger Zeit erfordern.
Parametrieren der Partitionen Einfache Maßnahmen sorgen für eine geringere Fragmentierung entsprechend dem Volumen der verschiedenen Dateiklassen.
geschicktes Verteilen von Betriebssystem, Verzeichnisbäumen und Nutzdaten über die Festplatten mittels geeigneter Software Verwendung einer höheren Blockgröße des Dateisystems (dabei wird jedoch mitunter Speicherplatz verschwendet)
Parametrieren der Applikationen und der Systemdienste Weitere Maßnahmen beziehen sich auf die Parametrierung der Applikationen:
Preallocation (man reserviert vorsorglich schon Blöcke, obwohl diese noch nicht benötigt werden) Spätes Festlegen der zu benutzenden Speicherblöcke (late allocation) statt sofortigen Festlegens (early allocation) mehrstufige Allozierungssysteme (Zerlegung einer Festplatte in Cluster, Blockgruppen, Blöcke).
Fragmentierungsgrad eines Dateisystems Es gibt verschiedene Möglichkeiten, die Fragmentierung eines Dateisystems anzugeben: Verhältnis der Lese- oder Schreib-Geschwindigkeit des fragmentierten (realen) Dateisystems gegenüber einem nichtfragmentierten (optimalen) Dateisystem Verhältnis der Zahl der fragmentierten Dateien zur Gesamtanzahl der Dateien Verhältnis des durch fragmentierte Dateien belegten Speicherplatzes zum gesamten belegten Speicherplatz Verhältnis des durch fragmentierte Dateien belegten Speicherplatzes zum gesamten vorhandenen Speicherplatz Anzahl der zusammenhängenden Blöcke zur Gesamtanzahl der belegten Blöcke Anzahl der zusammenhängenden Blöcke zur Gesamtanzahl der vorhandenen Blöcke. Die durch unterschiedliche Verfahren bestimmten 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 sowie Geschwindigkeit und interner Speicherorganisation des Mediums abhängen.
Darüber hinaus ist der Fragmentierungsgrad allein nicht eine verlässliche Messgröße für die Performance eines Dateisystems. Zum einen liegt das daran, dass in einigen Dateisystemen auch die Metadaten fragmentiert werden können, bei anderen jedoch nicht. (Die MFT in NTFS ist zum Beispiel davon betroffen.) Zum anderen verfügen verschiedene Dateisysteme über verschiedene Mechanismen, um den Performanceeinbruch bei vorhandener Fragmentierung zu vermindern.
Das Dateisystem extended filesystem von Linux 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 dem Speichermedium. 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, so dass kleinere Größenänderungen von Dateien nicht prompt zu einer Fragmentierung führen. Dieser Mechanismus wurde durch in ext4 weiter verbessert. 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 unter anderem durch das Dateisystem XFS, welches Schreiboperationen verzögert – – und im RAM möglichst komplett zwischenspeichert. Bei kleinen Dateien ist so die komplette Dateigröße dem Dateisystem bekannt, bevor die Datei auf den Datenträger geschrieben wird. So kann XFS eine optimale Stelle für die Datei finden. Passt die Datei nicht komplett in das RAM, wird natürlich schon vorher begonnen den Puffer auf den Datenträger zu schreiben.