Note If you find fat32format a bit fiddly to use or these instructions a bit hard to follow you should try the replacement for fat32format. It is a Windows application with a GUI. Try it here
I recently got a SATA 250GB disk for testing FATLIB. It turns out that Windows XP won’t let you format a volume bigger than 32GB with FAT32. I could use NTFS, but that’s not what I FATlib supports. In fact, NTFS can only be written safely by Windows XP – there are as far as I know no other drivers for other OS’s, unlike FAT which is supported by virtually anything.
As Microsoft put it here
You cannot format a volume larger than 32 gigabytes (GB) in size using the FAT32 file system during the Windows XP installation process. Windows XP can mount and support FAT32 volumes larger than 32 GB (subject to the other limits), but you cannot create a FAT32 volume larger than 32 GB by using the Format tool during Setup. If you need to format a volume that is larger than 32 GB, use the NTFS file system to format it. Another option is to start from a Microsoft Windows 98 or Microsoft Windows Millennium Edition (Me) Startup disk and use the Format tool included on the disk.
Using Windows 98 obviously opens up other issues – It doesn’t support USB 2.0 or SATA as far as I know. Formatting a huge disk will take ages. It suports IDE, but not 48bit LBA, which is required for drives greater than 137GB. Also, you need to patch format.exe and fdisk to work with disks greater than 64GB. Even then scandisk will corrupt large disks unless you disable it. It can be done, but basically, this is ancient 16 bit code, and using it on modern hardware is not a good idea. There is a port of mkdosfs from Linux to Win32. I tried it, and chkdsk complained about being unable to test a RAW filesystem. It also uses funny cluster sizes, only 4K for normal sized disks.
Actually, looking back at the Microsoft comment, if I could format the volume myself, all would be OK. Fat32 is pretty simple, so it occured to me to write a fast format routine to do the job. Note that the 32GB limit is a limit of the formatter in Windows XP. FAT32 itselft should be OK to 2TB, limited by a 32 bit sector count in the boot sector. XP comes with a partitioning tool, called Disk Management. It even has Wizards for partitoning. This should be a cinch.
I’ve tested this with a SATA disk as follows. Power off the computer and connect the disk. Power up again – check the Bios finds it. If you have a IDE or SATA disk, make sure you power off before connecting, USB and Firewire ones can be connected with the power on.
Click Start menu, select Run and enter diskmgmt.msc
If it asks you to initialise the disk, make sure you select a Basic disk, as opposed to a Dynamic.
There’s a guide on Disk Management here You need to find the disk with unallocated space. Right click on it and select “New Partition” and follow these steps, clicking “Next” to get move on at each stage.
- Partition Wizard starts, just click next to move on
- Select Primary Partition.
- Enter the maximum size for the Partition Size
- Choose assign a drive letter. I used F:
- Select “Do not Format this partition”
- There will be a dialog box, summarising all the previous stuff. Click Finish
Now you have a drive letter, this is what we will pass to the formatter
Now download a copy of fat32format. Extract the single EXE file to somewhere suitable, like C:\.
Click Start->Run and enter
When the command prompt opens, type this – C:\ is the place you extracted the exe file to. Note if this sort of command line stuff makes your head hurt, you should probably give this a try instead
CD /D C:\
press enter and then type this. You need to replace f: with the drive letter you are trying to format.
You should see this displayed
Warning ALL data on drive 'f' will be lost irretrievably, are you sure (y/n)
Now when it says this, it really means it. If you format the boot sector, FATs and root directory will be filled with zeros. By typing pressing Y and hitting return, you’re also absolving me of liability for whatever was on the disk before.
Assuming you don’t bail out at this point you should see something like this –
Warning ALL data on drive 'f' will be lost irretrievably, are you sure (y/n) :y Size : 250GB 488392002 sectors 512 Bytes Per Sector, Cluster size 32768 bytes Volume ID is 1bdb:2c1d 32 Reserved Sectors, 59604 Sectors per FAT, 2 fats 7629261 Total clusters 7629260 Free Clusters Formatting drive f:... Clearing out 119304 sectors for Reserved sectors, fats and root cluster... Wrote 61083648 bytes in 0.988463 seconds, 61796609.106193 bytes/sec Initialising reserved sectors and FATs... Done
This means that all has gone according to plan. It should take about 4 seconds per Terabyte to format the disk. You can run chkdsk f: at this point if you’re curious, and see something like this –
The type of the file system is FAT32. Volume Serial Number is 1BDB-2C1D Windows is verifying files and folders... File and folder verification is complete. Windows has checked the file system and found no problems. 244,136,352 KB total disk space. 244,136,320 KB are available. 32,768 bytes in each allocation unit. 7,629,261 total allocation units on disk. 7,629,260 allocation units available on disk.
This shows that my calculations match up with the ones inside Windows, which is good news
It is also possible to set the cluster size with a -cN parameter where N is the number of sectors per cluster. On a hard disk, which is the only sort we support, one sector is 512 bytes. The cluster size will be N times 512. I played around with this, and it seems that Windows XP supports small cluster sizes, except that chkdsk runs very slowly, presumably because it needs to read the huge FAT that results from these settings. Given the nature of FAT32, you can’t reduce the cluster size such that the number of clusters is more than 228. I’d recommend using the default cluster sizes, which are the Microsoft recommended ones, unless you need to force them for testing or something
You can download either just the fat32format binary ~20K or the fat32format binary and source ~30K The source code can be compiled with Vistual Studio 6.0 or later. The current version number is 1.01.
Warning ALL data on drive 'f' will be lost irretrievably, are you sure (y/n) :y Failed to open device - close any files before formatting Are you SURE you're formatting the RIGHT DRIVE!!!
Incidentally, if you are running admin and it still complains about open files, you can use Process Explorer to find out which process is guilty. Run it, Press Ctrl+F and enter the drive letter, e.g. E: and close any processes that have it open
This should make it a bit harder to lose data, assuming that you have at least one open file on the drives with data you want to keep. The drive that Windows is currently running from will have lots of files open – the pagefile, registry etc. I usually keep an Explorer.exe open in the root directory of any other drives to block format from running. Finally, it will only work with hard disks with 512 bytes per sector. If you have a DVD-Ram disk, format using the Windows formatter. If you have an optical disk drive bigger than 32GB, send me a sample and I’ll port to it.
One last thing – fat32format is designed to format disks quickly. It doesn’t check for bad sectors. If you need integrity checks, run a chkdsk /R f: after the format.
Finally and most importantly, it isn’t possible to recover your data if you format the wrong disk, be careful using it. It is licensed under the GPL license – you may distribute source and binaries. You can build it into an open source application. If you want to build it into a closed source application you should approach me for licensing it under a BSD style license for a fee.
If you find this software useful, please send me an some money via Paypal. I’ve had >170000 downloads, and a lot of emails, 99% successes. There are some fails, but they seem to be with hard drives which nothing else can write to either. If you have this, try to testing combinations to find out which is causing the problem. E.g. if you have Disks A and B and USB cases C and D, try the combinations AC, AD, BC and BD to work out which is bad. Return the bad component for a replacement, and you’re good to go. If you bought a single unit, try getting it replaced.
As of now, fat32format has worked on disks from 40GB to 2TB
Interfaces tested include IDE/PATA, SATA, eSATA, USB and Firewire
The formatted disks work on XP, Mac, Linux, the iPod (40gb), various Nas boxes and mediaplayers and Norton Ghost 2003
Formatting works on Windows 2000, Windows XP, and Windows Server 2003 and Vista. Note that Windows 9x/Me are not supported and do not work, but you can use the format.exe supplied with them instead
If it fails send me an email, please put FAT32 in the subject.
If you have problems creating partitions bigger than 137GB on an ATA (IDE) disk connected to the motherboard, make sure you have SP1 or later and an LBA48 compatible bios. Check your motherboard site for a bios update.
fat32format works with Vista. The UI has changed a bit when creating drives and UAC makes the whole process a bit more cumbersome.
To create drive letters, Right Click on My Computer and Select Manage. UAC prompts you to escalate privileges, do so. You can right click on empty drives and Initialize them. Once you’ve done that you can create new volumes by right clicking on them and selecting New Simple Volume. Fast formatting them with NTFS is quick and should detect a completely dead drive.
If you have Vista there is a quick way to get an Admin cmd prompt. Click the Start button/ Windows flag in the bottom left of the screen and enter cmd like on XP but press Ctrl+Shift+Enter, you’ll get a privilege escalation dialog click OK and you end up with an Admin command prompt, helpfully labelled as Administrator: C:\Windows\system32\cmd.exe
This is the best way to run fat32format. It’s always been Admin only, it’s just that on XP most power users ran with Admin rights all the time.
A couple of people asked me about 64K cluster size. There are compatibility problems with this, as 16 bit set up programs sometimes assume that the cluster size will fit in a 16 bit integer. When calculating disk space, they thus end up with a value of zero. Fat32format disables cluster sizes bigger than 32K for this reason. However, some people need this, so the current version has the check disabled. You still need to force the cluster size by hand though, e.g. fat32format -c128 f:
Fixes for making partitions created above sector 0xffff bootable, and a cosmetic fix for the drive size printout when formatting drives bigger than 1TB ( 0x7fffffff sectors )
Fix for “Failed to set partition info”. Some drives have no partition table, so you can’t set the the partition type.
It was possible to set the cluster size too high resulting in too few clusters, or too high resulting in too many – fat32 must have between 2^16 and 2^28 clusters because of various compatibility considerations. Added code to check that.
Fixed an error where it crashes if people use /? to get help
Added support for bytes per sector values of other than 512
GPT support, fix for boot sector when using Windows AIK’s bootsect.exe, FSCTL_ALLOW_EXTENDED_DASD_IO