Windows NTFS bestandstoegang versnellen? Het Windows NTFS bestandssysteem van jouw Windowscomputer kun je met een paar kleine wijzigingen in Windows sneller maken. Hierdoor heb je sneller toegang tot jouw bestanden in de Windows Verkenner, kun je bestanden sneller aanmaken, kopiëren en verwijderen en reageert jouw computer gevoelsmatig sneller. Maar of het écht effect heeft…

Verbeter Windows NTFS-bestandssysteem prestaties – met fsutil

Het versnellen van het bestandssysteem hoeft niet altijd via het Windows register. Je kunt hiervoor ook het fsutil programmaatje gebruiken om bepaalde instellingen te beheren en wijzigen. Het fsutil noemde ik al in de Windows onderhoud-blogpost. Als je wél met regedit wijzigingen doorvoert, maak dan altijd eerst een back-up van het Windows register! Gaat er onverhoopt iets mis dan kun je altijd de back-up van het register terugzetten.

Ook hier moet je, net als met belangrijk Windows onderhoud, een cmd.exe opdrachtprompt als beheerder uitvoeren.

Met fsutil kunnen we een aantal instellingen eenvoudig aanpassen en verbeteren. Let wel dat voor verschillende Windows versies (Windows 7, Windows 8, Windows 8.1, Windows 10) verschillende standaardwaarden kunnen gelden. Heb jij een andere Windows versie dan kan het maar zo zijn dat een instelling al standaard ingeschakeld of uitgeschakeld is. Mijn advies is daarom om altijd huidige ingestelde waarden te bekijken voordat je iets wijzigt. Dit gaat eenvoudig met de query parameter van fsutil.

Fsutil staat voor File System Utility. Het omvat onder andere de volgende opties:

C:\WINDOWS\system32>fsutil behavior
---- BEHAVIOR Commands Supported ----
query           Query the file system behavior parameters
set             Change the file system behavior parameters
C:\WINDOWS\system32>fsutil behavior query
Usage : fsutil behavior query <option>
<option>
AllowExtChar
BugcheckOnCorrupt
Disable8dot3 [<Volume Path>]
DisableCompression
DisableCompressionLimit
DisableDeleteNotify
DisableEncryption
DisableLastAccess
DisableSpotCorruptionHandling
EncryptPagingFile
MemoryUsage
MftZone
QuotaNotify
SymlinkEvaluation
Please use "fsutil 8dot3name query /?" for more information.

Standaard Windows NTFS-instellingen gebruikt in dit artikel:

C:\WINDOWS\system32>fsutil behavior query MemoryUsage
MemoryUsage = 0
C:\WINDOWS\system32>fsutil behavior query MftZone
MftZone = 0 (translates to a zone size of 200 MB)

NTFS MftZone – Master File Table of MftZone

Het NTFS-bestandsyssteem bevat een bestand genaamd master file table, of MFT. Er is tenminste één vermelding voor ieder bestand op een NTFS-bestandsysteem in het MFT, inclusief voor MFT zelf. Alle informatie over een bestand, zoals de grootte, tijd- en datumstempels, permissies of rechten en bestandsinhoud is opgeslagen in dit MFT, of in geheugenruimte buiten het MFT. Je kunt je voorstellen dat hier gauw erg veel informatie in aanwezig is, wat veel geheugen nodig heeft.

Wil je alle technische details over het MFT lezen? Lees dan Microsofts artikel Master File Table.

MftZone is a reserved region of the disk used to make the MFT contiguous. The 200 MB multiplier is only applicable for volumes > 1.5 GB. Below this threshold the multiplier is scaled based on volume size.

