Large msdosfs disk will not mount on RELENG_6
Richard Coleman
rcoleman at criticalmagic.com
Mon Nov 27 08:21:43 PST 2006
Oliver Fromme wrote:
> secmgr <security at jim-liesl.org> wrote:
> >
> > > As far as I am aware windows 2000 and xp will only allow you to format up to
> > > a 32G dive with FAT32. Any bigger and it will force you to use NTFS. The
> > > other strange thing is tht you are trying to mount /dev/da0 and not
> > > /dev/de0s1.
> >
> > The 32 gb restriction was artificial. You can look it up in the M$
> > "knowledge" base. Watch out for the hand waving. FreeBSD and Linux
> > (and probably other cluefull OS's)can handle a 500gb FAT32 drive
> > (assuming intelligent format values) w/o problem.
>
> That's not completely correct, at least as far as FreeBSD
> is concerned (I don't know if and how Linux solves the
> problem).
>
> The basic problem is that FAT doesn't support what UNIX
> calls "inode" numbers (sometimes also called "fileid").
> But for a file system to be able to be handled under Free-
> BSD (and other UNIX systems), files have to be uniquely
> identified by such inode numbers. To solve that problem,
> FreeBSD's msdosfs uses a simple hack by assigning a number
> to each file based on the offset of its directory entry
> relative to the beginning of the file system.
>
> However, if the size of the file system exceeds 128 MB
> (which is the size of 2^32 directory entries), then those
> numbers don't fit into a 32 bit inode number anymore.
> If you try to mount such a file system, it will fail and
> print the error message "disk too big, sorry".
>
> If you compile your kernel with MSDOSFS_LARGE, then the
> kernel uses a different hack to generate appropriate inode
> numbers: Whenever you access a file, it assigns a number
> dynamically for this file. That approach works for FAT
> file systems of unlimited size, but it has two other draw-
> backs: First, the kernel needs to maintain a table for
> mapping between files and inode numbers. So, if the file
> system contains many files, the kernel will need a huge
> amount of kernel memory which won't be freed until the FS
> is unmounted (and if you run out of kernel memory, your
> machine panics). Second, when you unmount and remount the
> same file system, you might get different inode numbers
> for your files (because of the dynamic nature), which can
> confuse certain applications. In particular it breaks NFS
> because NFS -- being a stateless protocol -- requires
> constant inode numbers for exports.
>
> Best regards
> Oliver
>
Thanks for the explanation. That helps a lot.
Because of the potential panics that were mention, I can understand a
reluctance to change the default. But I suspect that (attempting to)
mount a large msdosfs disk is a much more common occurrence than using a
smaller msdosfs disk over NFS.
Richard Coleman
rcoleman at criticalmagic.com
More information about the freebsd-stable
mailing list