mkdos分区后 空间大小分布情况分析
空间分布情况如图:
上图参数如下:
第0号扇区: 引导扇区;
第1号扇区: FSInfo 扇区;
第6号扇区: 备份引导扇区;
第7号扇区: 备份FSInfo 扇区;
第0-31号扇区: 保留扇区数;
第32-15479号扇区: FAT1;
第15480-30927号扇区: FAT2;
第30928-15849471号扇区: 数据区(目录也属数据);
磁盘参数如下:
每簇扇区数: 8
FSinfo扇区中的空闲簇数: 0x001E2BE5 = 1977317
FSinfo扇区中的下一个空闲簇号:0x00000003 (根目录已占用,0x00000002)
保留扇区数: 32
FAT表扇区数:15448
FAT表总数:2
整个磁盘扇区数:15849472 (0-15849471)
好了,让我们来计算一下:
实际总空间大小扇区数(数据区) = 整个磁盘扇区数 -( FAT表扇区数*FAT表总数 + 保留扇区数)
15849472 - (15448*2 + 32 ) = 15818544(扇区)
实际总空间大小簇数: 15818544(扇区) /8 = 1977318(簇)
剩余空间大小簇数 = 实际总空间大小簇数 - 目录已占用的一簇(第2簇)
1977318(簇) - 1 = 1977317(簇) (已跟FSinfo扇区中的空闲簇数相符合)
再看剩余空间大小簇数是否与FAT表的总簇数是否相等?
FAT表总扇区数 = FAT2扇区地址 - FAT1扇区地址
15480 - 32 = 15448(扇区)
或ROOT扇区地址 - FAT2扇区地址 得出
30928 - 15480 = 15448 (扇区)
FAT表总字节数 = 15448 * 512 = 7909376 (字节)
FAT表总簇数 = 7909376 (字节) / 4(字节) = 1977344 (簇) //发现与前面计算1977317(簇)不一致??下面我们来分析一原因.
FAT表可用簇数 =1977344 (簇) - 2 - 1 = 1977341(簇) //前面两个固定簇,1 个根目录簇.
原因分析如下:
因为FAT表以扇区为单位.如果不是15448(扇区),而是15447(扇区)会出现什么情况呢?
FAT表能指向数据区的总簇数 =15447* 512/4 = 1977216 (簇) //要比1977317(簇)少了101个簇.造成101*8*512=413696(字节)浪费.
所以.在FAT表上加多一个扇区来存储指针,也不要因为指针指不到造成浪费.FAT表浪费也就浪浪费不到512字节.两个FAT表也就不到512*2 = 1024字节.所以FAT表最后一个扇区的指针可能没有指向可指向的空间,空间已经不够了.由FAT表计算剩余簇空间是不准确的(可以特殊处理).