Hallo Guido!
Deine Fragen haben mich angespornt, selbst ein wenig zu recherchieren. Hier ein paar Ergebnisse:
Du hast oft nach der MFT gefragt. Die Master File Table (ist nicht $MFT, $MFT gibt nur an wo die Teile der Master File Table zu finden sind.
1) enthält die Dateinamen und die Dateiattribute
2. Für das was CloneVDI macht, nämlich die benutzte Blöcke/Cluster zu ermitteln, um sie anschließend in eine neue Datei zu schreiben, ist die MFT nicht sehr hilfreich, weil irrelevant. Was CloneVDI braucht ist der Hinweis, WO die benutzte Blöcke/Cluster sich befinden, denn CloneVDI will nur die benutzte Blöcke in die neue Datei (VDI) kopieren. Diese Information ist in der Datei &Bitmap enthalten
3,
4. Beide der vorher genannten Dateien sind Metadateien des NTFS Dateisystems. (Nummer eins hat eine übersichtliche Liste der NTFS Metadateien und Nummer 3 hat eine ausführliche Erklärung wofür die einzelne Metadateien durch das Dateisystem benutzt werden.) Wenn CloneVDI alle benutzte Blöcke/Cluster gesammelt hat, muss dennoch die VDI vervollständigt werden, damit die gewünschte "Festplattengröße" erstellt werden kann. Es sollte klar sein, dass wenn CloneVDI etwas anderes als NULL-Blöcke beim auffüllen in die neue VDI schreibt, dass der Effekt des Komprimierens nicht erreicht wird.
Nun, es gibt andere Dateisystemen als NTFS. (
Hier ist eine sehr informativen Wikipedia-Artikel auf Deutsch.
Hier ist eine große Liste unterschiedlichen Dateisysteme.)
Vorab möchte ich nur darauf hinweisen, dass "Vektor-Bitmap" eine schlechte Übersetzung von mir. Der korrekte Ausdruck ist "bit vector"
5,
6.
Ich habe zuerst in den Quellcode von CloneVDI geschaut und erkannt, dass nach benutzte Cluster gesucht und diese kopiert werden. Ich fragte mpack ob ich es richtig verstanden habe. In dem einen PM antwortete er, "... restricting the discussion to NTFS (because I have similar code for FAT and EXTx), I open the $BITMAP file which is a bit vector which maps all of the used clusters on the drive. If a cluster is unused then there is no need to copy it." Des Weiteren gab er an, "I make no use of the MFT in the compaction operation, except to look up the $BITMAP metafile. Otherwise I am not interested in files, only clusters." Wie ich bereits oben erklärt habe, wird die MFT nicht gebraucht, außer um die $Bitmap (nur NTFS) Metadatei zu finden. Dateien sind uninteressant, nur Cluster.
Ich wollte wissen, ob er bei anderen Dateisystemen ähnlich vorgeht. Dies bestätigte er, "EXTx has a bit vector very similar to that in NTFS, although it's segmented into chunks and distributed around the drive. FAT has no bitmap, instead it has the cluster chain table (i.e. the FAT structure which gives that filesystem its name), however this is very easily converted into a used/unused bitmap and thereafter the code is very similar." Die EXTx Dateisysteme haben eine ähnliche "bit vector" (In dieser
PDF Datei wird der Ausdruck "Bitliste" verwendet. Zu finden unter "1.4 Freispeicherverwaltung") wie in NTFS, jedoch ist segmentiert und über die gesamte Festplatte verteilt. FAT hat keine Bitliste, sondern eine verkettete Cluster-Liste, die leicht in eine benutzte/unbenutzte Bitliste umgewandelt werden kann und danach ist der Code sehr ähnlich.
Also, die Dateien als solche sind für CloneVDI unwichtig, es geht rein darum, die benutzte Cluster in Deiner Quell-VDI zu finden und diese in die neue Ziel-VDI zu kopieren. Ich hoffe Dir etwas mehr geholfen zu haben. Ich habe auf alle Fälle für mich was gelernt. Ich hoffe, mpack beantwortet noch eine Frage von mir und dann Teile ich sie auch mit.