很多人会问,为什么我买的SD卡4GB的容量确是3.7GB,没有4GB,难道这是升级卡,或者是不足量的SD卡,其实并不是,闪存卡的实际容量往往要比其标称容量小,一个全新的闪盘产品标称容量为64MB,而在操作系统中格式化后其实际容量可能只有61.8MB。那么这里少的2.2MB的容量到哪儿去了?
这2.2MB的空间并非凭空蒸发了,而主要是操作系统识别与硬件设备生产厂商两者容量计算公式上的不同所致。生产厂商为了计算方便,往往设定1KB=1000Bytes、1MB=1000KB、1G
B=1000MB。而操作系统的换算则为1KB=1024Bytes、1MB=1024KB、1GB=1024MB。这就产生了存储设备标配容量和实际使用容量出现差异的情况。由此推算可知128MB闪盘的实际容量理论上应为125MB,64MB闪盘的容量应该为62.5MB,以此类推。此外,由于闪存芯片本身在制造时的问题,闪存介质允许有坏块(Bad Block)的存在,这些坏块不能被使用,也不算做有效容量。与硬盘一样,闪存盘也是采用FAT文件系统,而FAT文件系统包括MBR主引导分区、FAT文件分配表和ROOT目录区等,这些区域也要占用闪存空间,一般需要占用几百KB。
闪盘作为一项比较常用的移动存储解决方案,个别厂商在其产品中加入了诸如保密、QQ聊天记录备份等功能,这些功能实际上需要占用闪盘中的部分物理块来存放特殊配置信息或数据。另外,有些朋友发现自己的闪盘在使用一段时间后,再次格式化,其容量竟然会自动变小了。这又是什么原因呢?
数据写入的时候,闪存芯片内部需要有至少一个物理块(Block)作为交换块使用。这是因为闪存的写操作很特殊,必须是先擦除,然后才能写入数据,而擦除的最小单位是一个物理块,但写数据的最小单位却是一个页(Page)。在闪存的存储单位中,一个物理块包含若干个物理页。因此写数据时,需要有一个空的、可以使用的交换块来存放不需要被擦除的数据。由于闪存的充放电特性,使得它的读写次数有物理上的限制。
通常厂商会在闪盘内部做一个读写次数的计数,当闪存芯片的某个物理存储区块达到读写指定的最高次数时,那么该块区将被设定为不再使用的区域,所以闪盘有可能在极度频繁地使用下,容量越来越小。不过,目前多数闪盘产品已经可以保证擦写百万次以上的使用寿命。目前市场上的闪存产品包括两类:1. 未预留缓冲空间的;2. 预留有缓冲空间的。
对于第一种情况,因为没有预留空间,闪存在读写时交换块的损耗相当大,于是就会出现容量越来越小的情况。对于第二种情况,厂商在设计时已经预留部分物理块,比如选择1024个物理块中的1000个作为数据存储使用,其余24个物理块(包括坏块)用作缓冲交换块部分。每次上电后,存储单元的逻辑地址和物理地址需要重新对照,交换块并不是固定的某一区块,因而每一个物理块进行读写操作的几率几乎相同,不会出现哪一个物理块过早被损坏的现象。对于预留缓冲空间的闪盘来说,基本不会出现容量越来越小的情况。