How MS-DOS 6.22 Resolves Drive Conflicts at Boot
MS-DOS 6.22 resolves drive assignment conflicts during the boot sequence by using a rigid, deterministic enumeration hierarchy rather than dynamic conflict negotiation. Because the operating system does not identify volumes by unique identifiers (such as UUIDs), it prevents naming collisions by scanning physical hardware, partitions, and drivers in a predefined, sequential order. Drive letters are allocated on a first-come, first-served basis, automatically shifting secondary drive letters upward or utilizing driver-level letter swapping to ensure critical system drives retain their expected mappings.
1. Hardware and Partition Enumeration Order
The BIOS and the MS-DOS kernel (IO.SYS and
MSDOS.SYS) initiate the allocation process before reading
configuration files. Letters are assigned according to the following
strict sequence:
- Floppy Drives (A: and B:): The system always
reserves
A:for the first physical floppy drive. If a second floppy drive is present, it is assignedB:. If only one floppy exists, MS-DOS creates a logicalB:that shares physical driveA:to allow floppy-to-floppy disk duplication. - Primary Partitions Across Disks: MS-DOS scans the
Master Boot Record (MBR) of every physical hard disk detected by the
system BIOS. It assigns letters to the active Primary DOS Partition on
the first physical hard drive (
C:), followed by the Primary DOS Partition on the second physical hard drive (D:), and so on. - Logical Drives in Extended Partitions: Once all primary partitions on all physical drives have consumed their letters, MS-DOS loops back to the first physical hard drive. It traverses the Extended Partition table, assigning sequential letters to each logical drive found on the first disk, before moving to the logical drives of the second disk.
This priority rule means adding a second hard drive with a primary partition will displace the logical drive letters of the first hard drive, as the new disk's primary partition claims the next letter in sequence before the extended partition logical drives are mapped.
2. Device Drivers and the LASTDRIVE Limit
Block devices initialized via CONFIG.SYS (such as
RAMDRIVE.SYS) and external software such as
MSCDEX.EXE (for CD-ROM drives) are evaluated after hardware
partitions are established:
- Sequential Allocation: Device drivers request a block unit and are automatically assigned the next available letter following the last partitioned drive.
- The LASTDRIVE Directive: By default, MS-DOS sets
the available letter ceiling to
E:, unless physical partitions already exceed this letter. If a device driver attempts to mount a unit and no letters remain between the current assignment andLASTDRIVE, MS-DOS generates a boot error (e.g., "No drive letters available") and fails to mount the conflicting device. To resolve this, users must explicitly defineLASTDRIVE=Z(or the desired letter) inCONFIG.SYS.
3. DriveSpace Letter Swapping
Drive assignment conflicts are particularly problematic for disk
compression utilities like DriveSpace (DRVSPACE.BIN), which
is native to MS-DOS 6.22. To ensure system files on the compressed
volume remain accessible as C::
- Internal Redirection: During pre-boot
initialization,
DRVSPACE.BINloads beforeCONFIG.SYSis parsed. It readsDRVSPACE.INI, which designates a letter mapping table. - Host Drive Relocation: The physical boot drive
containing the Compressed Volume File (CVF) is automatically shifted to
a higher, unused drive letter (typically
H:or a letter close toLASTDRIVE). - Virtual Mapping: The CVF itself is then mounted and
mapped back to
C:. This dynamic reassignment ensures software looking for system paths on the boot drive encounters no conflicts with the underlying physical storage.
4. Software Redirection Utilities
For conflicts that occur after the boot process has handed control
over to COMMAND.COM, MS-DOS 6.22 relies on memory-resident
redirection utilities:
- SUBST: Replaces an existing drive letter or assigns an unused letter to map directly to a physical subfolder, overriding normal path conventions.
- ASSIGN: Routes drive requests intended for one
letter (such as
A:) directly to another (such asC:), resolving software-specific letter hardcoding issues.