Ink Blot welcomes you to Lance's Web Site!

I've decided to resurrect my web site on a limited basis; mainly to discuss FAT32X, but also to test a new site build process. LC

(best viewed at 800x600 full screen!)


Home
Boot Sectors
FAT32X
Utility Programs
Site Map

FAT32X

There's been a lot of talk about FAT32X recently, but no hard info. I recently built a new machine which happened to have the capability of creating FAT32X partitions. Before I turned this box into its real function (a FreeBSD server), I thought I would take some time to experiment with FAT32X partitions and gather some accurate information.

What is FAT32X?

A FAT32X partition is a partition whose size extends beyond the BIOS addressing of a fixed disk drive. I should tell you that a lot of the research was helped with by my friends at Hard Drive Recovery Associates, an Irvine data recovery service that is basically expert when it comes to these hard drive formats and their issues.

FAT32X partitions will only be created on PC's equipped with a BIOS that has the int 13h extensions (functions 41h, 42h, 43h, 48h, etc).

FAT32X partitions have the same logical structure as a FAT32 partition.

Now let's explore each of these statements...

BIOS Disk Addressing
Due to legacy limitations in the BIOS, the maximum number of cylinders is 1023, the maximum number of heads is 255, and the maximum number of sectors is 63. (reference: int 13h, function 08h). This results in a maximum disk size of 1023x255x63 sectors, or 16434495 sectors x 512 bytes/sectors, or 8414461440 bytes. You can call it 8.41GB, or 7.84GB depending on how you cipher (by 1000's or 1024's). So the BIOS is only capable of directly addressing a maximum of 8 gigabytes of disk space using cylinder.head.sector addressing and its standard i/o functions (reference: int 13h, functions 02h, 03h).

Int 13h extensions
With the recent introduction of very large drives to the PC market, BIOS manufacturers have added what is known as 'int13 extensions'. These extensions are a new set of BIOS functions (reference: int 13h, functions 41h, 42h, 43h, 48h) that allow the software to access disk space past the BIOS cylinder.head.sector disk configuration parameters.

You'll notice I didn't say "past the 8GB limit". That's because the int 13 extensions allow a disk to be accessed from the beginning to the end, and the int 13 extension functions can be used in conjunction with the standard disk i/o functions.

How do you know if your BIOS is capable of int13 extensions? You can use the DSIZE utility program with the -X option to determine it.

This example is from my old Gateway 2000 P5-100:
C:\>dsize 0 -x
0:  1622605824 bytes   3169152 sectors  1547MB

Int13 Extensions not available
And this example is from my new machine:
C:\>dsize 0 -x
0:  1081737216 bytes   2112768 sectors  1031MB

Int13 Extensions enabled
  Version=21h
  Subset =0001h
    0001 Extended disk access functions supported
  Real   =(2100 cylinders, 16 heads, 63 sectors)
FAT32 Partition Structure
Although it may seem as if FAT32X is something brand new, it really isn't. FAT32X is simply a repackaging of FAT32. There is one major difference between a FAT32 partition and a FAT32X partition - the partition type in the master boot record is 0Bh for FAT32, and 0Ch for FAT32X. That's it, well almost. The number of sectors in a FAT32 partition must be within the addressing range of the BIOS, but the number of sectors in a FAT32X partition can go past that range. The partition type of 0Ch signals Windows95B into using the int13 extensions, and that's what the X stands for.

Here's an example of FAT32X on a 1GB drive (Western Digital 21000). The whole drive is configured as a primary partition. The important thing to note here is the number of addressable sectors. The BIOS configuration is 524x64x63, or 2112768 sectors. The actual disk configuration is 2100x16x63, or 2116800 sectors. The last sector of the partition is beyond the BIOS addressing, but is equal to the actual last sector (63+2116737).
A:\>bootsect 0 -m -t

BOOTSECT (01.07, 05/07/98) - Read/Write/etc Boot Records

