We said that the smallest unit that the hard disk drive controller can access is the sector. When Microsoft created DOS, however, they decided that the smallest unit the operating system would access wouldn’t be the sector, but a group of sectors, which they called cluster. The operating system needs a table listing which file is using which sector and the problem in accessing each sector directly is that you need a table long enough to accommodate all sectors available in the hard disk drive, and also make provision for bigger drives that may be launched in the future. For example, for our 250 GB hard disk drive we would need a list with 488,397,168 entries. Back in 1983 when the first hard disk drive was launched with only 5 MB, listing all sectors would take up a lot of space of the hard disk drive.
DOS below version 3.0 used a system called FAT-12, meaning a File Access Table (the table we were talking about above) using 12-bit entries and using 4 KB clusters – i.e. instead of accessing each sector directly the operating system accessed a group of eight sectors per time (4 KB / 512 bytes = 8). With 12 bits you have 2^12 entries on the abovementioned table, i.e. 4,096 entries. Since each entry maps to a 4 KB cluster, with the FAT-12 system you could have hard disk drives up to 16 MB (4,096 x 4 KB). So DOS below 3.0 wouldn’t recognize drives above 16 MB. Since at this time hard disk drives had 5 MB and 10 MB in capacity, this system would work just fine. By the way, FAT-12 system is still used on floppies.
With DOS 3.x Microsoft released FAT-16 system, which at this time used 14-bit addressing (and not 16-bit as the name suggests). With 14 bits the number of entries on the table was of 16,384, and the size of the cluster was of 2 KB (i.e. each cluster was a group of four sectors). Making the math you will find out that with DOS 3.x the operating system could recognize only up to 32 MB (16,384 x 2 KB) hard disk drives.
Then with DOS 4.0 Microsoft expanded FAT-16 to real 16-bit addressing, meaning 65,536 entries on the table. Still using 2 KB clusters this allowed the operating system to recognize hard disk drives up to 128 MB.
With DOS 5.0 instead of increasing the size of the FAT Microsoft decided to play around with cluster size. At the time you’d format your hard disk drive, the operating system would choose the cluster size according to the capacity of your hard disk drive (see table below). This DOS version, however, allowed clusters only up to 8 KB, allowing the operating system to recognize hard disk drives partitions up to 512 MB (65,536 x 8 KB).
Partition Size | Cluster Size (FAT-16) | Operating System |
Up to 128 MB | 2 KB | DOS 5.0 and up |
From 128 MB to 256 MB | 4 KB | DOS 5.0 and up |
From 256 MB to 512 MB | 8 KB | DOS 5.0 and up |
From 512 MB to 1 GB | 16 KB | DOS 6.0 and up |
From 1 GB to 2 GB | 32 KB | DOS 6.0 and up |
From 2 GB to 4 GB | 64 KB | Windows NT only |
Finally with DOS 6.0 Microsoft expanded the above table to allow 16 KB and 32 KB clusters, making the operating system to recognize hard disk drives up to 2 GB (65,536 x 32 KB). This is the final version of FAT-16 as we know it today and was the same file system used by the first version of Windows 95. So FAT-16 file system still has a 2 GB limit per partition. This means that under FAT-16 you can only install a 4 GB hard disk drive by creating 2 GB partitions, i.e. your hard disk drive would be divided into a C: drive with 2 GB and a D: drive with 2 GB.
As a side note, Windows NT allowed the use of FAT-16 partitions with 64 KB clusters (see table above), however this configuration isn’t supported by other operating systems; partitions formatted with this configuration can’t be recognized by other operating systems.
Microsoft could have gone forever increasing the cluster size instead of increasing the number of positions inside the allocation table, but this leads to a problem called slack space. Since the smallest unit on the hard disk drive the operating system can access is the cluster (and not the sector) each file when stored on the hard disk drive must have a size that is an exact multiple of the cluster size. For example, on a 2 GB hard disk drive using FAT-16 a 100 KB file would take up four clusters, or 128 KB, because the hard drive is using 32 KB clusters (100 KB / 32 KB = 3.125, a broken value, so it has necessarily to use four clusters). This extra 28 KB has nothing inside, it is wasted. So when using big clusters, a lot of space on the hard disk drive is wasted just because inside the hard disk drive each file must have a size that is an exact multiple of the cluster size being used.
With Windows 95 OSR2 (launched in 1996 it was Windows 95’s second maintenance version; also known as Windows 95 B) Microsoft launched FAT-32, which became more known when Windows 98 was released, two years later. Using 32-bit addressing it could, at least in theory, access disks up to 2 TB accessing sectors directly instead of using clusters, what would eliminate the slack space problem. FAT-32, however, continues to use clusters:
Partition Size | Cluster Size (FAT-32) |
Up to 256 MB | Not Available |
From 256 MB to 8 GB | 4 KB |
From 8 GB to 16 GB | 8 KB |
From 16 GB to 32 GB | 16 KB |
From 32 GB to 2 TB * | 32 KB |
* In theory FAT-32 supports partitions bigger than 2 TB – for example, up to 128 TB if 32 KB clusters are used (2^32 x 32 KB = 128 TB). However, due to a limitation on the hard disk drive boot sector, which uses a 32 bit variable to number the physical sectors present on the hard disk drive, the practical limit of FAT-32 is of 2 TB (2^32 x 512 bytes per sector = 2 TB).
So the slack problem is still around with FAT-32.
This is not the only problem. Even with FAT-32 Windows 95 OSR2 can’t access partitions over 32 GB and Windows 98 can’t access partitions over 128 GB. Windows ME does not face this problem.
Windows NT, 2000 and XP (and probably Vista) can’t format FAT-32 partitions over 32 GB, even though they can recognize hard disk drives formatted with FAT-32 under Windows ME up to the 2 TB limit.
Another problem with FAT-32 is that files can’t be bigger than 4 GB. With people nowadays editing hi-def videos and even the most newbie user authoring and burning his/her own DVDs, this is a real limitation.
FAT-32 also allows only each partition to hold up to 4,194,304 files. Probably you will reach this and the above limit way before the 2 TB maximum partition size limit.
The solution to all these problems is to use a different file system, and if you are a Windows user the most indicated is to use NTFS, which is a file system introduced by Windows NT back in 1993 and is natively available on Windows NT, 2000, XP, 2003 and Vista. In fact this is the recommended file system if you use one of these operating systems. We will discuss more about this file system on next page.
In fact, the solution for each one of the limits explained on this page is to upgrade your operating system to a newer version.