Standaard staat de maximale geheugenruimte voor het MFT vrij strak ingesteld: 200 MB. Heb je veel, heel veel, bestanden op jouw computer, dan kun je de toegang tot deze bestanden versnellen en verbeteren door deze MftZone te vergroten. Bijvoorbeeld verdubbelen naar 400 MB. Je doet dit met fsutil behavior set MftZone <waarde>. “Waarde” is hier een getal van 1 t/m 100 wat steeds vermenigvuldigd wordt 200 (MB). Zet je de MftZone-waarde op “2”, dan maak je die daarmee feitelijk 400 MB groot, 3 voor 600 MB, enzovoorts.

Na iedere aanpassing moet je de computer opnieuw opstarten om de nieuwe instelling actief te laten worden. Je kunt veilig verschillende waarden testen.

MftZone-instellingen testen

Om de verschillende NTFS optimalisatietechnieken te testen kun je het beste een hele serie willekeurige bestanden aanmaken in een tijdelijke map (of folder). Hoe doe je dit? De blogpost Howto Generate many files of a particular size in Windows legt uit hoe je in één commando heel veel willekeurige bestanden aanmaakt. Die kun je dan gebruiken om te verwijderen, en de tijd die nodig is om de bestanden te verwijderen op te nemen.

Ik heb hiervoor het volgende fsutil file createnew-commando gebruikt, in combinatie met een cmd.exe For lus:

For /L %i in (1,1,50000) do fsutil file createnew A%i.tmp 4096

Deze opdracht maakt 50.000 bestanden aan van 4096 bytes (4 kB), met een oplopende naamgeving (a1.tmp t/m a50000.tmp). Totale grootte is dan 195 MB (204,800,000 bytes). Houd er rekening mee dat dit even duurt ;-) .

Om dit niet al te vaak te hoeven doen kun je de map het beste kopieren naar nog een map, en kun je ook testen hoe lang het kopiëren duurt nadat je wijzigingen hebt gemaakt, naast het verwijderen. Hieronder de resultaten (let op: MftZone 0 en MftZone 1 zijn gelijk, 200 MB).

Als je dit test via de Windows Verkenner:
De hier vermelde tests zijn helaas niet helemaal representatief. Ze zijn gemaakt op een virtuele Windows Server 2012 testserver, op een Hyper-V hypervisor. De snelheid van gevirtualiseerde disks is hierop stevig van invloed.

Voor wat preciezere timing kun je gebruikmaken van PowerShells Measure-Command {} cmdlet. Het voordeel van PowerShell Measure-Command cmdlet is dat je geen Windows Verkenner hoeft te gebruiken, die timer is niet heel precies.

MftZone = 1:

PS C:\> Measure-Command { copy -Recurse .\tmp .\tmp2 }
Days              : 0
Hours             : 0
Minutes           : 1
Seconds           : 4
Milliseconds      : 286
Ticks             : 642868931
TotalDays         : 0.000744061262731482
TotalHours        : 0.0178574703055556
TotalMinutes      : 1.07144821833333
TotalSeconds      : 64.2868931
TotalMilliseconds : 64286.8931
PS C:\> Measure-Command { Remove-Item -Recurse -Force .\tmp2 }
Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 29
Milliseconds      : 561
Ticks             : 295611348
TotalDays         : 0.000342142763888889
TotalHours        : 0.00821142633333333
TotalMinutes      : 0.49268558
TotalSeconds      : 29.5611348
TotalMilliseconds : 29561.1348

MftZone = 2:

PS C:\> Measure-Command { copy -Recurse .\tmp .\tmp2 }
Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 58
Milliseconds      : 840
Ticks             : 588408722
TotalDays         : 0.000681028613425926
TotalHours        : 0.0163446867222222
TotalMinutes      : 0.980681203333333
TotalSeconds      : 58.8408722
TotalMilliseconds : 58840.8722
PS C:\> Measure-Command { Remove-Item -Recurse -Force .\tmp2 }
Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 22
Milliseconds      : 329
Ticks             : 223296107
TotalDays         : 0.000258444568287037
TotalHours        : 0.00620266963888889
TotalMinutes      : 0.372160178333333
TotalSeconds      : 22.3296107
TotalMilliseconds : 22329.6107

