再战18个月,为M8启用f2fs
f2fs 是什么
F2FS是一种闪存文件系统,由金载极在三星集团研发,提供给Linux内核使用。 此文件系统起初是为了NAND闪存而设计的,例如这一类的存储设备,甚至可以自移动设备广泛应用至服务器。 三星应用了日志结构文件系统的概念,使它更适合用于存储设备。
如何切换到f2fs分区格式
- 编译内核添加f2fs驱动
- 修改boot.img,开机挂载分区的时候以f2fs方式挂载
- 格式化分区为f2fs
给内核编译f2fs模块
Linux kernel3.8之后添加了 f2fs 驱动,如果你现在在用的 Android 内核版本在 3.8 或者 3.8 之后是默认支持 f2fs 的,当然不排除没有编译进去,修改内核配置文件,修改下面的选项:
CONFIG_F2FS_FS=y
CONFIG_F2FS_STAT_FS=y
CONFIG_F2FS_FS_XATTR=y
CONFIG_F2FS_FS_SECURITY=y
CONFIG_F2FS_CHECK_FS=y
CONFIG_F2FS_FS_ENCRYPTION=y
版本在3.8之前的,只能去寻找第三方内核,CM系统的内核也可以用,一般是有添加这个驱动的,重新编译内核,打包刷进手机确认内核能用(内核和手机在用内核不一样的话,需要替换驱动)。
修改boot.img
这里需要用到的工具mkbootimg
/unpackbootimg
(下载链接在文章后面),将编译出来的zImage-dtb
替换boot.img-dtb
,能开机就算OK,查看/proc/filesystems
有f2fs支持后面的就简单了,创建一个f2fs分区或者文件,测试能正常挂载读写,没问题的话接下来就可以怎被格式化分区为f2fs。
# 解包boot.img
unpackbootimg -i boot.img -o out
cd out
mkdir ramdisk
cd ramdisk
# 解包ramdisk
gunzip -c ../boot.img-ramdisk.gz | cpio -idm
# 打包ramdisk
find . | cpio -o -H newc | gzip > ../newramdisk.cpio.gz
#打吧boot.img使用mkbootimg,在解包时候获取的参数要全部填进去,这点很重要。
修改分区表fstab.qcom
,这个文件告诉系统开机后怎么挂载分区,不用手机可能有点差异,但基本在ramdisk
里面都能找到类似文件,data
和cache
分区挂载方式改为f2fs
,挂载参数也需要修改,可能有些不支持,比如这个barrier=1
或者ext4特有的参数都删掉,先测试,确定参数能用之后在修改,可以免去不少麻烦,从新打包内核刷入。
格式化分区为 f2fs
TWRP在2.8之后支持格式化分区为f2fs
,具体操作:Wipe >> Advanced Wipe >> 勾选 cache 和 data >> Repair or Change File System >> Change File System >> F2FS >> 确定。在此之前先备份好数据,这个操作会格式化掉内置储存卡数据。
其他
- 先修改
cache
分区,不行刷回去即可,数据还在。 - 编译完内核之后,先别急着修改,打包回去调试完,确认一切都OK后在修改
ramdisk
- ROOT+ADB是个好东西能省下不少操作
- 分区能不能被正常挂载,在开机出现动画的时候,通过adb即可查看。
- 修改内核之后顺带把
USB debug
开启,不然格式化data分区之后,adb没开。 - 格式化data分区之后,第一次开机可能很久,耐心等待,也可能没有被正常挂载,无法开机。
下载
htc m8 GPE 6.0内核添加f2fs驱动版本,这个找了很久。