尝试修复 andoid 开机缓慢的脚本

2022-03-07 21:11:57 +08:00
 amrnxcdt

前文:Android 开机时重设 selinux 规则导致系统开机非常慢

尝试手动补丁修改了系统的 init.rc 文件,发现开机速度大幅度提升了。

从抓取的日志上看开机原本需要 200s 以上才能到启动 Boot completed ,现在只需要 30s 左右即可。

具体文件和说明丢 github:https://github.com/Seshiria/init_accelerator

一句话说明:直接修改 init.rc 文件跳过 /data/media/0 (用户的内置储存)的 selinux context reset ,这样在用户很多文件的情况下,加速开机。

1517 次点击
所在节点    分享创造
4 条回复
SupperMary
2022-03-08 11:30:52 +08:00
github 是私有状态吗,点进去 404 了
amrnxcdt
2022-03-08 11:42:12 +08:00
@SupperMary #1 默认是私人的,忘了公开,现在可以了。
kile
2022-03-08 16:06:57 +08:00
我不理解为什么谷歌不跳过,必须强制 selinux context reset 的意义在哪
amrnxcdt
2022-03-09 21:59:31 +08:00
@kile #3 下面是我的看法:
如果说的是 /data 的话,Android 开机时候 init 会在 /data 内放置很多内容,毕竟 /data 才是可以持久化数据的地方,可以看到 init.rc 的 post-fs-data 有不少的 mkdir 操作,为了完整的 context 有必要重置这部分。

然后 /data/data 和 /data/user 这部分可以看具体的实现是跳过了这两个文件夹的 reset ,官方说法是:

This method helps in identifying paths that refer to users' app data. Labeling for app data is
based on seapp_contexts and seinfo assignments rather than file_contexts and is managed by
installd rather than by init.

对应源码: https://cs.android.com/android/platform/superproject/+/master:external/selinux/libselinux/src/android/android_platform.c;drc=master;l=1147

文档是在这里: https://source.android.com/security/selinux/implement?hl=zh-cn
这部分不是很懂,但是应该不是由 init 进程进行处理的。

检查源码之后可以发现类似的操作最早在 5.0 就引入了: https://cs.android.com/android/_/android/platform/system/core/+/refs/tags/android-5.0.0_r1:rootdir/init.rc;drc=7e58899bcfd83152581867b05bb012c5c4ec4b46;l=322

可能的是为了方便就直接一把梭直接 restorecon /data ,在 android 的 issue 发现有针对 /data 下目录的优化: https://issuetracker.google.com/issues/124858106

至于 /data/media/0 这个目录还没有找到有反应的,可能大家比较少在内置储存卡放大量文件 or 少用 WeChat 这样的聊天工具 or 没人在意开机速度。也没看见有类似的反馈就一直没处理这个路径。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/838710

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX