Vermeiden einer extremen Fragmentierung komprimierter Systemabbilder unter NTFS

8

Problemerklärung

Ich speichere Windows-Disk-Images, die mit wbadmin erstellt wurden, auf einem NTFS-Laufwerk, und ich habe festgestellt, dass das Komprimieren mit NTFS-Komprimierung eine 1,5-2-fache Speicherplatzersparnis ergibt und dennoch die volle Verfügbarkeit für die Wiederherstellung bietet.

Beim Komprimieren werden Dateien jedoch wahnsinnig fragmentiert, normalerweise über 100'000 Fragmente für das System-Disk-Image.

Bei einer solchen Fragmentierung dauert die Defragmentierung sehr lange (mehrere Stunden pro Bild). Einige Defragmentierer können nicht einmal damit umgehen, sie überspringen einfach die Datei oder stürzen ab.

Die Ursache des Problems ist meiner Meinung nach, dass die Datei durch Blöcke komprimiert wird, die separat gespeichert werden.

Die Frage

Gibt es eine gute (schnelle) Möglichkeit, Bilddateien zu defragmentieren und dennoch komprimiert zu halten (oder ohne extreme Fragmentierung zu komprimieren)? Kann es ein Dienstprogramm sein, um Dateien schnell auf kontinuierlichen freien Speicherplatz zu defragmentieren, oder ein Dienstprogramm (oder eine Methode), um nicht fragmentierte komprimierte Dateien aus vorhandenen nicht komprimierten Dateien zu erstellen?

Anmerkungen basierend auf Kommentaren / Antworten:

  1. Externe (zu Windows-Kernel) Komprimierungswerkzeuge sind in meinem Fall keine Option. Sie können Dateien nicht im laufenden Betrieb dekomprimieren (um 10-GB-Dateien zu dekomprimieren, benötige ich 10 GB frei, was nicht immer zur Hand ist; außerdem dauert es sehr lange); Sie sind nicht verfügbar, wenn das System zur Wiederherstellung von einer DVD gestartet wird (genau dann, wenn ich das verfügbare Image benötige). Bitte hören Sie auf, sie anzubieten, es sei denn, sie erstellen transaprent komprimierte Dateien auf ntfs, wie z compact.exe.
  2. Die NTFS-Komprimierung ist für Systemimages nicht so schlecht. Es ist ziemlich gut, bis auf die Fragmentierung. Die Dekomprimierung nimmt nicht viel CPU-Zeit in Anspruch und verringert dennoch den E / A-Engpass, der in geeigneten Fällen zu einer Leistungssteigerung führt (nicht fragmentierte komprimierte Datei mit einem signifikanten Verhältnis).
  3. Defragmentierungsdienstprogramme defragmentieren Dateien ohne Rücksicht darauf, ob sie komprimiert sind. Das einzige Problem ist die Anzahl der Fragmente, was zu einem Defragmentierungsfehler führt, unabhängig davon, ob fragmentierte Dateien komprimiert sind oder nicht. Wenn die Anzahl der Fragmente nicht hoch ist (ca. 10000 sind bereits in Ordnung), wird die komprimierte Datei defragmentiert und bleibt komprimiert und intakt.
  4. Das NTFS-Komprimierungsverhältnis kann je nach Datei gut sein. Systemabbilder werden normalerweise auf höchstens 70% ihrer ursprünglichen Größe komprimiert.

    Paar Screenshots für diejenigen, die nicht glauben, aber ofc, können Sie Ihre eigenen Tests machen.

  5. Ich habe tatsächlich Wiederherstellungen von NTFS-komprimierten Bildern durchgeführt, sowohl fragmentiert als auch nicht fragmentiert. Es funktioniert. Bitte vertrauen Sie mir oder überprüfen Sie es einfach selbst. rem: Wie ich vor ungefähr einem Jahr festgestellt habe, funktioniert es unter Windows 8.1 nicht. Es funktioniert immer noch unter Windows 7, 8 und 10.

Erwartete Antwort:

eine Arbeitsmethode oder ein Programm für Windows, um entweder:

  1. komprimieren Sie die Datei (mit NTFS-Komprimierung und halten Sie sie für Windows Recovery zugänglich), ohne viele Fragmente zu erstellen (möglicherweise auf einer anderen Partition oder erstellen Sie eine komprimierte Kopie; sie muss auf der Festplatte mindestens dreimal schneller sein als compact+ defrag).

    oder

  2. zu schnell (mindestens 3x schneller als Windows-Defragmentierung auf der Festplatte) defragmentieren Sie verheerend fragmentierte Dateien, z. B. Dateien mit mehr als 100 KB Fragmenten (sie müssen nach der Defragmentierung komprimiert bleiben).

LogicDaemon
quelle
Ich finde es ziemlich seltsam für NTFS, so viel zu komprimieren (da reale Tests nur einen Rückgang von 2 bis 5% zeigen). Außerdem bietet NTFS einige Sicherheitsvorkehrungen hinsichtlich der Dateifragmentierung (z. B. Journaling). Wie groß sind die Dateien (vorher und nachher)? Aus dem Bild geht auch hervor, dass Defraggler komprimierte Dateien nicht defragmentieren kann.
Doktoro Reichard
1
1. Sie können Windows-Images selbst erstellen und komprimieren. Es ist wirklich leicht zu komprimieren, mindestens 1,5x (60-70% oder Originalgröße). 2. Ja, Defraggler und andere Defragmentierer KÖNNEN komprimierte Dateien defragmentieren. Dies ist eine reale Erfahrung.
LogicDaemon
Auch das Komprimierungsverhältnis ist nicht thematisch, aber hier sind echte Bilder von wirklich frisch installierten Windows 7 Professional-Systemen (meistens 32-Bit-, 3- oder 4 64-Bit-Systeme) mit Standard-Software: i.imgur.com/C4XnUUl .png
LogicDaemon
@DoktoroReichard es kommt auf den Inhalt der Dateien an. Textdateien und Dateien mit geringer Dichte weisen ein sehr gutes Komprimierungsverhältnis auf. Normalerweise vermeide ich Dateien, die bereits komprimiert sind, wie Zip-Dateien, Bilder, Audio- / Videodateien ... und nach dem Komprimieren finde ich oft 10-20%
weniger

Antworten:

4

Fragmentierung vermeiden

Das Geheimnis ist, zunächst keine unkomprimierten Dateien auf die Festplatte zu schreiben.

In der Tat wird eine bereits vorhandene große Datei nach dem Komprimieren aufgrund der Art des vorhandenen NTFS-Komprimierungsalgorithmus schrecklich fragmentiert.

Stattdessen können Sie diesen Nachteil ganz vermeiden, indem Sie das Betriebssystem dazu bringen, den Inhalt einer Datei im laufenden Betrieb zu komprimieren, bevor Sie ihn auf die Festplatte schreiben. Auf diese Weise werden komprimierte Dateien wie normale Dateien auf die Festplatte geschrieben - ohne unbeabsichtigte Lücken. Zu diesem Zweck müssen Sie einen komprimierten Ordner erstellen. (Auf die gleiche Weise, wie Sie zu komprimierende Dateien markieren, können Sie zu komprimierende Ordner markieren.) Anschließend werden alle in diesen Ordner geschriebenen Dateien im laufenden Betrieb komprimiert (dh als Streams komprimierter Blöcke geschrieben). Auf diese Weise komprimierte Dateien können immer noch etwas fragmentiert sein, aber es ist weit entfernt von dem Durcheinander, das durch die direkte NTFS-Komprimierung entsteht.

Beispiel

NTFS komprimierte 232 MB System-Image auf 125 MB:

  • Durch die direkte Komprimierung wurden satte 2680 Fragmente erstellt!
  • Durch die On-the-Fly-Komprimierung wurden 19 Fragmente erstellt.

Defragmentierung

Es ist richtig, dass NTFS-komprimierte Dateien für einige Defragmentierungswerkzeuge ein Problem darstellen können. Zum Beispiel kann ein Tool, das ich normalerweise verwende, nicht effizient damit umgehen - es verlangsamt sich zu einem Crawl. Ärgern Sie sich nicht, der alte vertrauenswürdige Contig von Sysinternals erledigt die Aufgabe, NTFS-komprimierte Dateien schnell und mühelos zu defragmentieren!

