[© 2004 ZWAGA.COM,  vrij te gebruiken, mits deze bron wordt vermeld. De door ons gebruikte bronnen dienen ook vermeld te worden]
 

[ terug]

NTFS           (wordt nog aan gewerkt!!)

 

 

 

 

Het New Technology File System is door Microsoft geïntroduceerd als het filesysteem voor Windows NT. NTFS heeft een reeks aan geavanceerde mogelijkheden, welke FAT(16/32) niet heeft. De belangrijkste daarvan is de mogelijkheid om op file- en folder-niveau beveiligingen te kunnen aanbrengen, om te tegelen wie toegang heeft tot die file/folder en op welke wijze. Verder gebruikt NTFS transactie logs, om te kunnen herstellen van een disk-fout. Compressie, encryptie, reparse points, disk quota, link tracking, volume shadow copies, distributed file system en file system replication zijn andere bijzondere mogelijkheden met dit filesysteem.

 

De structuur van NTFS is aanmerkelijk anders dan bij FAT, en de beperkingen zijn aanmerkelijk minder dan bij FAT. NTFS loopt echter ook tegen de fysieke beperkingen van disks op. Wel wordt net als bij FAT bij het formatteren een Master Boot Record (MBR) gemaakt (of een GPT). Maar in de System-ID wordt 0x07 gezet om aan te geven dat het een NTFS-volume is. De bootsector verwijst altijd naar het NT-bootbestand NTLDR, in de root van de systeempartitie (het bootable volume). NTLDR zorgt voor hardware detectie met NTDETECT.COM en geeft vervolgens de besturing over aan NTOSKRNL.EXE in de Windowsfolder op het bootvolume. Waar zich dat bevindt staat in BOOT.INI in de root van de systeempartitie.

 

\ (root)

bevat NTLDR, NTDETECT.COM en BOOT.INI

 

\windows of \Winnt

met OS-files

 
Systeempartitie Bootpartitie
 
 

Meestal C:

Bijv. D:

maar bootpartitie en systeempartitie zijn vaak het zelfde.

 

