[[Vorlage(Getestet, general)]] [[Vorlage(Fortgeschritten)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:Packprogramme: Archive entpacken] }}} [[Inhaltsverzeichnis(2)]] Unter [wikipedia:Fragmentierung_(Dateisystem):Fragmentierung] versteht man im Allgemeinen die Verteilung von Datenblöcken einer eigentlich zusammengehörigen Datei auf einem Speichermedium wie einer konventionellen Festplatte. Dadurch bedingt muss der Lesekopf des Speichermediums sich mehr bewegen, was zu erhöhten Zugriffszeiten führen kann und bei vielen oder großen fragmentierten Dateien zu einem (merklichen) Einbruch der IO-Leistung des Speichermediums führen kann. Genau genommen bezeichnet man diese Art der Fragmentierung als [wikipedia:Externe_Fragmentierung:externe Fragmentierung]. Der externen Fragmentierung kann grundsätzlich [#defrag entgegengewirkt] werden. Auch Dateisysteme unter Linux weisen Fragmentierung auf, wenn auch nicht in einem solchen Maßstab (und mit solchen Auswirkungen), wie z.B. unter Windows mit FAT32 oder NTFS als Dateisystem. Eine Defragmentierung hier in der Regel nicht notwendig ist. Ausnahmen sind kontinuierlich wachsende Dateien wie z.B. Mail-Archive oder Downloads. Der geringe Grad der Fragmentierung ist primär dadurch bedingt, dass Dateisysteme wie z.B. ext3 und insbesondere ext4 ausgeklügelte Schreibstrategien und Datenträgeraufteilungen verwenden, um Fragmentierung zu vermeiden. Dazu gehören u.a. das Cachen von Schreibvorgängen und das Vorbelegen von Blöcken auf dem Datenträger. Trotzdem ist Fragmentierung nicht ausgeschlossen, besonders nicht auf Systemen mit sehr vielen Schreib- und Löschvorgängen wie auf manchen Serversystemen (Mail- oder News-Server). Sehr anfällig sind auch volle Dateisysteme, da unter Umständen gar keine zusammenhängende Lücke vorhanden ist, in den eine neue Datei vollständig hineinpasst. Allerdings sei auch gesagt, dass ein Fragment-freies Dateisystem nicht zwingend die optimale Schreib-/Lesegeschwindigkeit bringt. Oft wird eine (große) Datei nicht komplett linear eingelesen, sondern der Vorgang wird unterbrochen, weil z.B. das Betriebssystem eine andere Datei "zwischendurch" anfordert. In solchen Fällen ist es (fast) egal, ob eine Datei in mehrere Teile geteilt ist, da durch die Unterbrechung der Schreib-/Lesekopf ohnehin neu positioniert werden muss. {{{#!vorlage Hinweis Defragmentieren zur Verbesserung der Zugriffsgeschwindigkeit auf Dateien ist nur bei Medien mit mechanisch (und damit zeitaufwendig) zu positionierender Schreib-/Lesestelle sinnvoll, also z.B. bei Festplatten mit rotierenden Magnetscheiben und sich bewegenden Schreib-/Leseköpfen, Magnetbändern und rotierenden optischen Speichern, aber nicht bei SSD oder anderen Flash-Speichern. Solche leiden unter einer Defragmentierung, da unnötige Schreibvorgänge stattfinden. }}} [[Anker(defrag)]] = Werkzeuge = Es gibt verschiedene spezielle und allgemeine Werkzeuge für die verschiedenen Dateisysteme, um den Fragmentierungsgrad festzustellen bzw. die Partition zu defragmentieren. {{{#!vorlage Warnung Bei der Defragmentierung kann es grundsätzlich immer zu Datenverlust kommen, da große Mengen Daten (Dateien) verschoben werden. Daher ist vorher immer eine Sicherung der Daten vorzunehmen! }}} == ext2 / ext 3 == Für ext2/ext3-Dateisysteme gibt es zwei Programme, mit denen man prüfen kann, ob bzw. wie stark das Dateisystem fragmentiert ist. Beide sind im Paket {{{#!vorlage Paketinstallation e2fsprogs }}} enthalten, welches üblicherweise in der Standardinstallation enthalten ist. [1] Eine allgemeine Aussage erhält man über "`e2fsck`", und zwar mit folgendem Befehl: {{{#!vorlage Befehl sudo e2fsck -fn DEVICE }}} wobei `DEVICE` durch den Pfad zum entsprechenden Gerät ersetzt werden muss. Die Ausgabe kann dann z.B. so aussehen: {{{e2fsck 1.40.2 (12-Jul-2007) Durchgang 1: Prüfe Inodes, Blocks, und Größen Durchgang 2: Prüfe Verzeichnis Struktur Durchgang 3: Prüfe Verzeichnis Verknüpfungen Durchgang 4: Überprüfe die Referenzzähler Durchgang 5: Überprüfe Gruppe Zusammenfassung /dev/sda8: 104320/577152 files (0.5% non-contiguous), 555698/1152892 blocks }}} Die Ausgabe in der letzten Zeile `0,5% non-contiguous` gibt einen Anhaltspunkt über die Fragmentierung. Allerdings bezieht sich der Wert auf alle Dateien der Partition, also auch "leeren" Dateien wie symbolischen Links, Gerätedateien etc., welche natürlich Aufgrund der Größe 0 nicht fragmentieren können und deshalb die Statistik verfälschen. Genauer ist das Programm `dumpe2fs`, welches mit folgendem Befehl aufgerufen wird [2]: {{{#!vorlage Befehl sudo dumpe2fs DEVICE }}} Anschließend erhält man eine - je nach Größe der Partition - ziemlich lange und unübersichtliche Ausgabe, aus der man indirekt ablesen kann, ob die Platte fragmentiert ist. Ein Teil der Ausgabe kann z.B. so aussehen: {{{... Gruppe 2: (Blöcke 65536-98303) Block bitmap in 65536 (+0), Inode Bitmap in 65537 (+1) Inode-Tabelle in 65538-66038 (+2) 32205 freie Blöcke, 16023 freie Inodes, 0 Verzeichnisse Freie Blöcke: 66039-67583, 67629-69631, 69647-98303 Freie Inodes: 32074-48096 ... }}} Die Fragmentierung kann man aus der Zeile ``Freie Blöcke`` ableiten. Im Idealfall steht hier nur ein Bereich, dann ist diese Gruppe komplett unfragmentiert. Im obigen Beispiel sieht man drei freie Bereiche, d.h. diese Gruppe ist (leicht) fragmentiert. Je mehr freie Gruppen, desto stärker ist die Fragmentierung bzw. die Gefahr, das zukünftig gespeicherte Dateien fragmentiert werden. [[Anker(filefrag)]] Interessiert man sich "nur" dafür, wie stark eine einzelne Dateien fragmentiert ist, so kann man dies mit Hilfe des Programms `filefrag`. Der Aufruf sieht so aus [2]: {{{#!vorlage Befehl filefrag /bin/* }}} Die Ausgabe kann dann z.B. so aussehen: {{{#!vorlage Befehl filefrag /bin/*|head }}} {{{ /bin/bash: 57 extents found, perfection would be 1 extent /bin/bunzip2: 4 extents found, perfection would be 1 extent /bin/busybox: 18 extents found, perfection would be 1 extent /bin/bzcat: 4 extents found, perfection would be 1 extent /bin/bzcmp: 1 extent found /bin/bzdiff: 1 extent found /bin/bzegrep: 1 extent found }}} was bedeutet, dass die Datei, hier '''/bin/bzcmp''', zusammenhängend auf dem Speichermedium liegt. Ist die Zahl 2 oder größer, so ist die Datei entsprechend stark fragmentiert. Der Wert gibt allerdings nicht an, ob und wie die Dateifragmente auf der Festplatte verteilt sind. Grundsätzlich kann es nämlich sein, dass die Fragmente quasi hintereinander liegen, aber nur durch ein paar leere Blöcke getrennt sind. In diesem Fall hätte die Fragmentierung einen sehr geringen Einfluss, da beim Lesen der Datei "nur" die leeren Blöcke übersprungen werden müssten. Anderseits könnte es (theoretisch) sein, dass ein Fragment am Anfang der Festplatte liegt und ein Fragment am Ende der Platte, was natürlich beim Lesen der Datei nachteilig ist. Die genaue Fragmentierung einer einzelnen Datei zeigt der Parameter -v, z.B. {{{#!vorlage Befehl filefrag -v /bin/bzcat }}} {{{ Filesystem type is: ef53 Filesystem cylinder groups is approximately 38 File size of /bin/bzcat is 30200 (8 blocks, blocksize 4096) ext logical physical expected length flags 0 0 1218575 1 merged 1 1 1218579 1218575 1 merged 2 2 1218581 1218579 1 merged 3 3 1218667 1218581 5 merged,eof /bin/bzcat: 4 extents found, perfection would be 1 extent }}} Für ext2/ext3 gab es in der Vergangenheit ein Programm zur Defragmentierung (e2defrag), welches aber schon lange nicht mehr weiterentwickelt wird und auch auf den aktuellen Versionen von ext2/ext3 nicht mehr funktioniert. Daher muss man hier, wenn überhaupt, zu den [#allg allgemeinen] Werkzeugen greifen. == ext4 == ext4 hat bessere Mechanismen als ext2 und ext3, um das Entstehen von Fragmentierten Dateien zu verhindern. Ein Upgrade ist relativ leicht möglich, siehe [:Upgrade auf ext4:]. In ext4 soll auch eine Schnittstelle zur Online-Defragmentierung integriert werden. Diese wird auch die Möglichkeit bieten die zum Systemstart nötigen Dateien in eine fortlaufende Reihenfolge zu sortieren, um den Bootvorgang zu beschleunigen. {{{#!vorlage Warnung Von einem Einsatz bei [:SSD:Solid State Disks] und bei mit [:NTFS:] (Windows) formatierten Datenträgern wird abgeraten. Eine vorhandene Datensicherung minimiert das Risiko eines möglichen Datenverlustes. }}} Im Paket '''e2fsprogs''' gibt es noch ein Programm - `e4defrag`, das fragmentierte Dateien und ext4-Dateisysteme online (im laufenden Betrieb) analysieren und defragmentieren kann. Das Programm kann mit folgendem Befehl aufgerufen werden: {{{ e4defrag [ -c ] [ -v ] TARGET ... }}} wobei `TARGET` eine reguläre Datei, ein Verzeichnis oder ein Gerät (Device), das als ein ext4-Filesystem eingebunden ist, sein kann. Eine Notwendigkeit einer Defragmentierung kann man z.B. für ein ext4-Dateisystem so ermitteln: {{{#!vorlage Befehl sudo e4defrag -c /dev/sda3 }}} {{{ now/best size/ext 1. /home/BENUTZER/.Skype/myname/callmember256.dbb 17/1 4 KB 2. /home/BENUTZER/.Skype/myname/chat512.dbb 14/1 4 KB 3. /var/log/mail.log 12/1 4 KB 4. /var/log/preload.log 12/1 4 KB 5. /home/BENUTZER/.Skype/myname/chatmsg2048.dbb 12/1 4 KB Total/best extents 355174/351882 Average size per extent 119 KB Fragmentation score 0 [0-30 no problem: 31-55 a little bit fragmented: 56- needs defrag] This device (/dev/sda3) does not need defragmentation. Done. }}} Details enthält auch die Manpage [man:precise/en/man8/e4defrag.8.html: e4defrag] == xfs == Den Grad der Fragmentierung kann xfs_db mit dem Kommando "frag" anzeigen, z.B.: {{{#!vorlage Befehl xfs_db -c frag -r /dev/DEV }}} Für xfs gibt es das Programm `xfs_fsr` (fsr steht für '''f'''ile '''s'''ystem '''r'''eorganize) und ist ein Werkzeug, welches das Dateisystem automatisch neu organisiert (=defragmentiert). Das Programm befindet sich im Paket {{{#!vorlage Paketinstallation xfsprogs }}} Eine Übersicht über die Funktionen findet man in den [:man:Manpages] zu xfs_fsr. == reiserfs == Für [wikipedia:reiserfs:] gibt es keine bekannten Programme zur Defragmentierung. Die [#allg allgemeinen] Werkzeuge funktionieren aber auch unter reiserfs. [[Anker(allg)]] == Allgemein == Die "allgemeinen" Werkzeuge arbeiten unabhängig vom [:Dateisystem:], d.h. sie funktionieren prinzipiell auf allen von Linux unterstützen Dateisystemen. Das Grundprinzip aller Werkzeuge ist gleich bzw. ähnlich: die Dateien und Verzeichnisse werden gelesen, temporär gespeichert, im Original gelöscht und dann zurückgeschrieben. Beim Zurückschreiben sortiert und organisiert das Dateisystem die Dateien und Verzeichnisse dann in der optimalen Reihenfolge. === defrag === [http://ck.kolivas.org/apps/defrag/ defrag] {en} ist ein einfaches Shellskript von [wikipedia_en:Con_Kolivas:Con Kolivas], welches einfach in einem Verzeichnis aufgerufen wird, anschließend alle Dateien (rekursiv) einliest, sortiert und von groß nach klein zurückschreibt. Weitere Hinweise zur Arbeitsweise findet man in den Kommentarzeilen des Skripts. {{{#!vorlage Hinweis `defrag` funktioniert ggf. erst richtig, nachdem das Dateisystem von ext3 auf ext4 umgestellt wurde (siehe [:Upgrade auf ext4:]). }}} === shake === [http://vleu.net/shake/ ShAkE] {en} ist ein Programm, welches Dateien ebenfalls durch Lesen und Neuschreiben defragmentiert. Eine Anleitung findet man auf der Homepage. Dort kann man das Programm herunterladen und es gibt auch eine Fremdquelle für Ubuntu: [launchpad:~un-brice/+archive/ubuntu/ppa:PPA] {en}. [[Vorlage(Fremd, Quelle)]] === Kopieren und Zurückkopieren === Die einfachste Möglichkeit ist, alle Dateien einer Partition auf eine andere zu [:cp:kopieren], alle Dateien auf der Original-Partition zu [:rm:löschen] (Formatieren ist nicht notwendig) und dann die Daten auf die geleerte Partition zurückzuschreiben. === tar === Hat man keine ausreichend große freie weitere Partition, so kann man den gesamten Inhalt einer Partition statt zu kopieren mit Hilfe von [:tar:] in ein Archiv packen, dieses auf einen externen Datenträger sichern, auf der Original-Partition alle Dateien löschen (Formatieren ist nicht notwendig) und dann das tar-Archiv auf die geleerte Partition zurückschreiben [3]. = Links = * [http://www.heise.de/ct/08/05/links/214.shtml Weitere Hilfsprogramme] für ext2/3 aus der c't 5/08 {de} * [http://www.heise.de/open/Das-Dateisystem-Ext3-tunen--/artikel/104859 Fragmente und Verzeichnisse - Das Linux-Dateisystem Ext3 tunen] von Dr. Oliver Diedrich {de} * [http://geekblog.oneandoneis2.org/index.php/2006/08/17/why_doesn_t_linux_need_defragmenting Why doesn't Linux need defragmenting] {en} - verständliche und größtenteils nicht-technische Erklärung, warum ext2/ext3 wenig fragmentieren (deren Ergebnis aber nicht stimmt, weil Defragmentieren trotzdem auftreten kann) * [http://davtools.sourceforge.net/ Disk Allocation Viewer] {en} - Visualisierung der Fragmentierung von ext2/3 # tag: System