Chkdsk Performance on Windows Server 2008 R2
When a volume on Windows Servers is found to be corrupted, NTFS schedules a Chkdsk operation for the next reboot. This is done by invoking Autochk.exe during startup. From personal experience you can tell that reboots occur for many reasons such as, in the event of Windows updates and an inadvertent delay is caused if an Autochk is scheduled. Although, it is highly recommended not to delay fixing dirty volumes but you may need to perform a quick server reboot and fix the volume manually after the system is up and running. Server administrators can choose to not delay the boot up process by turning off checking the data volumes at reboot time. This is performed by using the chkntfs command and will allow you to include specific volumes. In addition, the setting is persistent across all reboots hence, you need to invoke the command again to restore the default behavior.
For the full list of options type chkntfs /? as shown below:
To improve Chkdsk performance Microsoft updated this tool with a better caching mechanism where larger blocks are now handled. By caching larger blocks of the disk in RAM, Chkdsk execution time is reduced. In addition, this feature also reduces the need to re-access data from the disk thus impacting positively on I/O time. As you can appreciate, the benefits gained by the new caching mechanism will cause an increase in memory consumption. Therefore, a server that is tight on memory space may see no performance improvement as regards to Chkdsk execution times.
You may be under the impression that the bigger the volume size is, the longer the execution time is, but reviewing Microsoft's benchmarks shows that the size of the volume is the lowest factor. The number of files in the volume has the highest burden on the Chkdsk execution time while available memory is second. Actually, the results show that the volume size has no effect on the execution time of Chkdsk.
The same results show that Windows Servers 2008 R2 Chkdsk is faster than the Chkdsk available in Windows Servers 2008. It is very important to know that when you save a file with a long file name to an NTFS drive, by default, NTFS creates a second file directory entry with a short file name that conforms to the 8.3 convention. Chkdsk execution time is longer when short file names are enabled and this can have a major impact when a volume has millions of files with long filenames. If your setup does not have any legacy applications that make use or need a short version of filenames then it is recommended to turn off 8.3 filenames by using the Fsutil command. In Windows Servers 2008 R2 and Windows 7 you can set 8.3 creation on a per volume basis versus the one global setting as in earlier versions of Windows. When disabled, NTFS no longer creates short file names (8.3 names) versions of long file names. This reduces the scan time needed during Chkdsk runs. Note that existing short file names will continue to function as before.
The following are Chkdsk exit codes:
0 No errors were found.
1 Errors were found and fixed.
2 Disk cleanup, such as garbage collection, was performed, or cleanup was not performed because /f was not specified. (Windows XP and earlier)
3 Could not check the disk, errors could not be fixed, or errors were not fixed because /f was not specified.
Finally, the recommended parameters for Chkdsk are as follows:
Chkdsk /R can take a significant amount of time to run, and therefore, is only recommended when there is doubt that the disk is failing and this type of scan is needed.
Chkdsk /I /C can fix several file system related errors and can finish quickly.