Slider2k
quelle
2

Lesen Sie den Artikel auf Wikipedia über die NTFS-Komprimierung :

Dateien werden in 16-Cluster-Blöcken komprimiert. Bei 4-kB-Clustern werden Dateien in 64-kB-Blöcken komprimiert. Wenn durch die Komprimierung 64 kB Daten auf 60 kB oder weniger reduziert werden, behandelt NTFS die nicht benötigten 4 kB-Seiten wie leere, spärliche Dateicluster - sie werden nicht geschrieben.

Dies ermöglicht angemessene Direktzugriffszeiten - das Betriebssystem muss nur der Fragmentkette folgen.

Große komprimierbare Dateien werden jedoch stark fragmentiert, da jeder Block <64 KB zu einem Fragment wird.

Das wichtigste zuerst. WBAdmin ist im Wesentlichen ein Sicherungsdienstprogramm, mit dem ein vollständiges System wiederhergestellt werden kann. Es wird also erwartet, dass die Ausgabedatei groß ist (> 4 GB). Wie das Zitat zeigt, werden große Dateien schnell fragmentiert. Dies liegt an der Art und Weise, wie NTFS komprimiert: nicht nach Dateien, sondern nach Sektoren.

Eine gute Analogie besteht darin, dass ein Kuchen in mehrere Kisten aufgeteilt wird, von denen einige nicht leer sind. Dies ist die ursprüngliche Datei. Der Kompressionsteil drückt die Kuchenstücke zusammen und lässt einen Platz in den Kisten. Da die Kuchenstücke aufgrund des geschaffenen Raums nicht zusammen sind, werden die Stücke, aus denen der Kuchen besteht, fragmentiert.

Ich bin immer noch skeptisch, ob NTFS ein solches Komprimierungsverhältnis herausgibt. Laut einem Test von MaximumCompression für mehrere Dateien erhält NTFS die niedrigste Punktzahl im Komprimierungsverhältnis, nämlich nur 40%. Aus persönlicher Erfahrung kann ich Ihnen sagen, dass es viel niedriger ist, tatsächlich so niedrig, dass ich mich nie darum gekümmert habe, es zu verwenden, noch habe ich seine Auswirkungen gesehen.

Der beste Weg, um eine Fragmentierung zu vermeiden, besteht darin, sich nicht mehr auf NTFS zu verlassen. Die meisten Defragmentierer können die komprimierten Dateien nicht erweitern oder verschieben. Wenn dies irgendwie der Fall wäre, könnte NTFS die Dateien nicht erweitern, oder wenn er könnte, da der Defragmentierungsprozess den verbleibenden Speicherplatz aus der Komprimierung (4 KB) ausfüllen würde, würde die Erweiterung die Dateien fragmentieren, wie dies die Datei nicht tun würde in den vorher zusammenhängenden Clustern geschrieben werden.

Wenn Sie die Datei nicht ständig lesen müssen, verwenden Sie einige der im obigen Link empfohlenen Formate. 7z und rar sind sehr effizient (dh sie komprimieren zu einem angemessenen Zeitpunkt mit hohen Verhältnissen). Wenn Sie sich für Raum und nicht für Zeit interessieren, wählen Sie einen PAQ-Algorithmus (obwohl Sie sehr viel Zeit damit verbringen werden, die Dateien zu komprimieren und zu dekomprimieren). Es stehen auch schnelle Algorithmen zur Verfügung.

Wenn Sie die Datei ständig lesen müssen, komprimieren Sie sie überhaupt nicht. NTFS ist einfach zu verdammt chaotisch.

