Windows Formatted Disks

The Windows LDM Problem

A Zip disk formatted with Windows 2000 or Windows XP will be partitioned using Microsoft's new Logical Disk Manager (LDM) which is completely different from the standard DOS partitions we are all used to.

Because this is a new and undocumented partitioning scheme, it is not supported by other operating systems (including other versions of Windows). There is a Linux kernel patch which appears to solve this problem.

This means that a zip disk (or hard drive) formatted in this way cannot be used on a machine running any other operating system. An unpatched Linux installation will refuse to mount such a disk.

This document describes how to use Linux tools to format a Zip disk which can be read by both Windows and Linux systems.

Proper Zip Disk Formating (in Linux)

  1. Fdisk the disk and create a new partition table:

    # fdisk /dev/hdd
    
    Command (m for help): o
    Building a new DOS disklabel. Changes will remain in memory only,
    until you decide to write them. After that, of course, the previous
    content won't be recoverable.
    
    
    Command (m for help):
    
  2. Create a partition 4 that fills the disk:

        Command (m for help): n
        Command action
        e   extended
        p   primary partition (1-4)
        p
        Partition number (1-4): 4
        First cylinder (1-239, default 1):
        Using default value 1
        Last cylinder or +size or +sizeM or +sizeK (1-239, default 239):
        Using default value 239
    
        Command (m for help):
    
    Just hitting return at the "First Cylinder" and "Last cylinder" prompt will default it to the first and last cylinder of the disk.
    
  3. Tag the partition as a "Fat 16" (hex value 6) partition:

    Command (m for help): t
    Partition number (1-4): 4
    Hex code (type L to list codes): 6
    
    Command (m for help):
    
  4. Verify that the partition table is right:

    Command (m for help): p
    
    Disk /dev/hdd: 64 heads, 32 sectors, 239 cylinders
    Units = cylinders of 2048 * 512 bytes
    
    Device Boot    Start       End    Blocks   Id  System
    /dev/hdd4             1       239    244720    6  FAT16
    
    Command (m for help):
    

Note that this was on a 250 megabyte Zip disk so a 100 megabyte one will be slightly different.

  1. Write the partition table:

        Command (m for help): w
        The partition table has been altered!
    
        Calling ioctl() to re-read partition table.
    
        WARNING: If you have created or modified any DOS 6.x
        partitions, please see the fdisk manual page for additional
        information.
        Syncing disks.
        #
    
    Ignore the warning about DOS 6.x. If there are any errors re-reading the partition table, eject the zip disk and reinsert it before preceding.
    
  2. Create the DOS file system:

    # mkdosfs -c /dev/hdd4
    mkdosfs 2.8 (28 Feb 2001)
    #
    

You can exclude the -c flag if you do not want to check for bad blocks. I would recommend that you do even though it takes considerably longer.

  1. Mount it and test it:

    # mount -t vfat /dev/hdd4 /mnt/zip
    # ls /mnt/zip
    # df /mnt/zip
    Filesystem           1k-blocks      Used Available Use% Mounted on
    /dev/hdd4               244464         0    244464   0% /mnt/zip
    # umount /mnt/zip
    #
    

Again, this is on a 250 megabyte zip disk.

  1. Eject it and your done!:

    # eject /dev/hdd #

The disk will now work on both the Windows and Linux machines.

Author and License

©2002 Edward Schaller <schallee@darkmist.net> under the GNU Free Document License.

Adapted for the CS Department Documentation Project by Richard Esplin.