De partitie waarop NTFS wordt gebruikt, wordt ingedeeld in clusters (of LBA's op een GPT-disk). De clusteromvang is evenwel kleiner dan bij FAT.

 

NTFS

Omvang clusternummer

64 bits worden gebruikt om een clusternummer aan te geven

Aantal clusters

264 theoretisch. 232 is de implementatiewaarde

Max. bruikbare clusters

232 -1

clustergroottes

Tot volume grootte clustergrootte
512 MB 512 bytes
1024 MB 1 KB
2 GB 2 KB
2 TB 4 KB

 

Backup van boot sector

ja

Ondersteund door

Alle netwerk OS-en van Microsoft (NT-versies), sommige Linux en Unix versies

Opmerkingen

Bij gebruik van meer dan 300.000 files is het verstandig lange bestandsnamen generatie niet te gebruiken voor betere prestaties

Compressie

Ja (bij clustergrootte <= 4KB)

Bestandsbeveiliging

Ja

Indeling van het begin van het volume

Boot Sector

Master File Table

File System Data

Master File Table Copy

Max. file grootte

16TB – 64 KB

Files/volume 232 - 1 file = 4.294.967.295 files

Dit zijn evenwel standaardwaarden. Bij het formatteren van een volume is het mogelijk een andere clustergrootte te selecteren tot 64 KB. Het is belangrijk te bepalen wat voor soort bestanden op de partitie worden geplaatst. Grote bestanden kunnen efficiënter worden opgeslagen op grote clusters, kleine clusters werken efficiënter voor kleine bestanden. Grote clusters (groter dan 4 KB), hebben evenwel weer het nadeel dat compressie niet meer mogelijk is. 

 

 

 

 

 

 

 

 

 

 

 

Volume indeling van een NTFS partitie

 

 

  MFT zone 12,5% van het volume

 

 

 

 

 

 

 

 

 

 

 

Data

 

 

Data

 

   ▲MFT (± 16KB)

Bootsector

 

 

Kopie eerste 4 MFT records 

midden op de partitie of aan het eind

 

 

Bootsector van een NTFS-volume

Hier worden bij het formatteren 16 sectoren voor gereserveerd.

Een CPU jump instructie 3 bytes Het MBR geeft de uitvoering door de CPU aan de bootsector van de partitie door. Deze 3 eerste bytes moeten daarom een CPU-instructie bevatten. Met deze instructie wordt de besturing doorgegeven aan code elders in de boot sector. Deze instructie is nog OS-onafhankelijk. De instructie daarna zijn afhankelijk van welk OS het volume heeft geformatteerd.
De OEM identificatie 8 bytes Hiermee wordt de naam en het versienummer van het OS aangegeven welke gebruikt werd voor het formatteren. (B.v. "NTFS    ") Nieuwere NT-versies gebruiken dit niet meer. Dus kan een geconverteerde disk nog een ID bevatten van Windows 95OSR2/98/ME ("MSWIN4.0" of "MSWIN4.1")
Het BIOS Parameter Block (BPB) 25 bytes Hierin staat informatie over de indeling van de disk, en waar het laadprogramma voor de disk is opgeslagen,
 

 

 

 

 

 

komen overeen met FAT

veld

#bytes Uitleg

Bytes/sector

(BPB_BytsPerSec)

2 Is meestal 512. Maar 1024, 2046, of 1096 zijn ook geldige waarden

Sectors/cluster

(BPB_SecPerClus)

1 Het aantal sectoren in een cluster. Geldige waarden zijn 1, 2, 4, 8, 16, 32, 64 en 128.

gereserveerde sectors

(BPB_RsvdSecCnt)

2 Is voor NTFS altijd 0. De bootsector bij NTFS staat altijd aan het begin van de partitie.

Aantal FAT's

(BPB_NumFATs)

1 Het aantal kopieën van de FAT op dat volume. Dit is NTFS, dus 0.

Root Entries

(BPB_RootEntCnt)

2 Moet 0 zijn voor NTFS

Small Sectors

(BPB_TotSec16)

2 Moet 0 zijn voor NTFS

Media Descriptor

(BPB_Media)

1

Geeft het soort medium aan:

0xF8 = harddisk

0xF0 = 3,5 inch high density floppy

(Wordt door NT niet meer gebruikt)

Sectors/FAT

(BPB_FATSz16)

2 Moet 0 zijn voor FAT32

Sectors/Track

(BPB_SecPerTrk)

2 Wordt door NTFS niet gebruikt of gecontroleerd

Aantal heads

(BPB_NumHeads)

2 Wordt door NTFS niet gebruikt of gecontroleerd

Verborgen sectors

(BPB_HiddSec)

4 Wordt door NTFS niet gebruikt of gecontroleerd

Large sectors

(BPB_TotSec32)

4 Moet 0 zijn voor NTFS
Het uitgebreide BPB 48 bytes Aanvullende informatie over o.a. de disk en de MFT
 

veld

#bytes  

Sectors/FAT

4 Wordt door NTFS niet gebruikt of gecontroleerd

Totaal aantal Sectoren

8 64 bits zijn dus beschikbaar voor het adresseren van clusters of LBA's. Dat levert een theoretisch partitie grootte van 264 op.
Clusternr voor $MFT 8 Specificeert logische locatie van de MFT
Clusternr voor $MFTMirr 8 Specificeert logische locatie van de MFT kopie
Clusters/MFT 1 Specificeert de grootte van elk MFT-record. Files welke kleiner zijn dan deze waarde komen in het geheel in de MFT te staan
0x00 t/m 0x7F clusters /MFT-record
0x80 t/m 0xFF file record is 2 tot de macht van de absolute waarde van dit veld
  3 niet gebruikt door NTFS
Clusters/Index Buffer 1 De grootte van elke indexbuffer, welke gebruikt wordt om ruimte te reserveren voor folders.
0x00 t/m 0x7F clusters /MFT-record
0x80 t/m 0xFF file record is 2 tot de macht van de absolute waarde van dit veld
  3 niet gebruikt door NTFS
Volume Serie nummer 8 Het serienummer van het volume
Checksum 4 niet gebruikt door NTFS
Bootstrap Code 426 bytes

Bevat de programma code waarin staat hoe het besturingssysteem moet worden gestart. Dit start NTLDR.

Einde sector markering 2 bytes Bevat 55AA. Als bytes/sector echter groter is dan 512, dan is de bootsector dus ook groter. Deze twee bytes moeten echter op sector 1 op byte-posities 510 en 511 staan, ongeacht de grootte van de sector.

 

Voorbeeld van een NTFS bootsector:

OFFSET     0  1  2  3  4  5  6  7    8  9  A  B  C  D  E  F 0123456789ABCDEF
00000000: EB 52 90 4E 54 46 53 20 - 20 20 20 00 02 08 00 00 .R.NTFS ..... ..
00000010: 00 00 00 00 00 F8 00 00 - 3F 00 FF 00 3F 00 00 00 ........?...?...
00000020: 00 00 00 00 80 00 80 00 - 1C 91 11 01 00 00 00 00 ................
00000030: 00 00 04 00 00 00 00 00 - 11 19 11 00 00 00 00 00 ................
00000040: F6 00 00 00 01 00 00 00 - 3A B2 7B 82 CD 7B 82 14 ........:.{..{..
00000050: 00 00 00 00
FA 33 C0 8E - D0 BC 00 7C FB B8 C0 07 .....3.....|....

00000060: 8E D8 E8 16 00 B8 00 0D  - 8E C0 33 DB C6 06 0E 00   ..........3.....
00000070: 10 E8 53 00 68 00 0D 68  - 6A 02 CB 8A 16 24 00 B4   ..S.h..hj....$..
00000080: 08 CD 13 73 05 B9 FF FF  - 8A F1 66 0F B6 C6 40 66   ...s......f...@f
00000090: 0F B6 D1 80 E2 3F F7 E2  - 86 CD C0 ED 06 41 66 0F   .....?.......Af.
000000A0: B7 C9 66 F7 E1 66 A3 20  - 00 C3 B4 41 BB AA 55 8A   ..f..f. ...A..U.
000000B0: 16 24 00 CD 13 72 0F 81  - FB 55 AA 75 09 F6 C1 01   .$...r...U.u....
000000C0: 74 04 FE 06 14 00 C3 66  - 60 1E 06 66 A1 10 00 66   t......f`..f...f
000000D0: 03 06 1C 00 66 3B 06 20  - 00 0F 82 3A 00 1E 66 6A   ....f;. ...:..fj
000000E0: 00 66 50 06 53 66 68 10  - 00 01 00 80 3E 14 00 00   .fP.Sfh.....>...
000000F0: 0F 85 0C 00 E8 B3 FF 80  - 3E 14 00 00 0F 84 61 00   ........>.....a.
00000100: B4 42 8A 16 24 00 16 1F  - 8B F4 CD 13 66 58 5B 07   .B..$......fX[.
00000110: 66 58 66 58 1F EB 2D 66  - 33 D2 66 0F B7 0E 18 00   fXfX.-f3.f.....
00000120: 66 F7 F1 FE C2 8A CA 66  - 8B D0 66 C1 EA 10 F7 36   f......f..f....6
00000130: 1A 00 86 D6 8A 16 24 00  - 8A E8 C0 E4 06 0A CC B8   ......$.........
00000140: 01 02 CD 13 0F 82 19 00  - 8C C0 05 20 00 8E C0 66   ........... ...f
00000150: FF 06 10 00 FF 0E 0E 00  - 0F 85 6F FF 07 1F 66 61   ..........o..fa
00000160: C3 A0 F8 01 E8 09 00 A0  - FB 01 E8 03 00 FB EB FE   ................
00000170: B4 01 8B F0 AC 3C 00 74  - 09 B4 0E BB 07 00 CD 10   .....<.t........
00000180: EB F2 C3 0D 0A 41 20 64  - 69 73 6B 20 72 65 61 64   .....A disk read
00000190: 20 65 72 72 6F 72 20 6F  - 63 63 75 72 72 65 64 00    error occurred.
000001A0: 0D 0A 4E 54 4C 44 52 20  - 69 73 20 6D 69 73 73 69   ..NTLDR is missi
000001B0: 6E 67 00 0D 0A 4E 54 4C  - 44 52 20 69 73 20 63 6F   ng...NTLDR is co
000001C0: 6D 70 72 65 73 73 65 64  - 00 0D 0A 50 72 65 73 73   mpressed...Press
000001D0: 20 43 74 72 6C 2B 41 6C  - 74 2B 44 65 6C 20 74 6F    Ctrl+Alt+Del to
000001E0: 20 72 65 73 74 61 72 74  - 0D 0A 00 00 00 00 00 00    restart........
000001F0: 00 00 00 00 00 00 00 00  - 83 A0 B3 C9 00 00 55 AA   ..............U.

 

Master File Table en Metadata files

 

Bij het formatteren wordt een Master File Table (MFT) gemaakt. Dat is een object georiënteerde relationele database, bestaande uit rijen en kolommen (tabellen). Elke rij in de tabel is een record en elke kolom is een attribuut (veld). Voor elke file en folder wordt een rij gemaakt en in de kolommen komen de attributen voor die file of folder.

(Relationeel duidt op een wiskundige "relatie", waar altijd een tabel als resultaat bij hoort.)

De beschrijving van deze database staat in metadata-files, en omdat dit files zijn, is voor elke van die metadata-files een rij in de MFT aanwezig. De MFT bevat dus informatie over zichzelf. Hiervoor worden de eerste 26 rijen (± 16 KB) van de MFT gereserveerd. NTFS 2.0 reserveerde daar 16 rijen voor, waarvan er maar 11 gebruikt werden. NTFS 3.x gebruikt van de 26 gereserveerde rijen er maar 15, daarbij zijn de 5 ongebruikte rijen van NTFS 2.0 niet bij. De Metadata-files zijn herkenbaar aan het dollar-teken, waar de filenaam mee begint. Elke MFT-rij begint met een Standaard Header en heeft als eindmarkering 0xFFFFFFFF.

 
MFT Rij Filenaam Systeem File Uitleg
0 $Mft Master file table Bevat een rij voor elke file of folder op het NTFS-volume. Als de file te groot is om in één rij te worden opgenomen, dan worden meerdere rijen aan de file toegewezen.
1 $MftMirr Master file table kopie Garandeert de toegang tot de MFT bij uitval van één sector, door de eerste 4 rijen van de MFT ook elders op het volume op te slaan in deze file.
2 $LogFile Log file Bevat informatie voor snel herstel van metadata bij fouten. Wordt gebruikt voor transaction tracking. De omvang hangt af van de grootte van de partitie, maar kan vergroot worden met CHKDSK.EXE.
3 $Volume Volume Bevat informatie over het volume zoals het volume label en de versie.
4 $AttrDef Attribute definities Bevat de lijst met attribuut namen, nummers en beschrijvingen.
5 $\. Root file name index De root folder.
6 $Bitmap Cluster bitmap Geeft de vrije en ongebruikte clusters weer op het volume.
7 $Boot Boot sector Bevat de BPB welke gebruikt is om het volume te mounten (in de lucht brengen) en de boot-code als het volume bootable is.
8 $BadClus Bad cluster file

Bevat de slechte clusters van een volume.

Bevat $Bad als named stream

9

$Secure

(was $quota)

Security file Bevat unieke security descriptors ($Securtiy_Descriptor) voor alle MFT-rijen (dus de files) op een volume. Hybride van een folder-rij en een data-rij
10 $Upcase Upcase table Converteert kleine letters naar bijgehorende Unicode hoofdletter.
11 $Extend NTFS extension file

Wordt gebruikt voor diverse optionele uitbreidingen zoals quota's, reparse point data, en object identifiers.

Dit is een folder met subfolders $Quota, $Reparse, $ObjID, en de file $USNJrnl

$Quota

Wordt gebruikt om op een volume de door een gebruiker gebruikte ruimte bij te houden. Het is een folder met records voor de SID van gebruikers en de files waar ze eigenaar van zijn.

$Reparse

Bevat informatie over de files met reparse points. Verwijst naar andere data en bevat programmacode om de file correct te interpreteren. Wordt gebruikt voor het Mounten van volumes en Remote Storage

$ObjID

Folder met pointers naar files met GUID's van files. Wordt gebruikt voor Link Tracking

USNJrnl

Een file met Change Journal ingangen, waarin wijzigingen worden bijgehouden om snel indexen te kunnen herstellen of corrigeren

12–15     Gereserveerd voor toekomstig gebruik.

 

Rijen (records) in de MFT

Alles wat op het volume wordt geschreven is onderdeel van een file (folders zijn ook files). Elke file heeft minstens één rij in de MFT. NTFS beschouwt elke file als een verzameling attributen. De naam, de beveiligingsinstellingen, en de data zelf ook, zijn allemaal attributen van een file. Elk attribuut heeft een type-code en een attribuutnaam.

Elke rij waarmee een file of folder wordt gespecificeerd is 1 KB groot en bevat behalve de file-attributen ook informatie over waar in de MFT de rij is opgeslagen. Als de attributen van een file-rij allemaal in die rij passen, dan worden dat residente attributen genoemd. Is dat niet het geval dan worden sommige attributen niet-resident opgeslagen in attribuutrijen. Attributen, zoals filenaam en timestamp zijn altijd resident. Welke attributen resident moeten zijn staat gespecificeerd in $AttrDef met flags (vlaggen: bits welke op 1 of 0 worden gezet). De data evenwel vaak niet. Niet-residente attributen krijgen clusters toegewezen elders op de schijf. Voor deze data wordt wel een attribuut-rij in de MFT opgenomen, waarin een verwijzing wordt opgenomen naar die clusters. Voor de locatie van alle attributen, welke niet in de file-rij passen, wordt een AttributeList attribuut gebruikt, maar dat komt niet vaak voor.

 

Er zijn drie soorten rijen (records):

File records

Is een file kleiner dan 900 bytes dan kan de hele file meestal in één file-rij. in de MFT.

Folder records

Folder rijen bevat de indexen van de files in de folder. Kleine folders staan meestal in hun geheel in de folder-rij. Grote folders worden geordend in binaire-boom (B-tree= Balanced Tree datastructuur) structuren en deze hebben rijen met pointers naar externe clusters met folder-ingangen welke niet in de MFT-structuur kunnen. Dankzij de B-tree structuur kan NTFS files veel efficiënter opzoeken dan FAT.

Hybride records

(attribuut rijen)

Dit zijn extra rijen voor zowel files als folders

 

 

De NTFS file-attributes types:

 
Type nr Uitleg
$Standard_Information 0x10 Standaard informatie zoals de toegangsmethode (RO/RW e.d.) timestamp, link count. Komt in alle rijen (records) voor.
$Attribute_List 0x20 Locatie van alle attribuut-rijen welke niet in het MFT-record passen (dit komt vrijwel niet voor)
$File_Name 0x30 Een attribuut wat vaker kan voorkomen voor bijvoorbeeld de 8.3 naam (niet case-sensitive) of een hard link (voor POSIX-compatibiliteit), maar primair voor de lange naam van max. 255 Unicode tekens.

$Object_ID

(was $Volume_Version)

0x40

Een op het volume unieke identificatie voor een file. Wordt o.a. gebruikt voor link tracking. Niet alle files hebben een objectID.

$Volume_Version wordt niet langer gebruikt.

$Security_Descriptor 0x50 Beveiliging informatie
$Volume_Name 0x60 Volume naam
$Volume_Information 0x70 NTFS versie
$Data 0x80 Elke file heeft meestal één data attribuut zonder naam. Volgend data-attributen kunnen wel namen hebben
$Index_Root 0x90 Wordt gebruikt voor indexen van o.a. folders
$Index_Allocation 0xA0 Wordt gebruikt om B-tree structuren te maken voor grote folders en indexen.
$Bitmap 0xB0 Wordt gebruikt om B-tree structuren te maken voor grote folders en indexen.
$Reparse_Point

(was $Symbolic_link)

0xC0 Wordt o.a. gebruikt voor gemounte volumes (gekoppeld aan een lege folder, i.p.v. aan een drive-letter). Specificeert een speciale file voor de IFS-driver.
$EA_Information 0xD0 Voor OS/2 compatibiliteit uitgebreid attribuut. Wordt niet meer gebruikt.
$EA 0xE0 Voor OS/2 compatibiliteit uitgebreid attribuut. Wordt niet meer gebruikt.
$Property_Set 0xF0 Niet meer gebruikt
$Logged_Utilities_Stream 0x100 Door EFS gebruikt attribuut om wijzigingen te loggen in de NTFS-log, net als de wijzigingen in de metadata.  Is hetzelfde als een data-stream.

 

Een file

Een file heeft bijvoorbeeld een $File_Name attribuut en een $Data attribuut.

Elke attribuut heeft een header en data. Van het $File_Name attribuut bevat het data-deel de naam en attribuut eigenschappen, het header-deel beschrijft de opbouw van het attribuut. 

 

Een Hex-dump van het $File_Name attribuut:

OFFSET 0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
0000: 30 00 00 00 78 00 00 00 00 00 00 00 00 00 02 00  0...x...........
0010: 5A 00 00 00 18 00 01 00 05 00 00 00 08 00 05 00  Z...............

0020: F0 98 70 DB 6A BF BE 01 F0 98 70 DB 6A BF BE 01  ..p.j.....p.j...

0030: F0 98 70 DB 6A BF BE 01 F0 98 70 DB 6A BF BE 01  ..p.j.....p.j...

0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

0050: 20 00 00 00 00 00 00 00 0C 03 46 00 69 00 6C 00  ..........F.i.l.

0060: 65 00 4E 00 61 00 6D 00 65 00 2E 00 74 00 78 00  e.N.a.m.e...t.x.

0070: 74 00 00 00 00 00 00 00                          t.......

offset

bytes

inhoud

uitleg

0x00

4

Attribuut type

30 00 00 00 wordt 0x00000030 (little endian notatie)

0x04

4

grootte het hele attribuut

little endian notatie voor het aantal bytes (0x00000078 = 120)

0x08

8

gereserveerd

 

0x10 4 grootte van het datadeel

little endian notatie voor het aantal bytes (0x0000005A = 90)

0x14 2 offset voor datadeel

little endian notatie voor de plek waar het data deel begint (0x0018 = 24)

0x16 2 flags en opvulling  
hier begint het attribuut (hierboven is de header)
0x18 8 parent referentie naar de bovenliggende (parent) folder
0x20 32 time stamps  
0x40 26 locatorinfo voor het attribuut  
0x5A rest DATA-deel Bevat de naam van het bestand

 

Data Runs

Een attribuut, welke niet resident kan worden opgeslagen, wordt, indien mogelijk, opgeslagen op een aaneengesloten reeks clusters, welke een run genoemd wordt. Lukt dat niet, dan is de file gefragmenteerd en worden meerdere runs gebruikt, waarbij voor elke run een pointer in het MFT-record wordt bijgehouden.

De pointer heeft 3 onderdelen:

Eerste Logical Cluster Number (LCN)

Het eerste cluster (64-bit getal) op het volume waar een run start

Eerste Virtual Cluster Number (VCN)

De clusters in een run wordt elk bijgehouden relatief t.o.v. het begin van de run. Als een file gefragmenteerd is in meerdere runs, dan bevat de pointer van elke run het virtuele cluster nummer van het eerste cluster in die run.

Aantal clusters

Het aantal clusters van de run

 

Voorbeeld van een run voor een gewone niet gefragmenteerde file:

De run wordt gespecificeerd met een header, welke specificeert hoeveel bytes er gebruikt worden voor de specificatie van de run, de lengte en de offset
21 18 34 56 00
run1  
21 2 bytes voor de offset en 1 voor de lengte
18 Lengte 0x18
34 56 Offset 0x5634 (little endian)
run2  
00 geen run dus einde van de stream
Dus deze stream is 18 clusters groot, niet gefragmenteerd en start op LCN 0x5634

 

Voorbeeld van een gewone gefragmenteerde file
31 38 73 25 34 32 14 01 E5 11 02 31 42 AA 00 03 00
run1  
31 3 bytes voor de offset en 1 voor de lengte
38 Lengte 0x38
73 25 34 Offset 0x342573 (little endian)
run2  
32 3 bytes voor de offset en 2 voor de lengte
14 01 Lengte 0x0114
E5 11 02 Offset 0x0211E5 relatief t.o.v. de vorige run 0x342573 = 0x363758
run3  
31 3 bytes voor de offset en 1 voor de lengte
42 Lengte 0x42
AA 00 03 Offset 0x0300AA relatief t.o.v. de vorige run 0x363758 = 0x393802
run4  
00 geen run dus einde van de stream

Dus deze stream is 0x38+0x114+0x42 clusters groot en gefragmenteerd.

38 clusters vanaf LCN 0x342573

114 clusters vanaf LCN 0x363758

42 clusters vanaf LCN 0x393802

 

Een folder (directory)

Een folder is net als gewone files ook een file. Het is een index van filenamen.

Een folderrij (record) heeft de volgende attributen:
Type Attribuut Naam  
0x10 $Standard_Information    
0x30 $File_Name dirname  
0x50 $Security_Descriptor    
0x90 $Index_Root $I30 Bevat index ingangen met de namen van files in de folder.
0xA0 $Index_Allocation $I30 Bevat de runs van de andere indexen
0xB0 $Bitmap $I30 Bevat een overzicht van de clusters welke in gebruik zijn

De files kunnen kunnen op basis van de hoofdletterconversie van de naam (waar $Upcase voor kan zorgen) gesorteerd worden. Dit geeft de mogelijkheid de indexen te sorteren als een B+tree. (In principe is overigens elke sorteervolgorde mogelijk, ook op basis van andere attributen.)

Een B-tree heeft knooppunten, welke met elkaar verbonden zijn. Elke knooppunt bevat daarvoor één of meer index-ingangen. Binnen een knooppunt worden de ingangen alfabetisch opvolgend gesorteerd. Elke index-ingang kan wijzen naar een lager gelegen knooppunt. Het hoogste knooppunt zit in $Index_Root, de onderliggende knooppunten zijn index buffers.

 

De MFT zone

Om te voorkomen dat de MFT gefragmenteerd raakt, reserveert NTFS 12,5% van de ruimte op het volume voor exclusief gebruik door de MFT. Dat betekent evenwel niet dat deze ruimte niet voor data gebruikt kan worden. Als het volume vol raakt, dan wordt deze ruimte ook voor data benut. De wijze waarop hangt evenwel van de omvang van de files af.

Grote files zullen de niet gereserveerde ruimte eerst opvullen. Kleine files zullen de MFT zone eerst vullen. In beide gevallen zal fragmentatie van de MFT het gevolg zijn als één van beide gebieden vol raakt.

De standaardinstelling van 12,5% voor de MFT-zone is goed voor volumes met een gemiddelde filegrootte van 8KB. Voor nieuwe volumes kan dat ook worden gewijzigd (bij veel kleine bestanden) in 25%, 37,5% of 50%.

 

De omvang van de MFT-zone is vastgelegd in een register-ingang:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\FileSystem

De naam van de waarde is NtfsMftZoneReservation (type REG_DWORD). Deze moet eventueel worden toegevoegd.

De waarde 1 is 12,5%, 2 is 25%, 3 is 37,5% en 4 is 50%. Deze waarde is niet specifiek voor één volume, maar voor alle. Als de waarde kleiner wordt gemaakt, dan blijft de reeds in gebruik zijnde ruimte gehandhaafd.

 

 

Filenamen bij NTFS

Filenamen kunnen tot 255 Unicode tekens bevatten. Dat wil zeggen dat elk teken een 16-bit (= 1 word = 2 bytes) teken is (in tegenstelling tot de ASCII-tekens, welke 8-bits zijn (extended ASCII)). Hierdoor zijn 216 verschillende tekens mogelijk. Alleen tekens met een andere functie voor het OS zijn niet toegestaan: 
 ?  *

wildcard tekens; ? voor 1 teken, en * voor meerdere

 /  \  :

Worden gebruikt in een filenaam als scheidingsteken voor folders en drive-aanduiding

 < >

input en output redirection; omleiden van input en output

ProgA > voorbeeld.txt

De output van ProgA wordt omgeleid van het beeldscherm (standaard output device) naar het bestand voorbeeld.txt.

ProgA >> voorbeeld.txt

De output van ProgA wordt toegevoegd aan het bestand voorbeeld.txt

Del *.* <  ja.txt

Het commando del *.* vraagt om bevestiging. Gewoonlijk via het toetsenbord, maar nu wordt ja.txt gelezen als input. (In ja.txt moet dus staan:  y <Enter> )

 |

Pipe teken, om output door te sluizen als input voor een ander programma

ProgA | ProgB  

De output van progA wordt gebruikt als input voor progB.

De namen zijn niet case-sensitive (hoofdletter gevoelig), maar de case wordt wel behouden. (Hiervoor wordt de tabel $Upcase van NTFS gebruikt.)

 

Elke file kan meerdere namen hebben, waaronder bv een 8.3 DOSnaam. Een file krijgt hiervoor gewoon een nieuw $File_Name attribuut. De wijze waarop een 8.3 naam wordt gemaakt wijkt af van de wijze waarop dat bij FAT gebeurt.

De standaard methode gaat als volgt:
1 Verwijder alle spaties en alle niet ASCII-tekens
2 Verwijder alle punten, behalve de laatste
3  
4 Selecteer de eerste 6 tekens, voeg een tilde (~) toe en een volgnummer, startend bij 1, tot maximaal 4 als deze eerste 6 tekens al gebruikt worden voor een filenaam. Zou het volgnummer hoger worden, dan
a Selecteer de eerste 2 tekens
b Bereken een code van 4 tekens op basis van de lange naam en voeg deze toe
c voeg een tilde toe en een volgnummer, startend bij 1, om dubbele namen te voorkomen.
5 Gebruik als extensie de eerste drie tekens na de punt

 

Voorbeeld voor de conversie van de volgende 6 filenamen:
Dit is een voorbeeld 1.voorbeeld DITISE~1,VOO
Dit is een voorbeeld 2.voorbeeld DITISE~2,VOO
Dit is een voorbeeld 3.voorbeeld DITISE~3,VOO
Dit is een voorbeeld 4.voorbeeld DITISE~4,VOO
Dit is een voorbeeld 5.voorbeeld DIE110~1,VOO
Dit is een voorbeeld 6.voorbeeld DIE190~1,VOO

 

Omdat meerdere filenamen mogelijk zijn, is het ook mogelijk om UNIX-style hard-links te maken (voor POSIX compatibiliteit). De file heeft dan nog een naam in een andere folder. Een file kan dan meerder malen voorkomen in verschillende folders, maar staat fysiek maar één keer op de disk. Deze mogelijkheid bestaat, maar heeft niet de uitgebreide UNIX-mogelijkheden, waar het van is afgekeken.

 

NTFS versies

De laatste versie van NTFS is versie 3.1 (Windows XP en Windows Server 2003). Vergeleken met de vorige versie (3.0) van Windows 2000 is er niet veel gewijzigd, behalve dat Windows Server 2003 nieuwe files een andere header geeft. Hierdoor kunnen sommige (niet Microsoft) programma's voor afbeeldingbewerking geen afbeeldingen opslaan op een NTFS 3.1 volume. Omdat NTFS 3.x bij NT versie 5.x hoort, wordt deze versie ook wel NFTS-5 genoemd.

De wijzigingen welke doorgevoerd worden bij conversie van NFTS versies van vóór 3.0 (NT 4.0 gebruikt NFTS versie 1.2) zijn ingrijpender. Voor het lezen van een naar NTFS 3.1 of 3.0 geconverteerd volume is minimaal NT 4.0 met SP4 nodig (SP4 upgrades NTFS naar 3.0, maar gebruikt alleen de nieuwe faciliteiten niet). De conversie naar NTFS 3.1 vindt plaats bij het mounten van het volume en creëert de volgende nieuwe rijen in de MFT:

$Secure en $Extend. In de $Extend-folder worden drie nieuwe files/folders bijgemaakt: $Quota, $Reparse, $ObjID en $USNJrnl

Deze laatste vier zijn nieuwe folders/files, waar dan ook voldoende ruimte voor aanwezig moet zijn, omdat anders de upgrade mislukt.

Conversie van NTFS 3.0 naar NTFS versie 3.1 is niets anders dan alleen het wijzigen van het versienummer .

 
Eigenschappen van NTFS versie 5 (eigenlijk 3.x)

Beveiliging

Reparse points

Change Journal

Encryption

Compressie

Disk Quota's

Sparse Files

Indexering

 

[ begin pagina]

Belangrijkste referenties:

http://www.microsoft.com/technet

http://linux-ntfs.sourceforge.net/ntfs

Boek: "Inside Windows 2000 Server", (William Boswell - New Riders -2000)

 

No information is blindly copied from other sites or resources. It is all translated, edited, corrected and, as much as possible, verified. However, I cannot garanty that all of of the above is correct (I'm sure it's not). I came across much conflicting information, which I have tried to sort out.