Reading master boot record from drive 0

Partition table for drive 0:
Part  Boot  Sys   Start Address   End Address   Starting  Number of
Num   Flag  Type   Cyl Head Sec   Cyl Head Sec    Sector    Sectors
  0    80h  0Ch      0   1   1    523  63  63         63    2116737
  1    00h  00h      0   0   0      0   0   0          0          0
  2    00h  00h      0   0   0      0   0   0          0          0
  3    00h  00h      0   0   0      0   0   0          0          0

Drive 0  Cylinders=524 Heads=64 Sectors=63
Actual   Cylinders=2100 Heads=16 Sectors=63
Here's another example using the same hardware configuration, but this time an 800MB partition was created. Since the partition is within the confines of the BIOS geometry, it was created as FAT32.
A:\>bootsect 0 -m -t

BOOTSECT (01.07, 05/07/98) - Read/Write/etc Boot Records

Reading master boot record from drive 0

Partition table for drive 0:
Part  Boot  Sys   Start Address   End Address   Starting  Number of
Num   Flag  Type   Cyl Head Sec   Cyl Head Sec    Sector    Sectors
  0    00h  0Bh      0   1   1    406  63  63         63    1640961
  1    00h  00h      0   0   0      0   0   0          0          0
  2    00h  00h      0   0   0      0   0   0          0          0
  3    00h  00h      0   0   0      0   0   0          0          0

Drive 0  Cylinders=524 Heads=64 Sectors=63
Actual   Cylinders=2100 Heads=16 Sectors=63
And just for fun, lets create an extended DOS partition on the drive, and allocate the remainder of the space to a logical DOS drive. This creates an ExtendedX partition (type 0Fh), and within it is a standard FAT16 (type 06h) sub-partition which extends beyond the BIOS addressing of the drive. This volume is not usable except under DOS 7.10/Win95B. Even though this is a FAT16 volume, it will not be recognized by previous verions of DOS/Win95 since its inside an ExtendedX partition.
A:\>bootsect 0 -m -t -x

BOOTSECT (01.07, 05/07/98) - Read/Write/etc Boot Records

Reading master boot record from drive 0

Partition table for drive 0:
Part  Boot  Sys   Start Address   End Address   Starting  Number of
Num   Flag  Type   Cyl Head Sec   Cyl Head Sec    Sector    Sectors
  0    00h  0Bh      0   1   1    406  63  63         63    1640961
  1    00h  0Fh    407   0   1    523  63  63    1641024     475776
  2    00h  00h      0   0   0      0   0   0          0          0
  3    00h  00h      0   0   0      0   0   0          0          0

Drive 0  Cylinders=524 Heads=64 Sectors=63
Actual   Cylinders=2100 Heads=16 Sectors=63

Extended partition table for drive 0 partition 1 (sector 1641024):
Part  Boot  Sys   Start Address   End Address   Starting  Number of
Num   Flag  Type   Cyl Head Sec   Cyl Head Sec    Sector    Sectors
  0    00h  06h    407   1   1    524  63  63         63     475713
  1    00h  00h      0   0   0      0   0   0          0          0
  2    00h  00h      0   0   0      0   0   0          0          0
  3    00h  00h      0   0   0      0   0   0          0          0
For more FAT32X partition configurations, read FAT32X Test Cases.

A common rumor about FAT32X is that the boot sector is at the end of the partition.
WRONG!
Read The FAT32X Boot Sector Rumor for details.

The FAT32X Problem

The problem, which still existed as of 5/1/98, is that most of the utility software (i.e. Partition Magic by PowerQuest, and Norton by Symantec) still haven't released updates to deal with FAT32X partitions.

Do you want to convert a FAT32X partition to FAT32?
Read The FAT32X Conversion for details.

I hope you enjoyed this little excursion into FAT32X. Drop me a note if you have any corrections or additional information to contribute.
Lance Costanzo, [email protected]