MftZone = 3:

PS C:\> Measure-Command { copy -Recurse .\tmp .\tmp2 }
Days              : 0
Hours             : 0
Minutes           : 1
Seconds           : 18
Milliseconds      : 515
Ticks             : 785150896
TotalDays         : 0.000908739462962963
TotalHours        : 0.0218097471111111
TotalMinutes      : 1.30858482666667
TotalSeconds      : 78.5150896
TotalMilliseconds : 78515.0896
PS C:\> Measure-Command { Remove-Item -Recurse -Force .\tmp2 }
Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 33
Milliseconds      : 63
Ticks             : 330632836
TotalDays         : 0.000382676893518518
TotalHours        : 0.00918424544444444
TotalMinutes      : 0.551054726666667
TotalSeconds      : 33.0632836
TotalMilliseconds : 33063.2836

Hier is een MftZone 2 overduidelijk het snelst, in zowel het kopiëren van 50.000 bestanden als het verwijderen ervan. Dat een grotere MftZone (3) niet sneller is kan in dit specifieke geval veroorzaakt worden door de systeembronnen die beschikbaar zijn voor de virtuele testserver.

MftZone op Windows Server 2012 bare metal

Dezelfde tests, nu op een fysiek apparaat (bare metal), met 2 Seagate Savvio 10K.3 SAS disks in een RAID-1 configuratie. Hierbij is de RAID controllers cache ook van invloed.

MftZone = 1:

PS C:\> Measure-Command { copy -Recurse .\tmp .\tmp2 }
Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 26
Milliseconds      : 537
Ticks             : 265376490
TotalDays         : 0.000307148715277778
TotalHours        : 0.00737156916666667
TotalMinutes      : 0.44229415
TotalSeconds      : 26.537649
TotalMilliseconds : 26537.649
PS C:\> Measure-Command { Remove-Item -Recurse -Force .\tmp2 }
Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 11
Milliseconds      : 667
Ticks             : 116672861
TotalDays         : 0.000135038033564815
TotalHours        : 0.00324091280555556
TotalMinutes      : 0.194454768333333
TotalSeconds      : 11.6672861
TotalMilliseconds : 11667.2861

MftZone = 2:

PS C:\> Measure-Command { copy -Recurse .\tmp .\tmp2 }
Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 27
Milliseconds      : 41
Ticks             : 270414633
TotalDays         : 0.000312979899305556
TotalHours        : 0.00751151758333333
TotalMinutes      : 0.450691055
TotalSeconds      : 27.0414633
TotalMilliseconds : 27041.4633
PS C:\> Measure-Command { Remove-Item -Recurse -Force .\tmp2 }
Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 11
Milliseconds      : 593
Ticks             : 115937215
TotalDays         : 0.000134186591435185
TotalHours        : 0.00322047819444444
TotalMinutes      : 0.193228691666667
TotalSeconds      : 11.5937215
TotalMilliseconds : 11593.7215

MftZone = 3:

PS C:\> Measure-Command { copy -Recurse .\tmp .\tmp2 }
Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 26
Milliseconds      : 934
Ticks             : 269349366
TotalDays         : 0.000311746951388889
TotalHours        : 0.00748192683333333
TotalMinutes      : 0.44891561
TotalSeconds      : 26.9349366
TotalMilliseconds : 26934.9366
PS C:\> Measure-Command { Remove-Item -Recurse -Force .\tmp2 }
Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 12
Milliseconds      : 894
Ticks             : 128944295
TotalDays         : 0.000149241082175926
TotalHours        : 0.00358178597222222
TotalMinutes      : 0.214907158333333
TotalSeconds      : 12.8944295
TotalMilliseconds : 12894.4295

Hier zien we dat een MftZone-instelling van 2 of 3 weinig verschil maakt.

MftZone op Windows 8.1

Dezelfde tests, nu op Windows 8.1, met een Samsung EVO 840 SSD.

