MS-DOS 6.22 Maximum File Size Limits Explained

MS-DOS 6.22 relies on the FAT16 file system, which imposes strict boundaries on both partition capacity and individual file sizes. While the theoretical architecture of the file system allows for larger files, operating system constraints cap the maximum file size at 2 gigabytes (GB). This article breaks down the technical mechanisms governing these limits, explaining the interaction between directory structures, cluster sizes, and volume constraints in MS-DOS 6.22.

The 2 GB File Size Limitation

In MS-DOS 6.22, the absolute maximum file size is 2 gigabytes (specifically 2,147,483,648 bytes). Although the FAT directory table stores file sizes as 32-bit unsigned integers—which technically allows for an upper limit of 4 GB minus 1 byte—MS-DOS 6.22 cannot create or read a file larger than 2 GB. This restriction is directly tied to the maximum supported partition size of the operating system.

Why the Partition Limits File Size

A file cannot span across multiple partitions or drives; it must reside entirely within a single volume. Under MS-DOS 6.22, the implementation of FAT16 restricts volume capacity to 2 GB due to the following architectural factors:

  • 16-bit Cluster Addressing: FAT16 uses 16-bit numbers to address clusters on a drive, limiting the total addressable cluster count to 65,526 (accounting for reserved values).
  • Maximum Cluster Size: MS-DOS 6.22 supports a maximum cluster size of 32 kilobytes (64 sectors per cluster at 512 bytes per sector).
  • Total Volume Capacity: Multiplying the maximum usable clusters (65,526) by the maximum cluster size (32 KB) yields a total partition size of roughly 2.097 billion bytes, or 2 GB.

Because an MS-DOS 6.22 volume cannot exceed 2 GB, a single file is physically constrained to that same 2 GB maximum.

Practical Implications in MS-DOS 6.22

In standard operation, attempting to create or expand a file beyond the free space of a 2 GB volume results in an "insufficient disk space" error. Furthermore, standard DOS utilities, system calls (such as Interrupt 21h), and internal pointers rely on signed 32-bit integers in several code paths, reinforcing the 2 GB boundary as an unbreachable ceiling for individual files within the environment.