Admin Tip #120: Int 13 x86 boot limitation and C partition |
Hits: Failed to execute CGI : Win32 Error Code = 3
|
When the computer boots, the only way for Windows NT to access the hard drive is to use a set of BIOS functions known as Interrupt (INT 13). When INT 13 was developed, multigigabyte hard drives weren't available and INT 13's limitation of 7.8 GB wasn't seen as critical. As a consequence, Windows NT 4.0 can't access more than 7.8 GB during the first stages of the boot process; thus, the system partition is limited to 7.8 GB. Newer operating systems such as Windows 98 and Windows 2000 don't suffer from this limitation because they use a newer extended INT 13 that can address more than 7.8 GB.
During Windows NT's boot process, ntdetect.com, uses int13 BIOS function for drive layout information. Because of int13 limitations, ntldr, boot.ini, ntdetect.com and Windows NT's system files must be located within the first 1024 cylinders of drive 0. The int13 functions allow low-level code to read from and write to the drive. These functions use 24 bits to address sectors on the hard disk. The 24 bits are divided into a 10-bit field for cylinder, an 8-bit field for head, and a 6-bit field for sector. The maximum amount of sectors accessible to the INT 13 interface is therefore:
Cylinders * heads * sectors = 1024 * 256 * 63 = 16,515,072
When the sectors size is 512 bytes, this calculated to
16,515,072 * 512 = 8,455,716,864 bytes = 7.875 GB.
The above assumes a disk standard geometry with 63 sectors/track, 256 heads with 1024 cylinders. Some drives are configured with 63 sectores/track, 128 heads with 2048 cylinders. The multiplication comes out to 7.875 GB BUT remember that int13 only allocates a 10-bit field for cylinders. This is an access limitation during boot to the first 1024 cylinders. For the drives configured with 2048 cylinders, fully half its space is unavailable during boot, resulting in a maximum usable NT system partition of 4GB.
This leads to significant confusion about the maximum size for NT system partition. As you can see, its either 4GB or 7.875GB depending on whether the drive is configured with 2048 cylinders or 1024 cylinders under NTFS. If you don't know which applies to your drive, use 4GB as your C partition. A related issue involves dual-boot for Windows NT and Win95/Win98. Win9x must be installed on a FAT16 partition (since NT will not boot to fat32) which constraints the boot partition down to 2GB. The FAT file system is limited to 65,525 clusters. The size of a cluster must be a power of 2 and less than 65,536 bytes--this results in a maximum cluster size of 32,768 bytes (32K). Thus max size for FAT16 is
65,525 * 32,768 bytes = 2 GB.
The problem is that NT will install properly and run fine even in the drive with 2048 cylinders if you create a large partiton, even a 18GB or 21GB. During the install, Windows files used during the boot process are compacted in the early sectors. Staying within the 1024 cylinder int13 limitation. But its a crap shoot. Lets say you have mostly filled your HD and the that next niffty service pack comes along and up apply it. Unfortunately at this point, the updated dlls and other system files are spread across the entire partition. If any of the critical files are stored above the 1024 cylinder limit, on your next boot, you will get the thrilling message, INACCESSIBLE_BOOT_DEVICE
Related:
Boot Partition Created During Setup Limited to 4 Gigabytes
Windows NT 4.0 Supports Maximum of 7.8-GB System Partition
Windows NT Partitioning Rules During Setup
Boot Partition Created During Setup Limited to 4 Gigabytes
Windows NT Boot Process and Hard Disk Constraints
1024 Cylinder Limit, How Windows NT Gets Drive Geometry
How Windows NT Handles Drive Translation