分类：电子数码-手机/通讯-手机使用
问题：如何在手机内部存储里面创建一个链接到SD卡分区 
如何在内部存储里面创建一个链接到SD卡分区
回答：就如同你的上有硬盘一样，手机上也有“硬盘”，那就是你的SD卡。如同你在电脑上可以给硬盘分区一样，sd卡同样能分区。一般来说，不论你是否分区，你的sd卡买回来之后，就只有一个很大的fat32区，当然，这个fat32格式的卡，足够让你储存相片，短信，email等等。在Android手机上，除了你外置的sd卡以外，还有手机内部闪存（NAND）。传统意义上来说，以前你只能将软件安装到NAND中而不能把软件安装到sd卡中。于是，尴尬的是，当你有一个32g的sd卡，但只有5mb的内部存储，你同样不能安装多少软件，装几个后手机就提示空间已满。Android手机只允许装到NAND中的一个原因是保护知识产权也就是防止盗版。访问手机内部存储空间就是一件很麻烦的事情，（一般来说没有root是完全不可能的）。正因为访问很麻烦，所以你很难到那里面去把app拷贝下来然后再发到网上去让别人安装。但这样一来，像我们这些很喜欢装很多app的人，就尴尬了。虽然这些app都是合法拷贝，但是内部存储空间很快就会耗尽而无法安装新软件。所以，2.2的android，Google给了一种将软件安装到sd卡的办法，这样就能安装更多软件。Sd上会生成一个大概叫做 .android_secure的文件夹，将软件安装到里面。但这个方法有一些问题：1，软件不是自动安装到sd卡中这个文件夹，你需要手动去点击“移动到sd卡”2，不是说有的软件都能被“移动”，事实上很多软件都不能移动。是否能移动到sd卡，取决于开发者是否更新软件并允许移动。很多开发者不愿意更新。3，即便能移动过去，不是所有的软件数据都移动到sd卡，同样有一些信息是需要保留在NAND上面的，所以，你的手机照样会很快就用完内部存储。4，你可以通过命令行强制将所有软件都装到sd卡上。但这么做的后果就是，小插件什么的就不再能用。这就是官方2.2的app2sd。但是在2.2出来之前，一些聪明的人搞出来了一个民间的所谓apps2sd。记得之前开头我说过sd卡就是一个很大的fat32分区？apps2sd通过将你的sd卡分区成两个文件系统，达到将软件安装到sd卡的目的：一个如之前一样的fat32分区，让你装之前需要在sd卡上安装的东西；另外创建一个ext分区。Ext只是一个文件系统的名称，同fat32，ntfs一样，只是这个ext系统是android内部存储用的格式。Sd卡之所以一般都是fat32格式，那是因为这个格式的使用是最广泛的，windows，linux，都能使用这个格式，而ext格式一般来说，只是在linux下可以看到并读取。Ext格式有不同的版本。最常见的就是ext3。和ext2比起来，最大的不同就是ext3格式有了“日志”（Journal）功能。日志功能最大的好处，就是当你的操作（如对sd进行读取或者写作的过程中）因为意外原因别打断（比如，突然断电），那么，有日志功能的ext3分区上的文件，不会有任何损坏或者丢失。当我们每次打开我们的电话时，上面总是提示“正在准备sd卡”。每次都提示正在准备，但其实系统正在做的就是检查fat32格式是不是损坏，这正是因为fat32格式不具备日志功能。回想一下以前在windows98年代的日子，每次当我们并非正确关机或者突然重启之后，会出来一个带着扫描进度条的蓝屏，这个扫描进度条和现在正在准备sd卡，是一个意思。但当我们后来用windows 2000、windows xp时，因为这两个系统开始支持带有日志功能的ntfs，所以在这两个系统下，文件系统损坏的可能被降低了。现在，你应该已经把你的sd卡分好区了：fat32格式和ext格式。至于ext格式是ext3还是ext4，不是很重要。使用ext4，并不会带来什么好处（译者注：有时候rom不支持ext4，反而麻烦）。当你分好区之后，apps2sd在你的电话上运行一段脚本，从手机的内部存储创建一个“符号链接”（symbolic links）到sd卡的ext分区上。一个符号链接和快捷方式的意思有点像，但是，一个符号链接对于操作系统来说，是不可见的。换句话，有了这个对操作系统不可见的符号链接的android系统，当你在安装软件到内部存储的时候，系统无法分辨你是安装到了内部存储NAND中还是sd卡的ext分区中，于是，就这么瞒天过海，软件从手机内部存储安装到了sd卡上。这样，这个方式可以很有效的节省你的手机内部存储。但是，这个ext分区在windows下是不可见的。在windows下，你的sd卡像是少了一部分空间一样，而少的这一部分，就是你的ext分区的空间。比如，你有一张4g的sd卡，（大概有3.5g的实际使用空间），然后你创造了一个512m的ext分区，这时将卡插到电脑上，windows显示你的卡就只有3g了。“失去”的那些空间其实没有失去，只是被windows无法看到的ext分区使用了。当你重新格式化你的sd卡时，这些空间自然就又会出现。更重要的是，应为ext格式支持日志功能，所以这个分区不需要“正在准备sd卡”，意味着这个分区在你手机启动的一刹那就可以正常的访问：所有你桌面小工具啊等等东西，就可以开机运行。（不像2.2的app2sd，开机之后小插件消失）最后，app2sd和apps2sd+，这两个概念，还是有一些区别的。记得之前我说过，所有的程序都是储存在NAND中的一个文件夹中吗？其实，这个不准确。准确的说，是储存在两个地方。这第二个地方，叫做Davlik Cache。你其实不需要知道这个东西是什么，只要知道的是，所有的程序都需要调用这东西来储存数据，所以，最终这东西也会慢慢的耗掉你的NAND存储空间。Apps2sd+就将Davlik Cache也一并移动到了ext分区上，省出更多的空间。一些人认为，这样会导致性能的损失，因为他们觉得内部存储的NAND应该总是比外部的sd卡块。（这就是为什么人们总是争吵到底是class 4还是class 6的sd卡，更适合apps2sd，这争吵背后的逻辑就是，更快的卡对性能提升更好）。但事实是，你的程序最后还是从手机中RAM中开始运行，所以，基本上没有什么影响。同时，考虑到大多数的软件都是几百k，最多不过1,2m，其实对性能没有任何影响。还有就是，任何最近发布的apps2sd或者apps2sd+都可以在任何sd卡上工作，不论这个sd卡是否有ext分区。在手机第一次启动的时候，它会自动检查sd卡，如果卡上没有分区，那么，它就自动将程序撞到手机内部存储中。同样，即便你的卡有了ext分区，但没有apps2sd+功能，这也不会引起任何问题。总而言之：App2sd“伪造一个内部储存空间来，然后将程序装到这里面去。App2sd+将更多的东西放到sd卡，省出更多空间。2.2的apps2sd与之前的app2sd相比，问题多多，但是确实最简单的一种，因为，他不需要分区。