操作系统, 未分类

Android&Data to SD Card——理论编

相信每个使用Android的用户,都会安装各种APP,随时APP数量的增多,数据量的增加,data分区的可用空间越来越少,到最后安装APP时提示“储存空间不足”……

为了应付此问题,Android增加了APP2SD功能,但此功能是一个鸡肋……

对此,有人开发了LINK2SD,在SD卡上创建EXT分区,把已安装的应用均移动到SD卡的EXT分区中,并在内部储存的/data中创建对应文件的软链接,但LINK2SD依赖于zygote,也就是说需要在Android启动后才能启动LINK2SD挂载EXT分区。当年在联想A790E上使用该程序,每次启动系统,因为EXT分区未被挂载,所有软连接都变成了“坏链接”,导致Android自动重新安装所有APP……

相信各位的SD卡的容量都不会比内部存储小,既然SD卡比内部存储大,我们为何不考虑把整个/data(甚至是整个Android)放到SD卡上?

要知道如何把/data存放到SD卡上,我们首先要了解一下Android是如何挂载分区的:

我们按下电源键后,Android会根据Bootloader,加载内核。

Android内核会把物理内存以RAMDISK的方式,挂载到/,接着,内核会释放已被打包的文件至/,其中包括init, init.rc, init.*.rc, fstab.*等。

Android内核执行init这个二进制文件,init文件会运行init.rc,init.rc会根据fstab.*的内容,挂载system, data分区。

接下来的不在本文讨论范围内,省略……

看了上述的启动步骤,相信你已经大概了解DATA TO SD的方法了,没错,就是从fstab.*下手!

要更改fstab.*,意味着我们需要修改内核释放到RAMDISK的文件。

我们先来了解一下Android内核以及其释放到RAMDISK的文件的存在形式。

解包过Android固件的,相信都会留意到有一个boot.img文件,这个是内核吗?

准确来说不是,这是多个文件打包而成的,这些文件当中,内核,释放到RAMDISK的文件也是属于这些被打包的文件:

 

 

boot.img unpackage

 

boot.img-ramdisk.gz中包含了被释放到RAMDISK当中的文件,这些文件先被cpio打包,再被gzip压缩。

boot.img-zImage就是我们Android的内核,已被gzip压缩。

至于其他文件,我本人也不太了解具体用途,各位可通过搜索引擎了解。

解包RAMDISK,可以查看到类似的文件:

boot.img ramdisk unpackage

 

其中fstab.*就是我们要修改的文件,该文件包含了system, data的挂载信息,以我的华为C8813Q为例:

里面的内容表示把内部存储的第十二个分区挂载到/system,把内部存储的第十三个分区挂载到/data。

我们需在该文件中把内部存储的设备文件改成我们SD卡EXT分区的设备文件(一般是/dev/block/mmcblk1p[0-9]+)。

以为这样就完成了?No!

有些RAMDISK文件并不采用fstab.*的挂载信息,而是通过init.*.rc完成分区的挂载。

华为C8813Q就是这种货,事实上你不需要更改fstab.*当中的内容(我就被华为C8813Q坑了 d22 )。

华为C8813Q,在init.msm7627a.rc的第九行,第四十五行,第六是六行,分别挂载了/cache,/system,/data。

要更改被挂载的设备文件,我们修改init.msm7627a.rc即可。

修改完毕,确认无误后,重新打包为boot.img,并写入相应的分区(华为C8813Q是内部存储的第十二个分区)。

下次启动Android时,init就会根据你的设置,把SD卡的EXT分区挂载到/data,甚至是/system。

下面两张是我在2014年12月07日至2014年12月13日期间把CM 11以及DATA均存放到SD卡的图:

1418363999131 1418364056151

 

各位可以在第二张图查看到,SD卡的第三个,第四个分区分别被挂载到了/system, /data。

2014年12月14日至2014年12月20日期间,也就是使用600X的图:

1419261215032

1419260560984

1419260845074

 

由于本人要上学,高三期间一周仅有周日半天多一点的时间在家,因此不便发完整的教程,先分享理论编,完整教程计划于元旦假期分享。

 

最后来分享一下我的探讨Android&Data to SD Card部分过程,以及体验(要上学,住宿,而且高三,周日才放学,所以七天为一个周期):

2014年12月07日至2014年12月13日:

使用Class 10的SD卡。

研究并尝试DATA TO SD CARD,首先是把Emotion UI的DATA更改为SD卡的EXT分区,Android的启动速度比使用内部存储作为DATA慢了数秒,输入法首次加载需要数秒,但后续的使用影响不大,可以接受。

尝试ANDROID&DATA TO SD CARD,把CM 11安装到了SD卡,并成功启动,至于流畅度嘛,惨不忍睹……

 

2014年12月14日至2014年12月20日:

购买了一张600X,号称90 MB/s的读取速度。

老实说我对dd与hdparm的测试结果有点失望。

再次把CM 11安装到了SD卡(600X的),并成功启动,To my surprise!首次启动居然比使用内部存储还快,使用过程中丝毫没因IO而造成卡顿。

 

(96 Posts)

自信、努力、活出精彩;以前未所见的颜色,绘大千世界!

View all author’s posts

12 thoughts on “Android&Data to SD Card——理论编”

    1. 你觉得有什么好的办法可以让那些为了一个出售产品的网站的外链而发评论的人失望?
      虽然有nofollow,但人还是能看到。
      我有一个想法,那就是访客提交评论时,检测对方填写的网站是否为WordPress,否就把链接清空,毕竟用WordPress的大多数是博客。

    1. 有一个问题我一直得不到答案:
      你们说一些你们自己觉得很熟悉的词语时,自身是否了解此词语的意思?是否考虑过此词语是否适用?

      我目前使用的手机是华为C8813Q,联想A790E是前一台,已长眠。

      1. 人都是这样,有许多熟悉的东西但是你并不了解的。就像人类所熟知的天空,都知道他是深蓝而美丽的,也知道他有许多的行星、行星上面还是怎么样的环境等等。但是,有人真正可以了解那些行星吗?

        d26 跟文艺男说话好大压力

Leave a reply

Your email address will not be published. Required fields are marked *