MftZone = 1:

PS C:\> Measure-Command { copy -Recurse .\tmp .\tmp2 }
Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 29
Milliseconds      : 370
Ticks             : 293700958
TotalDays         : 0.000339931664351852
TotalHours        : 0.00815835994444445
TotalMinutes      : 0.489501596666667
TotalSeconds      : 29.3700958
TotalMilliseconds : 29370.0958
PS C:\> Measure-Command { Remove-Item -Recurse -Force .\tmp2 }
Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 10
Milliseconds      : 523
Ticks             : 105231843
TotalDays         : 0.000121796114583333
TotalHours        : 0.00292310675
TotalMinutes      : 0.175386405
TotalSeconds      : 10.5231843
TotalMilliseconds : 10523.1843

MftZone = 2:

PS C:\> Measure-Command { copy -Recurse .\tmp .\tmp2 }
Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 29
Milliseconds      : 588
Ticks             : 295888677
TotalDays         : 0.000342463746527778
TotalHours        : 0.00821912991666667
TotalMinutes      : 0.493147795
TotalSeconds      : 29.5888677
TotalMilliseconds : 29588.8677
PS C:\> Measure-Command { Remove-Item -Recurse -Force .\tmp2 }
Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 13
Milliseconds      : 944
Ticks             : 139448539
TotalDays         : 0.000161398771990741
TotalHours        : 0.00387357052777778
TotalMinutes      : 0.232414231666667
TotalSeconds      : 13.9448539
TotalMilliseconds : 13944.8539

Dus, meten is weten!

Test eerst de meest ideale instellingen voor jouw computer, en omdat de regenachtige zaterdagen er weer aankomen is het niet zo erg hier even mee bezig te zijn :-) .

NTFS MemoryUsage – FileSystem Memory Cache Size

Met de MemoryUsage-instelling kun je interne cachelevels van het NTFS-geheugen instellen. Standaard is dit 1, en door deze op 2 te zetten vergroot NTFS de geheugendrempels.

C:\Windows\System32>fsutil behavior query MemoryUsage
MemoryUsage = 0
C:\Windows\System32>fsutil behavior set MemoryUsage 2

Heeft het vergroten van interne NTFS cachelevels in jouw specifieke situatie geen positief resultaat, dan zet je deze eenvoudig weer terug:

C:\Windows\System32>fsutil behavior set MemoryUsage 1

Waarschijnlijk haalt het vergroten van NTFS MemoryUsage niets uit lezen we bij Tweakhound.

DisableLastAccess

Sommige versies van Windows houden standaard bij wanneer een folder voor het laatst geopend is, en schrijft die tijdstempel weg in de eigenschappen (MftZone). Hoe minder Windows bijhoudt hoe sneller het is, dus schakel dit uit als je het niet nodig hebt. Let op: sommige back-upsoftware kan hiervan afhankelijk zijn.

Je kunt de huidige instelling opvragen met wederom fsutil:

fsutil behavior query DisableLastAccess

Het resultaat 1 betekent dat de instelling is enabled (ingeschakeld, dus Last Access Time disabled, dus goed). De waarde 0 staat voor disabled (instelling uitgeschakeld, dus Last Aceess Time enabled, fout).

Ook hiervoor is weer een herstart van de computer nodig.

Disable8dot3

Nieuwe Windows versies zoals Windows 7, Windows 8, Windows 8.1 en Windows 10 ondersteunen nog steeds de oude MS-DOS bestandsnaamgeving: 8dot3. Vroeger, in MS-DOS, waren bestandsnamen maximaal 8 karakters lang met een 3 karakter lange extensie: autoexec.bat of config.sys bijvoorbeeld. Als deze ondersteuning ingeschakeld is op jouw computer dan kun je 8dot3 uitschakelen. Microsoft zegt hierover:

