Upgrade to Pro — share decks privately, control downloads, hide ads and more …

NTFS On Disk Structure

NTFS On Disk Structure

Paper zum Vortrag der NFTS On Disk Structure (Stand 2002)

#cc-by #from-slideshare
https://www.slideshare.net/gerritbeine/ntfs-on-disk-structure

Gerrit Beine

January 01, 2002
Tweet

More Decks by Gerrit Beine

Other Decks in Programming

Transcript

  1. Windows 2000 NTFS On-Disk Structure Gerrit Beine Inhalt 1. Volumes

    2. Cluster 3. Master File Table 4. Mounten von Datenträgern 5. Dateiverweisnummern 6. Datensätze 7. Dateinamen 8. Attribute 9. Verzeichnisindizierung 10. Komprimierung 1. Volumes NTFS betrachtet primäre und logische Partitionen als Volumes (Datenträger). Es ist möglich mehrere Volumes zu RAID-Volumes zusammenzufassen, um z.B. die Datenträgergröße zu erweitern oder um Datenträger zu spiegeln. Die Struktur der Volumes ist von verwendeten Dateisystem abhängig (Windows 2000 unterstützt FAT und NTFS). 2. Cluster Cluster bestehen aus 1,2,4... physischen Sektoren der Festplatte. Ihre Größe beträgt 512, 1024 oder 2048 Bytes. Durch die Verwendung von Clustern ist NTFS unabhänig von der physischen Sektorgröße (es unterstützt auch Datenträger, deren physische Sektoregröße nicht 512 Byte ist) und kann sehr große Datenträger unterstützen. Auf größeren Datenträgern kann ein größerer Clusterfaktor, der bei der Formatierung bestimmt wird, die Fragmentierung reduzieren, was allerdings mehr Speicherplatz benötigt (die doppelte bzw. vierfache Menge eines 512 Byte-Clusters). NTFS weist allen Clustern auf einem Datenträger logische Clusternummern durch, die fortlaufend sind. In einer Datei verwendet es zusätzlich virtuelle Clusternummern, die jeweils einer logischen Clusternummer zugeordnet sind und innerhalb der Datei fortlaufend sind. (s.u.)
  2. 3. Master File Table Die Master File Table ist die

    zentrale Verwaltungsstruktur eines mit NTFS formatierten Datenträgers. Sie besteht aus 1024 Byte großen Datensätzen, von denen den ersten sechzehn besondere Bedeutung zukommt. Diese enthalten z.B. die MFT (bzw. einen Verweis auf die Datei) selbst, einen verweis auf die Kopie der MFT, die Datenträgerbelegungstabelle, die Tabelle mit Beschädigten Sektoren usw. Für jede Datei existiert ein solcher Datensatz, für sehr große Dateien können auch mehrere nötig sein. 0 $Mft - MFT 1 $MftMirr - MFT-Kopie 2 $LogFile - Protokolldatei 3 $Volume - Datenträgerdatei 4 $AttrDef - Attributdefinitionstabelle 5 \ - Stammverzeichnis 6 $Bitmap - Clusterzuordnungstabelle 7 $Boot - Startsektor 8 $BadClus - Bad-Cluster-Datei 9 $Secure - Sicherheitseinstellungen 10 $UpCase - Großbuchstabenabbildung 11 $Extend - Erweiterte Metadaten 12 Nicht verwendet ... ... 15 Nicht verwendet 16 Benutzerdaten und Verzeichnisse Beispiele für wichtige Metadatendateien sind z.B. die Protokolldatei (LogFile, dient zur Aufzeichnung aller Operationen auf dem Datenträger) und die Clusterzuordnungstabelle (Bitmap), in der alle belegten Cluster markiert werden, sowie die Datei BadClus, in der beschädigte Cluster gespeichert werden. 4. Mounten Beim der ersten Initialisierung eines Datenträgers liest NTFS den MFT-Datensatz aus dem Startsektor. Anschließend werden die Zuordnungen der Virtuellen Clusternummern der MFT-Datei auf die logischen des Datenträgers aus dem Datensatz gelesen und im Speicher abgelegt. Dies ist für alle folgenden Schritte notwendig, um die einzelnen Runs (s.u.) aus denen die MFT besteht lesen zu können. Sollte die MFT beschädigt sein, wird die Kopie der MFT verwendet, die in der Mitte des Datenträgers liegt. Danach lädt NTFS weitere Metadatendateien, sofern diese benötigt werden (z.B. LogFile, Bitmap und BadClus). 5. Dateiverweisnummern NTFS verwendet 64-Bit-Werte um eine Datei zu identifizieren. Diese Werte bestehen aus einer 16-Bit- Sequenznummer und einer 48-Bit-Dateinummer. Die Dateinummer bezieht sich auf die Position der Datei auf dem Datenträger, die Sequenznummer dient der NTFS-internen Konsistenzprüfung. 6. Dateidatensätze Für NTFS bestehen Dateien aus einer Ansammlung von Attributen und Werten. Wichtige Attribute sind z.B. die Standardinformationen, wo Schreibschutz und Zeitstempel gespeichert werden, die Dateinamen (es kann mehrere geben) sowie das Datenattribut, das den eigentlichen Dateiinhalt enthält, bei Verzeichnissen die sog. Indexwurzel (s.u.).
  3. Beispieldatensatz mit drei Attributen 7. Dateinamen NTFS erlaubt Dateinamen bis

    zu 255 Zeichen. Die Namen dürfen Zeichen aus dem Unicode-Zeichensatz enthalten und entsprechen dem POSIX-Standard. D.h. es ist möglich mehrere Punkte und Leerzeichen aufeinander folgen zu lassen, auch am Dateiende. Dateinamen für MS-DOS werden in einem zweiten Filename-Attribut im Datensatz der Datei gespeichert. (Ähnlich den Hard Links im POSIX-Standard.) Datensatz mit MS-DOS-Namen 8. Attribute, Attribute bestehen aus einem Header und einem Wert (Value). Es gibt residente und nichtresidente Attribute. Bei residenten Attributen werden Header und Wert im Datensatz gespeichert. Bei nichtresidenten Attributen wird nur der Header im Datensatz gespeichert, der Wert wird in sogenannten Runs abgelegt. Der Header eines Attributes enthält Informationen darüber, ob ein Attribut resident ist oder nicht. Ist das Attribut resident enthält er weiterhin die Länge sowie den Offset des Header bis zum Wert. Header der Attribute Bei kleinen Dateien und Verzeichnissen werden Datenattribut bzw. Indexwurzel direkt im Datensatz gespeichert. Dies ermöglicht einen sehr schnellen Zugriff, da nur einmal auf den Datenträger zugegriffen werden muss. Beispiele für immer residente Attribute sind die Standardinformationen sowie der Dateiname. Datensatz für ein kleines Verzeichnis Für große Dateien und Verzeichnisse werden sogenannte Runs oder Indexpuffer verwendet um die Daten bzw. den Verzeichnisinhalt zu speichern. Diese Attribute sind dann nichtresident. Bei einem nichtresidenten Datenattribut wird innerhalb des Datensatzes eine Zuordnungstabelle angelegt, die die virtuellen Clusternummern für diese Datei den logischen Clusternummern auf dem Datenträger zuweist, sowie die Anzahl der Cluster, die der Runs belegt, speichert.Für jeden Run wird ein neuer Eintrag angelegt. Bei extrem großen Dateien kann es passieren, daß diese Zuornungstabelle auch in einem Run abgelegt werden muß. 9. Verzeichnisindizierung Für Verzeichnisse werden Indexpuffer angelegt, die im Aufbau den Runs ähneln, jedoch immer 4 KByte groß sind. Die Indexpuffer werden aber so angelegt, dass sie einen B+-Baum implementieren, was das schnelle Auffinden von Verzeichnissen ermöglicht. Wurzel des B+-Baums ist die Indexwurzel. Die Dateieinträge enthalten Verweise auf die Dateidatensätze in der MFT, sowie ein Zeitstempel und die Dateigröße. Die Indexallocation (VCN-LCN-Zuordnungstabelle) dient wie auch in den Runs für Dateien für das Auffinden der physischen Orte der Indexpuffer. In der Bitmap werden die belegten VCNs markiert. Pro Indexpuffer können 20 bis 30 Dateieinträge gespeichert werden. 10. Datenkomprimierung NTFS komprimiert Dateien auf zwei verschiedene Arten. Einerseits werden Daten mit geringer Dichte (Daten mit vielen Nullen im Vergleich zu ihrem Umfang) sowie umfangreiche Daten. Bei Daten mit geringer Dichte werden Cluster, die nur Nullen enthalten im Datenattributeintrag des Standardinformationen Dateiname Daten Standardinformationen Dateiname MS-DOS-Dateiname Daten Standardinformationen Dateiname Daten Standardinformationen Dateiname Index Datei 1 Datei 2 Datei 3
  4. Datensatzes weggelassen. Dies spart einerseits Speicherplatz und beschleunigt andererseits den

    Zugriff auf diese Dateien, da NTFS beim Zugriff auf nicht zugeordneten Speicher nur Nullen zurückliefert, ohne auf den Datenträger zuzugreifen. Unkomprimierte Daten, pro Run werden 4 Cluster verwendet Komprimierte Daten, pro Run werden 16 Cluster verwendet, zwischen 16 und 31 wird jedoch ein kompletter Run weggelassen, der nur Nullen enthält Die Komprimierung umfangreicher Daten erfolgt nur, wenn mindestens ein Cluster gewonnen wird. NTFS ordnet komprimierten Daten Runs zu jeweils 16 Clustern zu. Können die Daten jedoch komprimiert werden, wird nur die Anzahl erforderlicher Cluster zugeordnet und im Datenattribut gespeichert. Unkomprimierte Daten, alle Runs bestehen aus 16 Clustern Komprimierte Daten, Clusterzahl wurde auf den nach der Komprimierung tatsächlich erforderlichen Wert reduziert Date n Start VCN Start LCN Clusterzahl 0 10 1 4 4 33 9 4 Date n Start VCN Start LCN Clusterzahl 0 10 1 16 32 33 9 16 Date n Start VCN Start LCN Clusterzahl 0 19 16 16 54 16 Date n Start VCN Start LCN Clusterzahl 0 19 4 16 54 8