Page 1 of 1

About FAT32 and mkfs.vfat

Posted: Wed Sep 13, 2017 1:47 pm
by vhaudiquet
Hello again !
I finished implementing a read/write FAT32 driver, and it was working fine (did not do delete or mkdir but everything else was good) until i started to read files that are more than 512 bytes in size. The FAT says that the files are 1 clusters (= the first cluster of the file points to 0x0, not EOC but whatever...), and the BPB tells me that sectors_per_cluster = 1. I formatted the partition with mkfs.vfat -F 32, and after a lots of checks and considerations, i read that on the wiki :
"Several developers also make the error of passing -F to mkdosfs in an attempt to choose a FAT size, which often has the effect of creating a corrupt filesystem since the result doesn't follow the official rule for FAT sizes anymore." (http://wiki.osdev.org/FAT#Creating_a_fr ... filesystem)
I was wondering : What does "a corrupt filesystem" means ? Could it be the source of my problems ? And then how does linux to deal with this filesystem (because editing files, even files that are more than 512 bytes, is working fine on it) ? Finally, how should i format the partition without using mkfs.vfat -F 32 ?
Thanks for reading ! (and sorry if my english is bad, i'm french)
(EDIT: i also have problems to read directory that have lots of entries, and i think again that it could be because the dir is taking more than 1 sector or cluster, but the FAT tells me the opposite)

Re: About FAT32 and mkfs.vfat

Posted: Sun Sep 17, 2017 7:35 am
by Octocontrabass
valou3433 wrote:The FAT says that the files are 1 clusters (= the first cluster of the file points to 0x0, not EOC but whatever...),
A value of 0 means an empty cluster. You're not reading the FAT correctly.
valou3433 wrote:I was wondering : What does "a corrupt filesystem" means ?
There's a minimum size for FAT32. Using the -F option may force mkfs.vfat to create a FAT32 filesystem that's too small, and it won't be usable.
valou3433 wrote:Could it be the source of my problems ?
Only if you're using it to create a FAT32 filesystem that's too small.
valou3433 wrote:And then how does linux to deal with this filesystem (because editing files, even files that are more than 512 bytes, is working fine on it) ?
Linux might have a built-in workaround to detect an invalid filesystem and work with it anyway. Or, your partition might be big enough that FAT32 is valid.
valou3433 wrote:Finally, how should i format the partition without using mkfs.vfat -F 32 ?
Typically, you should let mkfs.vfat guess the correct type of filesystem (FAT12, FAT16, or FAT32). However, if your partition is bigger than approximately 32MB, you may use the -F option to override the default. You'll receive a warning from mkfs.vfat if the result is a corrupt filesystem.
valou3433 wrote:(EDIT: i also have problems to read directory that have lots of entries, and i think again that it could be because the dir is taking more than 1 sector or cluster, but the FAT tells me the opposite)
Same as with files, you're not reading the FAT correctly.