1楼2011-05-08 10:22

新入手Android系统的朋友可能都会遇到给SD卡分区的难题,为什么要分区?分区有哪些?分区的方法是什么?这些问题,其实非常简单。

1、分区的目的和SD卡的三个主要分区

SD卡分区的主要目的是为了将应用程序安装到SD卡,以解决因机器自身的内存不足造成的不便,而且能更好地提升系统的稳定性和运行速度。也就是通常所说的APP2SD。

APP2SD的工作原理:

以4G的SD卡为例,我们可以将4G的卡分成3个分区,FAP32分区作为你正常存储音乐、图片的普通存储分区;Swap分区是系统缓存,越大对系统运行速度的提升越大,但一般不会超过96MB(因为Swap分区对SD卡的寿命有影响);还有一个Ext4分区,这个分区的作用就是将你安装的软件安装到SD卡上,不占用手机内存,更好地提升系统稳定性和运行速度。

以Magic为例,目前的民间自制ROM基本都要求SD卡有三个分区才能保证刷ROM成功并工作正常。

这三个分区是:

(1)Fat32主分区:普通的SD卡空间,用于文件存储等;

(2)Ext4主分区:用于APP2SD,即将应用程序安装到SD卡而非手机内存,ROM自动完成;

(3)Swap主分区:用于解决系统内存不足的问题,系统自动调用此分区。

2、有关Linux-Swap分区、SD卡、分区与SD卡损耗的一些信息

micro-SD的储存单元分为两类:SLC(Single Layer Cell,单层单元)和MLC(Multi-Level Cell,多层单元)。SLC闪存的优点是复写次数高达100000次,比MLC闪存高10倍。此外,为了保证MLC的寿命,控制芯片都校验和智能磨损平衡技术算法,使得每个存储单元的写入次数可以平均分摊,达到100万小时故障间隔时间(MTBF)。目前的TF卡无写入次数平均分摊管理,导致写入次数为理论上的1万次。那么建立SWAP分区意味着系统会对这一组单元集中作频繁写入操作,是否会导致TF卡的迅速损坏呢?

我们可以通过修改系统中的/dev/sys/vm/swappiness的值来告诉系统你想交换得多勤快。在Linux里面,swappiness的值的大小对如何使用Swap分区是有着直接联系的。swappiness=0的时候表示最大限度使用物理内存,然后才是Swap空间;swappiness=100的时候表示积极的使用Swap分区,并且把内存上的数据及时的搬运到Swap空间里面。两个极端,对于Ubuntu的默认设置,这个值等于60。所以我们可修改swappiness来控制系统对Swap分区的写入频率。

Linux的Swap分区的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。

关键词就是虚拟内存。

3、SD卡分区的次序与分区大小

SD卡的三个分区依次为:FAT32主分区、Ext4主分区、Swap主分区。

举例的分区大小:Linux-Swap:96M;Ext4:500M;FAT32:剩下所有SD卡空间。一定要注意,先分区FAT32,再分区Ext4,最后分区Swap。问题由此出现:怎样最先确定FAT32分区的大小?很简单,从系统里看看你SD卡空间,减去500MB的Ext4空间,再减去96MB的Linux-Swap空间就好。例如8G卡实际容量若为7.59GB,那么FAT32分区大小为7590-500-96=6994MB分区大小即可。

还有一个细节,使用分区软件进行分区操作的时候,分区大小可能不会正好是上述数值,多多少少,或者出现小数都是没关系的。