Doktoro Reichard
quelle
Diese Quelle (siehe Wikipdia) enthält tatsächlich gute, wenn auch technische Informationen über den gesamten Prozess.
Doktoro Reichard
Das Komprimierungsverhältnis ist nicht zum Thema gehörend, aber hier sind echte Bilder von wirklich frisch installierten Windows 7 Professional-Systemen (meistens 32-Bit-, 3- oder 4 64-Bit-Systeme) mit Standard-Software: i.imgur.com/C4XnUUl.png Durch die Komprimierung spare ich wirklich Speicherplatz. Und ich kann Dateien danach defragmentieren, aber es dauert zu lange.
LogicDaemon
Und zum "Vermeiden" der NTFS-Komprimierung: Ich mache das seit Jahren und es funktioniert fast einwandfrei, bis auf die Fragmentierung. Aufgrund von Leistungsproblemen sollte es nicht für Dateien verwendet werden, auf die häufig zugegriffen wird, aber die meisten ausführbaren Dateien und Texte sind sehr gut komprimiert. Außerdem werden sequenziell geschriebene Dateien wie Protokolle nicht so stark fragmentiert, dass sie noch komprimiert werden. Und natürlich sind komprimierte Systemabbilder perfekt wiederherstellbar, werden so oft ausgeführt, und Sie müssen sie nicht explizit "erweitern". Dies wird offensichtlich automatisch vom NTFS-Treiber by-block in-memory ausgeführt.
LogicDaemon
1
Ich kann nicht wirklich mit den Ergebnissen streiten (und für die Aufzeichnung habe ich die tatsächlichen Testergebnisse angegeben, die Ihren ähnlich waren, und meine persönliche Erfahrung, die veraltet zu sein scheint). Der Link, den ich im Kommentar angegeben habe, enthält Informationen darüber, warum das Fragmentierungsproblem nicht vermieden werden kann. In dem Wikipedia-Artikel heißt es auch, dass Windows beim Booten die Komprimierungsbibliothek für NTFS noch nicht geladen hat und sich auch nicht sicher über den Wiederherstellungsprozess ist. Dies könnte einen Einblick geben.
Doktoro Reichard
Danke dann, aber es ist nicht die Antwort, die ich bekommen wollte :) Ich hatte gehofft, dass es eine Möglichkeit gibt, komprimierte, aber nicht fragmentierte Dateien zu erhalten, indem ich sie nacheinander schreibe oder Blöcke mit der gleichen Größe wie der Komprimierungsblock. Oder es gibt ein wirklich effizientes Defragmentierungsprogramm, mit dem einzelne Dateien schnell defragmentiert werden können, wenn genügend kontinuierlicher freier Speicherplatz dafür vorhanden ist.
LogicDaemon
0

Obwohl dies nicht genau das ist, was OP verlangt hat, habe ich gute Erfahrungen mit einer Software von Drittanbietern namens Paragon gemacht. NTFS zerstört per Definition Ihr Dateisystem schrecklich, wenn Sie Dateien komprimieren (oder manchmal sogar schreiben). Dies erstreckt sich auf das Konsumieren mehrerer MFT-Einträge und ... Es ist schlecht. Der NTFS-Treiber von Microsoft bereinigt dies nicht einmal, wenn eine Datei defragmentiert wird. Daher sind Tools von Drittanbietern erforderlich. Mit Paragon können Sie es entweder als eigenständiges Betriebssystem (ISO-Image) starten oder auf einem anderen Windows-Betriebssystem mit Zugriff auf das Zieldateisystem installieren. Dann können Sie sowohl die MFT als auch die Dateien defragmentieren. Dies ist meines Wissens die einzige Möglichkeit, diesen Mangel an NTFS zu beheben, ohne das Volume neu zu formatieren.

(Ich habe keine Beziehung zum Tool oder seinem Schöpfer, außer es ist das einzige, was ich gefunden habe, um tatsächlich zu funktionieren.)

Heute, 2 Jahre nachdem die Frage anscheinend gestellt wurde, würde ich eher die Deduplizierung empfehlen - dies kann zu einer Festplattenersparnis von über 90% führen, wenn die Bilder nur "ein wenig" anders sind. Ein W2016 Nano Server in einer VM funktioniert wirklich gut, aber ich vermute, dass sogar FreeNAS oder alles andere, das ZFS verwendet, damit umgehen könnte.

