Copyright © 1998-2006 Mark Russinovich
Last Updated: March 27, 2006 v1.53
There are a number of NT disk defraggers on the market, including Winternals Defrag Manager. These tools are useful for performing a general defragmentation of disks, but while most files are defragmented on drives processed by these utilities, some files may not be. In addition, it is difficult to ensure that particular files that are frequently used are defragmented - they may remain fragmented for reasons that are specific to the defragmentation algorithms used by the defragging product that has been applied. Finally, even if all files have been defragmented, subsequent changes to critical files could cause them to become fragmented. Only by running an entire defrag operation can one hope that they might be defragmented again.
Contig is a single-file defragmenter that attempts to make files contiguous on disk. Its perfect for quickly optimizing files that are continuously becoming fragmented, or that you want to ensure are in as few fragments as possible.
Installation and Use
Contig works on NT 4.0 and higher. Contig can be used to defrag an existing file, or to create a new file of a specified size and name, optimizing its placement on disk. Contig uses standard Windows defragmentation APIs so it won't cause disk corruption, even if you terminate it while its running.
To make an existing file contiguous use Contig as follows:
Usage: contig [-v] [-a] [-q] [-s] [filename]
Use the -v switch to have Contig print out information about the file defrag operations that are performed. If you want to simply see how fragmented a file or files have become, use the -a switch to have Contig analyze fragmentation. Use the -s switch to perform a recursive processing of subdirectories when you specify a filename with wildcards. For instance, to defragment all DLLs under c:\winnt you could enter "contig -s c:\winnt\*.dll". The -q switch, which over-rides the -v switch, makes Contig run in "quiet" mode, where the only thing it prints during a defrag run is summary information.
To make a new file that is defragmented upon creation, use Contig like this:
Usage: contig [-v] [-n filename length]
How it Works
Contig uses the native Windows NT defragmentation support that was introduced with NT 4.0 (see my documentation of the defrag APIs for more information). It first scans the disk collecting the locations and sizes of free areas. Then it determines where the file in question is located. Next, Contig decides whether the file can be optimized, based on free areas and the number of fragments the file currently consists of. If the file can be optimized, it is moved into the free spaces of the disk.
Helen Custer's Inside Windows NT provides a good overview of the Object Manager name space, and Mark's October 1997 Windows NT Magazine column, "Inside the Object Manager", is (of course) an excellent overview.