init 在 post-fs-data 的时候会执行一个 restorecon ,这会重置 /data 子目录下的所有文件的 selinux label 。这是一个很耗时的过程,正常来说只会在系统更新的时候执行,如果执行成功就会记录一个和当前系统相关的 hash (根据 plat_file_contexts 计算出来,持久化存储在 xattr security.sehash ),下次启动检查 hash ,如果和系统的匹配就不需要再重置了。但是某些设计不良的系统 MIUI 会因为某种原因导致这个过程失败(比如 selinux 规则不正确,某些文件无法被 init restorecon ),导致 hash 不会被记录。从而每一次重启都要执行完整的 restorecon ,因此开机经常要在第一屏卡上 1~2 分钟(具体时长取决于你手机中非 ce 存储的文件的数目)。
由于这条命令在 post-fs-data 阶段的早期执行,先于 adbd 启动,更没有进入开机动画./restorehash restore Success: no need to change sehash!