- Defragmentieren
-
Unter Fragmentierung (Fragment = Bruchstück) versteht man die verstreute Speicherung von logisch zusammengehörigen Datenblöcken des Dateisystems auf einem Datenträger. Dies kann bei Speichermedien mit relativ hohen Zugriffszeiten wie beispielsweise Festplatten zu einer spürbaren Verlangsamung der Lese- und Schreibvorgänge führen, da diese ihre volle Geschwindigkeit technisch bedingt nur bei sequentiellem Zugriff erreichen.
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 mitunter deutlich beschleunigen und damit die Arbeitsgeschwindigkeit des gesamten Systems erhöhen.
Inhaltsverzeichnis
Entstehung der Fragmentierung
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 dokument.odt entsteht dokument.odt Frei Datei film.avi entsteht dokument.odt film.avi Frei dokument.odt wird größer dokument.odt (1/2) film.avi dokument.odt (2/2) Frei Nach der Defragmentierung dokument.odt film.avi Frei Arten von Fragmentierungen
Es gibt mehrere Arten von Fragmentierung (auch wenn mit Fragmentierung meist die Intrafile-Fragmentierung gemeint ist):
- Intrafile-Fragmentierung: Intrafile-Fragmentierung ist das Verteilen von Nutzdateien auf dem Datenträger, so dass zusätzliche Verzögerungszeiten beim sequentiellen Lesen von Dateien auftreten können.
- Interfile-Fragmentierung: 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: 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 der Fragmentierung
Beim Lesen und Schreiben von fragmentierten Daten kann es je nach Beschaffenheit des Speichermediums zu mehr oder weniger spürbaren 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 wenigen 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 Solid State Disks. 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. Dadurch lässt sich keine verlässliche Aussage bezüglich der Auswirkung von Fragmentierung auf Flash-Speichermedien treffen. Sicher ist jedoch, dass sich eine Defragmentierung negativ auf die Lebensdauer von Flash-Speichermedien auswirkt, da diese nicht unbegrenzt oft beschreibbar sind.
Vermeiden und Verringerung von Fragmentierung
Es gibt verschiedene Strategien, um die Fragmentierung eines Dateisystems zu reduzieren. Diese Strategien sind primär auf Festplatten als verwendeten Datenträger bezogen und könnten sich bei anderen Speichermedien nicht oder nur wenig vorteilhaft auswirken.
- Verwendung einer höheren Blockgröße des Dateisystems (dabei wird jedoch mitunter Speicherplatz verschwendet)
- 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 sofortigem Festlegen (early allocation)
- Mehrstufige Allozierungssysteme (Zerlegung einer Festplatte in Cluster, Blockgruppen, Blöcke)
Bei allen Arten von Dateisystemen bewirkt ein Freilassen von 5 bis 20 Prozent des Speicherplatzes ein Verringern der Fragmentierung. Fatal sind (auch nur kurzzeitig) zu 100 Prozent gefüllte Dateisysteme. Das Dateisystem hat zunehmend weniger Freiheiten, Dateien sinnvoll abzuspeichern.
Fragmentierungsgrad eines Dateisystems
Es gibt verschiedene Möglichkeiten, die Fragmentierung eines Dateisystems anzugeben.
- Verhältnis der Lese- oder Schreib-Geschwindigkeit des fragmentierten (realen) Dateisystemes 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 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 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. 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 (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 den Datenträger 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. Das Betriebssystem 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, es werden gleichzeitig auch andere Anfragen getätigt.
Defragmentierung in Betriebssystemen
Defragmentierung unter Windows (Geschichte)
Das Programm defrag.exe wurde mit MS-DOS Version 6 eingeführt und war eine eingeschränkte lizenzierte Version von Norton SpeedDisk. Es konnte - wie die Vollversion von SpeedDisk - in bestimmten Fällen zu einer wesentlichen Geschwindigkeitssteigerung auf den damals üblichen Computern (386/486) führen. Der Computer musste sich nach der Defragmentierung nicht mehr einzelne Bruchstücke einer Datei über die gesamte Festplatte zusammensuchen. Dieses Phänomen kann bei diesen älteren Computern sogar „mitverfolgt“ werden, indem die Festplattengeräusche analysiert wurden (Klackern von einer zur anderen Seite, später: Durchgängiges Rattern).
Defrag.exe unter DOS erlaubte bis zu Windows ME (ebenfalls noch DOS-basierend) ein genaues visuelles Verfolgen dieses Vorgangs. Beispielsweise wurden Blöcke von Dateien zunächst im Lesezugriff grün markiert, eine freie Stelle auf der Festplatte gesucht und zum Schreiben rot unterlegt. Wurde keine genügend große freie Stelle innerhalb des Bearbeitungssegments gefunden, wanderten die Daten zumeist an das Ende der Festplatte. Nach dem Freiräumen wurde eben dieser Block wieder verschoben.
Ab Windows 2000 ist eine genaue Vorgehensweise des Programms nur noch aus dem Blickwinkel der gesamten Festplatte sichtbar. Einzelne Dateien werden zwar in der Statusleiste angezeigt, jedoch wird intern nur ein Timer verwendet, der den Fortschritt anzeigt.
Unter Windows Vista ist sogar die grafische Anzeige völlig verschwunden, so dass man keine Hinweise hat, welchen Status der Vorgang insgesamt hat.
Unter DOS waren auch Programme von Fremdanbietern (Norton, Digital Research) verbreitet (DISKOPT.EXE/DSKSPEED.EXE). Gemeinsam ist den Defragmentierungsprogrammen, dass sie optional eine Sortierung nach Dateiname, -größe oder -datum anbieten, die sich aber nicht oder kaum auf die Effizienz des Dateisystems auswirken.
Defragmentierung unter Mac OS X
Die von Mac OS X verwendeten Dateisysteme HFS und HFS+ sind so ausgelegt, dass sie den größten freien Speicherblock auf der Festplatte suchen in dem eine Datei gespeichert werden soll. Erst wenn eine Datei nicht in den größten freien Speicherblock passt, wird die Datei aufgeteilt (fragmentiert) und der noch nicht geschriebene Teil wird in einem weiteren Block gespeichert.
Um der Fragmentierung entgegenzuwirken läuft unter Mac OS X ein Hintergrundprozess, welcher regelmäßig das Dateisystem defragmentiert.
Werkzeuge zur Defragmentierung
Unter Windows-NT-Betriebssystemen (ab Windows 2000) steht nur dem Administrator der mitgelieferte Defragmentierer zur Verfügung. Dem normalen Benutzer wird der Zugriff verwehrt. Im Vergleich zu Fremdprodukten verfügt er jedoch nur über einen eingeschränkten Funktionsumfang. Einige der unter Linux und Unix-Varianten verwendeten Dateisysteme beugen der Fragmentierung besser vor und benötigen 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 und Ext3 stellen solche Programme erst gar nicht zur Verfügung. Die einzige Lösung zum Defragmentieren stellt folgendes Szenario dar: Kopieren oder tar-Archivierung aller Dateien auf neu angelegtes Dateisystem. Anschließend löscht man die Dateien und packt das Archiv daraufhin wieder aus.
Zur Defragmentierung des von Apple in Mac OS X verwendeten HFS+ läuft im Hintergrund ein Defragmentierungsprogramm, das dem Benutzer keinerlei Ausgabe präsentiert und die Defragmentierung bei Festplattenzugriffen automatisch unterbricht, so wie es Microsoft auch bei Windows Vista realisiert.
Literatur
- Dr. Oliver Diedrich: Fragmente und Verzeichnisse, Das Linuxdateisystem Ext3 tunen. c't 05/2008.
Weblinks
Wikimedia Foundation.