The use of 8.3 file names and directories for all long file names and directories on NTFS partitions may decrease directory enumeration performance. An 8.3-compliant file name refers to MS-DOS file-naming conventions. These conventions restrict file names to eight characters and optional extensions to three characters.

Note: Although disabling 8.3 file name creation increases file performance under Windows, some applications (16-bit, 32-bit, or 64-bit) may not be able to find files and directories that have long file names.

Met fsutil behavior query disable8dot3 vraag je de huidige instelling op:

C:\>fsutil behavior query disable8dot3
The registry state is: 2 (Per volume setting - the default).

De verschillende instellingen zijn, als je géén volumenaam (C:, D:) opgeeft:

  • 0 – Enable 8dot3 name creation on all volumes on the system
  • 1 – Disable 8dot3 name creation on all volumes on the system
  • 2 – Set 8dot3 name creation on a per volume basis
  • 3 – Disable 8dot3 name creation on all volumes except the system volume

En als je wél een volumenaam opgeeft:

  • 0 – Enable 8dot3 name creation on this volume
  • 1 – Disable 8dot3 name creation on this volume

Je kunt dit in- en uitschakelen met:

fsutil behavior set disable8dot3 D: 1
fsutil behavior set disable8dot3 C: 0
fsutil behavior set disable8dot3 1

Bijvoorbeeld:

C:\windows\system32>fsutil behavior set disable8dot3 d: 1
Successfully disabled 8dot3name generation on d:

In mijn tests geeft dit geen snelheidswinst, maar misschien in jouw situatie wel.

SSD TRIM inschakelen en uitschakelen met fsutil

Wist je dat je met fsutil ook kunt verifiëren dat TRIM enabled is voor jouw SSD’s? Voer het volgende commando als beheerder uit: fsutil behavior query DisableDeleteNotify. Geeft dit een 0 als resultaat, dan is TRIM ingeschakeld. Een 1 betekent uitgeschakeld, en je switcht met fsutil behavior set DisableDeleteNotify 0 of 1.

TRIM zorgt ervoor dat het besturingssysteem zoekt naar gebieden op de SSD die niet meer gebruikt worden. Vervolgens krijgt de controller van de SSD opdracht om deze gebieden alvast te wissen, zodat er zonder vertraging weer op geschreven kan worden.

Conclusie NTFS optimaliseren

In dit artikel heb je ik je één commando laten zien waarmee je een relatief groot aantal wijzigingen in het NTFS bestandssysteem van Windows kunt maken: fsutil.

In verschillende versies van Windows gebruikt Microsoft helaas steeds andere standaardwaarden, en dat maakt het erg moeilijk een sluitende handleiding te maken. Veel is daarom afhankelijk van jouw eigen tests en inzicht.

En vergeet niet: een test is een momentopname en kan door verschillende factoren een 2e of 3e keer afwijken. Test je met het maken, kopiëren, verplaatsen of verwijderen van bestanden, doe dat een aantal keer (2, 3, 4, 5) en neem een gemiddelde van de tijdsduur. Dan heb je een redelijk idee of een andere instelling een verbetering geeft, of niet.

Hoeveel voordeel je ermee behaalt is afhankelijk van onder andere de Windows versie (Windows 7, 8, 8.1 of Windows 10), hoeveelheid geheugen, grootte en snelheid van je harde schijf en de gemiddelde bestandsgrootte.

Of deze wijzigingen écht iets uithalen laat ik in het midden, maar een gevoelsmatige verbetering is ook fijn. Misschien behaal je een beter resultaat met een andere blockgrootte, of cluster size, tijdens het formatteren van je harde-schijf. Maar dat is mede afhankelijk van de gemiddelde bestandsgrootte op jouw computer.

Windows 11 en Microsoft Office boekentips

Wil jij graag meer kunnen doen met Windows 11 of Office? Maak een goede start met één van deze (ebook) boeken!

Leave a Comment

Comments

No comments yet. Why don’t you start the discussion?

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *