换 nginx + php-fpm 了

其实早该这么做了。就是一直比较喜欢 lighttpd 一起都起的特点。不过后来越来越觉得 lighttpd 的功能受限制,特别做一些比较复杂的 url 权限限制或者跳转之类的时候,lighttpd 经常力不从心。正好 rhel 上的 php 终于升级到 5.3.3 了,第三方源里面有带 php-fpm 的。于是升级了一下。

v970 2.5g /data 达成

昨晚捣鼓了下,发现比想象的容易很多。分区信息并不是写死的。而是在emmc设备的开始有分区表。因此手动改改分区表再重启格式化即可。然后发现把最后一个分区完全删掉也没问题。改改vold.fstab就行。有时间的话甚至可以做个完美卡刷包出来。

对于 V970 来说,他的分区数量超过了四个,因此里面有一个扩展分区,恰好我们要修改的最后两个分区都在这个扩展分区里面,于是只要修改 /emmc@ebr1 文件里面的分区表即可。用 dd if=/emmc@ebr1 of=/sdcard/test bs=512 count=1 即可 dump 出来,然后 adb pull 下来修改。这里有个值得一提的地方是,不知道是 MTK 的 bug 还是所有 android 都是这样,最后一个分区的 size 值是错误的,正常应该是 block 总数,他最后一个分区却是字节总数。因此用标准的工具比如 fdisk 之类编辑会出错,只能手动修改。修改好了以后,重启进入 recovery,adb 连上用 dd 写回 /emmc@ebr1。再重启进 recovery 让 kernel 认出新分区,最后 mke2fs -T ext4 /emmc@usrdata 。 同时别忘记 mount 上 /system ,修改 /system/etc/vold.fstab,将里面包含 /emmc@fat 的行删除,否则 vold 会彻底罢工导致 sd 卡也无法加载。

btw:神族上的风气真是不好,总是故作神秘,从来不见原理介绍贴。要说是贴合小白伸手党需求吧,往外放的东西却是专杀小白。有人放了个个3g data的包出来,下来一看居然是分好了把整个emmc dump出来。结果一堆把imei刷丢的。其实只要做的人认真点,避开nvram,也不至于搞死这么多人。。

V970 改大 /data

为了节省成本,比较新的android手机一般会内置2G-4G flash, 然后将除去系统剩下的部分作为 /sdcard,这样就不用随手机还送一个鸡肋的 tf 卡了。然而国内厂家也明白国内的特殊需求,因此通常也会保留 tf 卡插槽。于是如果你真的插了一个 tf 卡,就会悲剧的挂载在 /sdcard2 /sdcard/extra 之类非标准路径,不能被很多软件利用。目前常见的千元 android 手机,比如 zte v970, 夏新 N820 等,都是这样。

最简单的解决方案是 root 以后,修改 /system/etc/vold.fstab, 将里面 /sdcard 和 tf 卡的路径倒过来,这样 /sdcard 就还指向 tf 卡。但是机身原有的 /sdcard 空间就跑到了非标准路径,只能用来放些 mp3 之类的,这部分空间通常有 1-2G,与此同时,手机的 /data 分区却还经常是小小的几百 M, 一不小心把几个大家伙装进去就满了。如果能把浪费的空间都给 /data 就堪称完美。内置 flash 的速度和稳定性都要比外置的 sd 卡有优势,可以用来运行经常要启动的应用,比如微博微信之类。

改手机分区大小也不算是什么新鲜事情,以前在只有 512M 或者 1G flash 的手机上,经常有人放出来调整 /system 分区的 rom。 但是 V970 等流行屌丝机大部分是 MTK 方案的,而 MTK 方案的资料少之又少,我自己尝试修改了刷写工具的分区描述文件,但是刷机以后似乎无效,启动以后原来的分区大小没有变化,网上搜了一下,搜到一些可能是从事 MTK android 开发的人的笔记,里面提到 MTK 方案改分区是修改代码里面一个 xls 文件,然后用 ptgen 工具来生成所有对应的 .h 和刷写用的分区描述文件。如果是这样的话,说明 MTK 平台的分区信息可能是硬编码在内核里面的。这样除非搞到内核源码能重编译,否则就没啥搞头了(网上唯一找到的 MTK android 改分区的 ROM 是 HD7 的,但是其用到的 MT6573 网上有泄露出来的源代码,因此不知道作者是不是使用那些代码编译了一个新内核出来)

不过我们还有退而求其次的方案,那就是干脆把 /data 和原来 /sdcard 的空间也给调换过来算了。这样就只浪费原来 /data 的几百兆。和调换内外卡的情况不同的是,/data 是在 boot.img 启动的时候就挂载了,因此要调换这个,光 root phone 是不行的,还得修改 boot.img 里面的启动脚本才行。基本思路就是先解包,然后修改,最后重新打成 boot.img 刷进手机即可。

解包 MTK boot.img 的工具和其他平台略有不同,请使用 xda 上 bruno 的工具 下载两个.pl 文件就可以了,然后找一个你平台可以用的 mkbootimg 过来。执行

perl unpack-MT65xx.pl boot.img

之后会生成 boot.img-kernel 文件和 boot.img-ramdisk 目录,目录下面就是所有启动时 ramdisk 里面的文件,在里面修改所有 .rc 中涉及 /data 分区的地方即可, V970 的可以用我做的 diff, 下载来

cd boot.img-ramdisk
patch -p1 ../v970-initrd-diff
cd ..

即可
最后重新打包

perl repack-MT65xx.pl -boot boot.img-kernel boot.img-ramdisk boot1.img

这样就得到了一个 boot1.img. 把这个 boot1.img 单独刷进手机即可。

刷完了以后不要急于启动,因为两个分区原来的内容是不一样的,以前 /data 是 ext3/ext4 格式,而 /sdcard 通常是 fat 格式,因此请同时刷个第三方 recovery, 然后直接启动进 recovery,用 adb 连进去格式化新的 /data, V970 是

adb shell mke2fs /emmc@fat
adb shell tune2fs -O extents,uninit_bg,dir_index /emmc@fat
adb shell e2fsck -f /emmc@fat

这里不用 recovery 的格式化功能是因为 recovery 对 /data 的位置理解可能不一样,有可能格式化了其他的分区。

之后重启手机即可。

最后鸣谢一下神族论坛的 shuaidi, 参考了他的改大 data 方案。不过他方案的问题是授人以鱼,直接丢给你一个改好的 boot.img,对于洁癖者来说说实在不能接受。这个 boot.img 还有个副作用是 adb shell 默认是 root,这个虽然方便,但是有点太不安全。而且出了新版本以后也没法刷。还是自己在官方 rom 的基础上根据原理来改比较保险一些。

最近评论

时光机

其他