关于fat32分区32g限制的问题

雨荷论坛中浪人阿荣的提问


FAT32为什么在系统下只能支持32G分区呢?
根据FAT32文件系统
采用32位2进制数来表示簇号
每个FAT文件能管理 2的32次方个扇区 4294967296个
每个扇区容量为512kb
则可算出 最大分区容量为2TB
这是FAT最大能支持的硬盘容量。
但是为什么在XP下只能管理最大32G的FAT32分区呢?
高手指点一下。。。。


大概的回复,请大家交流指正


看了很久,没有人来回答,估计高手都在忙,我来回答吧。请易拉罐和各位兄弟看看有没有问题,没有问题的话请易拉罐兄弟置顶吧,不然又沉了。


fat32为什么只能到32g,这个问题很多人问过我,都是口头解答的,没有留下文字,正好这个兄弟又问了,在这留个记号吧。


fat16是2g,fat32是32g?这个限制的原因非常底层,主要设计到扇区和簇的表示和计算问题。


1、先说fat16为什么是2g吧。
首先说,你要了解什么是fat12,fat16,fat32,还有他们为什么叫这个。我们知道fat是系统,是表示一种数据的存储方式。这种方式的文件位置是按照簇来存取的,而fat12,fat16,fat32就是根据他们对簇的描述来命名的。说白了,就是fat12是用12位来表示一个文件所在的簇的,那fat16就是用16位来表示,fat32是用32位来表示。注意,这里是位,不是字节。
所以,那fat16用16位来管理簇,那能管理的最大簇就是2的16次方,等于65536簇,也就是说fat16只能管理65536个簇。
知道了能有多少簇,那就来看簇和扇的关系,fat16最大的簇为32k(这个不懂的话,查一下底层资料就知道了,这是fat标准的规定),32k就是64扇。这样,65536×64=4194304扇区,1扇是512字节,那就是2g了。
这样应该看明白了,也就是说fat16最大能管理65536簇,簇最大64扇区,这样fat16最大能管理2g的分区。


2、fat16看明白了,我们接着说fat32为什么只能管理32g的分区。
这里有一个重要的问题,就是dpt和bpb的信息,说白了就是表示分区大小的4个字节,4个字节32位,也就是2的32次方,等于4294967296,1扇是512字节,这样就是大概2t左右的大小了。这个数在楼上的问题中出现了。但是请注意,这是表示分区大小的问题,也就是说,任何分区,不管是fat12、fat16、fat32还是ntfs,最大都能分到2t左右的一个大的分区。这个应该能理解吧。
好,分区能分那么大,但是不一定能管理。其实我们现在说的问题是管理问题,而不是分区大小问题。再说白一点,你能分成2t的分区,但是你不能管理,那也不会让你这么分。这就是为什么微软只能让fat32管理到32g的容量的分区。
好,我们再解释为什么是32g这个问题。fat32是用32位来表示簇信息的。这个前面说了。


从现在开始,要反过来想了。
如果我们同意一个2t的fat32空间的存在,那这样一个空间,最少能有多少簇那?那就要看每簇最大的容量了。fat系统,每簇最大32k,也就是64扇。那2的32次方除以64,也就是4294967296除以64=67108864,这是2的26次方。也可以看成2的(32减6)次方。


也就是说在2t的分区上我们用最大簇来分,最少会有2的26次方67108864个簇。
也就是说如果64扇一簇的情况下,fat32的簇数值不能超过67108864这个数,也就是说只能用到26位。如果超过这个数,再乘以64,那出来的扇区位置就会大于2t。你分区都不能分超过2t,那怎么会有2t以外的簇的寻址那?
因为给了fat32分了32位来指定簇位置(可以用大于26位),而fat最大的簇是64扇。如果出现这样的情况,就会有问题,就会寻找错误。所以微软必须避免这样的情况出现。
如何避免那,那就是限制你fat32分区的大小在32g。


那为什么是32g?我们可以这样来理解微软的意图,如果有特出情况,你的分区是2t的时候,你又要用1簇64扇的情况下,为了避免簇大于2t的指向,那就马上把寄存器限制到26位,这样表示分区大小的位置也只有26位了,那就只可能表述2的26次方的扇了,算出来就是67108864扇,约等于32g了。


当然,你要想手动改簇指向的4个字节,那也没有办法。这只是微软在正常情况下,分区的控制,非正常的情况下就不谈了。另外64扇1簇的情况很少。微软会控制这个数值来控制对32g内的fat32分区进行管理。


正常的情况下,32位表示大小,32位表示簇。而一般簇都是8扇,16扇。所以簇的数要小于分区大小的数。这样只让你用26位,并且在多少扇一簇上进行控制。就相当安全了。



原文地址:http://bbs.yuhedata.com/bbs/thread-2569-1-2.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值