Mike
quelle
eine URL oder einen genaueren Namen als nur "Paragon"? Google versteht mich nicht. Ich kenne das Softwareunternehmen Paragon, weiß aber nichts über seine Produkte, die NTFS-Dateien defragmentieren (es gibt ein MFT-Defragmentierungstool, aber ich habe keine MFT-Probleme). Und danke für den ZFS-Vorschlag, ich werde mich darum kümmern, aber ich brauche ihn erneut, um vor Ort booten zu können, damit er schnell wiederhergestellt werden kann.
LogicDaemon
-1

Windows hat in letzter Zeit ZIP-Dateien wie Ordner behandelt. ZIP-Dateien können stärker komprimiert sein als NTFS-komprimierte Dateien und sind im Gegensatz zu NTFS nicht von Natur aus fragmentiert.

Testen Sie eines Ihrer Disk-Images, indem Sie es mit 7-zip im ZIP-Format komprimieren und prüfen, ob es direkt für die Wiederherstellung verwendet werden kann.

Wenn nicht, spielen Sie mit den 7-Zip-Komprimierungsparametern, um die Komprimierung mit dem am besten geeigneten Format zu maximieren, z. B. 7z. Sie können die Komprimierung weit über NTFS hinaus erhöhen und somit viel mehr Speicherplatz auf Ihrer Festplatte verfügbar machen - obwohl es am schnellsten wäre, auf eine zweite physische Festplatte oder einen zweiten RAM zu dekomprimieren, vorzugsweise auf einem anderen Controller- und E / A-Kabel.

FWIW: Die Komprimierung zahlt sich für Nicht-Sandman-SSDs für Systemfestplatten und für Nicht-Mediendateien aus - weniger Verschleiß der SSD, mehr Speicherplatz und schnellere E / A für nicht komprimierte Dateien. Siehe http://www.tomshardware.com/reviews/ssd-ntfs-compression,3073-9.html

Videos, Grafiken und andere komprimierte Datendateien (wie .XLSX) sind bereits stark komprimiert, sodass die NTFS-Komprimierung dort keinen Vorteil hat. Auch nicht für Datenbanken oder Outlook-E-Mails mit zufälligen Updates. Aber ausführbare Dateien, txt, html usw., Dateien, profitieren stark.

Die Komprimierung ist auch für kleine Dateien immer ein Gewinn, z. B. wenn <64 KB komprimiert sind, nur ein Fragment. Die Wiederherstellung wäre nur problematisch, wenn Festplattenprobleme auftreten.

Tom
quelle
1
Mann, Sie liegen in vielerlei Hinsicht falsch ... Hauptsächlich hat Windows ZIP-Dateien noch nie wie Ordner behandelt. Es gibt technische Gründe, warum dies nicht einmal passieren wird (im Grunde nur sequentieller Zugriff auf den Inhalt von Dateien). Der Explorer ermöglicht zwar das Verwalten von Zips ähnlich wie bei Ordnern (aber in sehr begrenzter Weise extrahiert er nicht einmal andere Dateien, wenn ich ein HTML aus Zip öffne), ist jedoch nicht Windows. Und in Frage erklärte ich, warum separate Dienstprogramme, sei es Explorer oder 7-Zip, nicht passen (siehe "Anmerkungen basierend auf Kommentaren / Antworten")
LogicDaemon
Übrigens: "Weniger Verschleiß auf der SSD": Wenn die SSD nicht groß genug ist, ist der Verschleiß doppelt so hoch. Denn beim Speichern komprimierter Dateien speichert Windows zuerst nicht komprimierte Cluster, komprimiert sie dann und speichert komprimierte Cluster (entfernt dann nicht komprimierte). Dies führt schließlich zu einer Fragmentierung meiner Frage. Samsung SSDs auf dem Link (übrigens defekt, "les" vom Schwanz entfernen) haben tatsächlich einen ausreichend großen Cache.
LogicDaemon
Nein, Windows behandelt Zip- und Cab-Dateien niemals als Ordner. Sie können ihren Inhalt (Datei- / Ordnernamen) direkt auf meinem Computer anzeigen , aber Sie können nicht transparent darauf zugreifen, wie bei einem Disk-Image oder einer komprimierten NTFS-Datei. Sie müssen die Datei noch aus dem Archiv extrahieren, um sie anzuzeigen / zu bearbeiten
phuclv