2009-07-06 11 views
5

Was ist die Logik hinter Disk Defragmentierung und Disk Check in Windows? Kann ich das mit C# -Codierung machen?Logic in Disk Defragmantation & Disk Check

+2

Die Defragmentierung von Festplatten ist ein komplexes Thema und hängt vom zugrunde liegenden Dateisystem des Geräts ab, das Sie defragmentieren. Was genau willst du erreichen? – scwagner

+3

Warum sollten Sie die Datenträgerdefragmentierung in C# durchführen, wenn Sie das Konzept nicht kennen? –

+0

Ich mache eine systembasierte Anwendung. Ich möchte einen Disk Defragmentierer und Disk Checker darin implementieren. – Sauron

Antwort

7

Die Vollständigkeit halber ist hier ein C# API-Wrapper für die Defragmentierung:

http://blogs.msdn.com/jeffrey_wall/archive/2004/09/13/229137.aspx

Defragmentierungs mit diesem APIs (sein sollte) heutzutage sehr sicher. Sie sollten nicht in der Lage sein, das Dateisystem zu beschädigen, selbst wenn Sie es wollten.

Kommerzielle Defragmentierungsprogramme verwenden dieselben APIs.

+2

Der Unterschied besteht darin, dass die kommerziellen Unternehmen über Dateisysteme Bescheid wissen und das OP die Defragmentierung nicht einmal definieren konnte. Ich möchte, dass er weiß, was ein Auslöser ist, bevor ich ihm eine Waffe gebe. –

3

Betrachten Sie Defragmenting Files bei msdn für mögliche API-Helfer.

Sie sollten sorgfältig über die Verwendung von C# für diese Aufgabe nachdenken, da dies zu einem unerwünschten Overhead für das Marshalling in natives Win32 führen kann.

3

Wenn Sie die Logik für die Defragmentierung nicht kennen und das Dateisystem nicht selbst geschrieben haben, so dass Sie es nicht autoritativ auf Fehler überprüfen können, starten Sie einfach neue Prozesse mit 'defrag' und 'chkdsk' '?

1

Trotz seiner Wichtigkeit ist das Dateisystem nicht mehr als eine Datenstruktur, die Dateinamen in Listen von Festplattenblöcken abbildet. Und verfolgt Meta-Informationen wie die tatsächliche Länge der Datei und spezielle Dateien, die Listen von Dateien (z. B. Verzeichnisse) halten. Ein Datenträgerprüfer überprüft, ob die Datenstruktur konsistent ist. Das heißt, jeder Plattenblock muss entweder für die Zuweisung zu einer Datei frei sein oder zu einer einzelnen Datei gehören. Es kann auch nach bestimmten Fällen suchen, in denen eine Gruppe von Festplattenblöcken eine Datei zu sein scheint, die sich in einem Verzeichnis befinden sollte, aber aus irgendeinem Grund nicht.

Bei der Defragmentierung geht es darum, die Listen der Festplattenblöcke zu betrachten, die jeder Datei zugewiesen sind. Dateien werden in der Regel schneller geladen, wenn sie einen zusammenhängenden Satz von Blöcken anstelle von über die gesamte Festplatte verstreuten Blöcken verwenden. Und im Allgemeinen wird das gesamte Dateisystem am besten funktionieren, wenn alle verwendeten Plattenblöcke sich auf einen einzigen zusammenhängenden Bereich der Platte beschränken. Daher besteht der Trick darin, Festplattenblöcke sicher herum zu bewegen, um dieses Ziel zu erreichen, ohne das Dateisystem zu zerstören.

Die Hauptschwierigkeit besteht darin, diese Anwendung auszuführen, während eine Festplatte verwendet wird. Es ist möglich, aber man muss sehr, sehr, sehr vorsichtig sein, keinen offensichtlichen oder extrem subtilen Fehler zu machen und die meisten oder alle Dateien zu zerstören. Es ist einfacher, offline an einem Dateisystem zu arbeiten.

Die andere Schwierigkeit befasst sich mit den Komplexitäten des Dateisystems. Zum Beispiel wäre es viel besser, etwas zu bauen, das FAT32 statt NTFS unterstützt, weil das erstere ein sehr viel einfacheres Dateisystem ist.

Solange Sie Low-Level-Block-Zugriff und einige vernünftige Weise für den Umgang mit Nebenläufigkeit Probleme haben (am besten durch Arbeiten am Dateisystem, wenn es nicht verwendet wird) können Sie dies in C#, Perl oder jeder Sprache tun du magst.

ABER SEHR VORSICHTIG. Frühe Versionen des Programms werden ganze Dateisysteme zerstören. Spätere Versionen werden dies tun, aber nur unter obskuren Umständen. Und die Benutzer werden extrem wütend und streitsüchtig, wenn Sie ihre Daten zerstören.

+0

Danke Philips, Dies kann mir eine Lösung geben. – Sauron

+1

Es gibt Windows-APIs für die Defragmentierung, die völlig sicher sind und auf dem NTFS-Dateisystem funktionieren. – andreialecu

3

Mark Russinovich schrieb vor kurzem einen Artikel Inside Windows NT Disk Defragmentation, der eingehende Details gibt. Wenn Sie das wirklich tun möchten, würde ich Ihnen wirklich empfehlen, die eingebauten Möglichkeiten zur Defragmentierung zu verwenden. Mehr noch, auf neueren Betriebssystemen habe ich nie einen Bedarf als Benutzer gesehen, der sich sogar um Defragmentierung kümmert; es wird automatisch nach einem Zeitplan gemacht und die NTFS-Leute bei MS sind definitiv klüger bei diesem Zeug als du (tut mir leid, aber sie tun das schon seit einiger Zeit, du nicht).

+0

Dieser Artikel ist sehr hilfreich. – Sauron