Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Festplatte defragmentieren (https://www.delphipraxis.net/179167-festplatte-defragmentieren.html)

DelphiProgrammer 18. Feb 2014 11:38

Festplatte defragmentieren
 
Hallo

ich hab mir mal wieder was ausgedacht:

Ich will mit Delphi meine Festplatte defragmentieren.
Geht das, wenn ja wie und gibt es dafür auch eine (kostenlose) Komponente?

Aphton 18. Feb 2014 12:00

AW: Festplatte defragmentieren
 
Hihi, so "einfach" ist das nicht, dass man mal schnell ne Komponente aufs Formular zieht und dann auf Komponente.starteDefragmentierung() aufruft..

Zuerst einmal musst du rausfinden, welches Dateisystem (NFTS/FAT12/FAT16/FAT32/EXT/EXT2..4/....) auf der Festplatte, die zu defragmentieren ist, läuft. Dann musst du dich da erstmal reinarbeiten - du musst wissen, wie alles organisiert ist (Fragmente, Speicherblöcke, Headerdaten usw. usf.).
Anschließend musst du Objekte finden, die aus mehreren Fragmenten besteht, diese dann letzendlich zu einem einzigen großen Fragment zusammenfügen.. Dazu gibts auch verschiedene Möglichkeiten (siehe Wikipedia).

Ich weiß nicht, inwiefern nicht betriebssystemeigene Anwendungen bei laufendem Betrieb eine Defragmentierung durchführen können.. Ganz sicher gehts, wenn du eine externe Platte defragmentieren willst, da dieser ja nicht grad gebraucht wird und somit nicht "läuft".

Deine Frage ist übrigens auch nicht klar - willst du den Prozess der Defragmentierung selber programmieren oder willst du einfach die systemeigene Defragmentierung automatisieren indem du es in deiner Anwendung ausführst? Zweiteres ist definitv einfacher und sollte eig. per Recherche leicht zu finden sein.. Ich gehe aber vom ersteren aus daher die lange Erklärung.

Edit: Am besten ist es natürlich, sich sein eigenes Dateisystem auszudenken. Das Projekt kann von einfach bis zu höchstkomplex gestaltet sein - einfach im Sinne von keine Sicherheitsvorkehrungen wie z.B. Journaling oder Locking..
Solch ein Projekt habe ich damals zeitgleich mit olee programmiert. Da er seins hier veröffentlich hat und unsere Projekte mehr oder weniger ident sind, habe ichs nicht getan..
Schaus dir mal an!

jaenicke 18. Feb 2014 12:33

AW: Festplatte defragmentieren
 
Hier ist der Einstieg in die Defragmentation API von Microsoft:
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

Die meisten Tools, die heute auf dem Markt erhältlich sind, nutzen diese. Es gibt nur wenige, die wirklich selbst die komplette Defragmentierung durchführen (wenn überhaupt noch, ich kenne keins).

Valle 18. Feb 2014 12:34

AW: Festplatte defragmentieren
 
Sind die Zeiten, in denen mal seine Festplatte defragmentieren muss nicht lange vorbei? :gruebel:

Das letzte mal dass ich eine Festplatte defragmentiert habe ist bestimmt 10 Jahre her. Jedes halbwegs gescheite Dateisystem heutzutage sollte wohl selbst defragmentierend sein. Zumindest unter Linux ist das lange schon kein Problem mehr.

Macht man das unter Windows echt immer noch? (gemeint ist natürlich NTFS, bzw. zumindest nicht FAT)

hathor 18. Feb 2014 12:57

AW: Festplatte defragmentieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Bei WINDOWS 8 heisst der Dienst Laufwerke optimieren.
Der Service heisst defragsvc und wird 1x /Woche automatisch gestartet, wenn er nicht aus dem Taskplanner/Aufgabenplanung gelöscht wird.
Bei WINDOWS 7 ist das auch so.
Manuell kann man DFRGUI.EXE starten. -> siehe Anhang.
-
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.

Der geringen 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 z.B. Datenserver. 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.

http://wiki.ubuntuusers.de/Defragmentierung

himitsu 18. Feb 2014 13:26

AW: Festplatte defragmentieren
 
Zitat:

Zitat von Valle (Beitrag 1248344)
Sind die Zeiten, in denen mal seine Festplatte defragmentieren muss nicht lange vorbei? :gruebel:

Defragmentieren hat nicht nur was mit "Tempo" zu tun.

Auch in Bezug auf eine eventuelle Datenrettung sind Fragmentierte Dateien wesentlich besser, da man fragmentierte Dateien fast garnicht mehr zusammen bekommt, wenn die nötigen Zusammengehörigkeitsinfos (ala VolumeBitmap) defekt sind.



Aber bei SSDs und anderen dynmisch adressierten Speichermedien bringt das natürlich auch nicht viel.

hathor 18. Feb 2014 13:47

AW: Festplatte defragmentieren
 
Für SSD ist Defragmentierung überflüssig und ausserdem verboten.

BUG 18. Feb 2014 14:25

AW: Festplatte defragmentieren
 
Zitat:

Zitat von himitsu (Beitrag 1248350)
Aber bei SSDs und anderen dynmisch adressierten Speichermedien bringt das natürlich auch nicht viel.

Der ist gut ... gerade bei Flashspeichern ist es schädlich zu defragmentieren. Und solche Speicher (und Hybriden) werden sicher noch zunehmen.
Was die Datensicherheit betrifft, sollte man lieber die Zeit in ein Backup stecken.

Popov 18. Feb 2014 14:36

AW: Festplatte defragmentieren
 
Nun ja, die Frage nach dem Sinn von Defragmentierungsprogrammen heutzutage darf man sich ruhig stellen. Da wäre zuerst das Windows das im Grunde permanent irgendwie auf die Platte zugreift. Schon alleine die Registry wird permanent geändert. Und dann noch die zig Logs und sonstiges an das man gar nicht denkt. Defragmentierung war unter DOS sinnvoll, Windows macht alles durcheinander. Im Grunde ein Partition für das OS und eines für die Daten. Dann kann man gelegentlich die Daten defragmentieren (wenn man große Daten, wie z. B. Videos hat).

himitsu 18. Feb 2014 14:53

AW: Festplatte defragmentieren
 
SSDs halten schon ganz schön viele Schreibzyklen aus ... selbst mit Defragmentieren sollten die noch paar Jahrzehnte durchhalten.

Und wenn man mal einen DEFRAG-Befehl (so wie beim TRIM) einführt ... soooooo schnell hätte man dann noch nie defragmentiert.


Viele kleine defragmentierte Blöcke, bei häufig bearbeiteten Dateien, sind genauso schädlich.
Da ist es nach dem Defragmentieren besser, wenn dann wieder "komplette" Blöcke zusammenhängend geschrieben werden können.
-> Solange die Sektor-/Clustergröße nicht den Speicherblöcken der SSD entsprechen.

Wobei es dort ja reicht, wenn nur die nötigen Dateien neu angeordnet (defragmentiert) werden und es da egal ist, wo die auf dem Datenträger landen, denn Alles an den Anfang ist bei SSD ja vollkommen nutzlos.

Medium 18. Feb 2014 15:25

AW: Festplatte defragmentieren
 
Da bei SSDs intern fast immer eine "wear-leveling"-Logik arbeitet, die ohnehin komplett transparent die Daten wie wild auf die Zellen verteilt, kommt eine Defragmentierung von SSDs einem "in eine etwas andere, aber vermutlich ähnlich schlimme Unordnung bringen" gleich. Es macht in keinem Fall irgend welchen Sinn bei SSDs. Selbst wenn die Lebensdauer noch so hoch ist. Man gewinnt nix.

greenmile 18. Feb 2014 15:34

AW: Festplatte defragmentieren
 
Bei JK gibt es eine DLL, mit der sich das realisieren lässt:

http://www.kessels.com/jkdefrag/

ein wenig Googlen und die Implementierung kommt zu Tage, z.B. hier.

himitsu 18. Feb 2014 15:53

AW: Festplatte defragmentieren
 
Windows bietet seit Vista eine transparente und sichere API dafür.



Meine Entwicklungspartition ist mit kleinen Clustern formatiert, die nur ein Bruchteil der Speicherblöcke der SSD entsprechen. (wegen der Masse an kleinsten Dateien und dem begrenzten Platz)

Also egal wie wild die eigentlichen Blöcke verteilt sind, es wird dennoch schneller/schonender, wenn die Dateien in ganzen Blöcken gruppiert sind.

jaenicke 18. Feb 2014 15:54

AW: Festplatte defragmentieren
 
Zitat:

Zitat von greenmile (Beitrag 1248382)
Bei JK gibt es eine DLL, mit der sich das realisieren lässt:

Und auch diese nutzt die API von Microsoft.

// EDIT:
Und zu SSDs:
Bisher ist mir noch keine untergekommen, die durch defekte Blöcke aufgefallen ist. Die sind immer vorher komplett ausgefallen.

Namenloser 18. Feb 2014 19:46

AW: Festplatte defragmentieren
 
Defragmentieren kann schon noch was bringen, wenn man nicht einfach nur stumpf einzelne Dateien zusammenklebt wie der Windows-Defragmentierer. Mit MyDefrag (früher JkDefrag) hab ich gute Erfahrungen gemacht. Wenn man z.B. nach Ordnern sortiert, flutscht das Einlesen von Ordnern schon merklich besser (für eine Weile zumindest). Allerdings dauert der Defragmentiervorgang natürlich auch recht lange, wenn fast der komplette Inhalt neu angeordnet wird, und die Festplatte nutzt sich natürlich dabei auch ab. Von daher muss man sich überlegen, ob (bzw. wie oft) es einem das Wert ist.

Ich hab jetzt selber auch schon eine Weile nicht mehr defragmentiert, aber an meinem Dateisystem hat sich auch nicht so viel verändert, deshalb ist da auch kaum was fragmentiert. Bei größeren Festplattenkapazitäten fragmentiert der Inhalt eh nicht mehr so schnell (so lange man sie nicht komplett vollschreibt).

Aber ich denke in Zeiten von SSDs verliert das Thema langsam wirklich an Relevanz. Die Sachen, wo es auf Geschwindigkeit ankommt, packt man auf die SSD, und nur die großen Datenblöcke wie Filme kommen auf die Festplatte. Da kann dann eigentlich ohnehin kaum noch was fragmentieren, und wenn dann macht es sich nicht bemerkbar.

Also ich denke, es ist heute schlauer, Geld in eine SSD zu investieren als Zeit in Defragmentierung. Und Zeit in ein eigenes Defragmentierprogramm würde ich schon gar nicht mehr investieren, denn bis du das fertig hast, hat sich das Thema wahrscheinlich endgültig erledigt.

himitsu 18. Feb 2014 23:20

AW: Festplatte defragmentieren
 
In den letzten 10 Jahren sind mir auch kaum DP-ler aufgefallen, die sich überhaupt mal damit "etwas länger" beschäftigt hatten.

Ich glaub sakura hatte mal vor vielen Jahren hier einen eigenen Defragmentierer vorgestellt und ich hatte mich auch mal vor sehr vielen Jahren mal kurz damit beschäftigt (allerdings mehr nur um mal mit der API rumzuspielen und vorallem um die Fragmentierung anzuzeigen und zu analysieren, aber fast nicht das dann auch wirklich zu defragmentieren, bzw. ich hatte erstmal nur überlegt WIE und wohin man die Dateien effektiv defragmentiert).

p80286 20. Feb 2014 10:44

AW: Festplatte defragmentieren
 
Zitat:

Zitat von Namenloser (Beitrag 1248427)
... und die Festplatte nutzt sich natürlich dabei auch ab. Von daher muss man sich überlegen, ob (bzw. wie oft) es einem das Wert ist.

Äh ja ist richtig, aber würdest Du es ablehnen zu Fuß zum Bäcker zu gehen weil sich die Sohlen Deiner Schuhe abnutzen?

Gruß
K-H

BUG 20. Feb 2014 11:52

AW: Festplatte defragmentieren
 
Zitat:

Zitat von p80286 (Beitrag 1248731)
Äh ja ist richtig, aber würdest Du es ablehnen zu Fuß zum Bäcker zu gehen weil sich die Sohlen Deiner Schuhe abnutzen?

Ich lehne es ab, 5-mal am Tag zum Bäcker zu gehen, um mir je ein Brötchen zu kaufen, wenn ich gerade eins brauche.
Dabei verbrenne ich Energie, nutze meine Schuhe unnötig ab und kann in der Zeit nichts anderes sinnvolles machen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz