Mountify 是什么?用 OverlayFS 实现全局模块挂载的开源神器完整解析
Mountify 是什么?用 OverlayFS 实现全局模块挂载的开源神器完整解析
Mountify 是一款基于 OverlayFS 实现全局模块挂载的开源神器,它同时兼容 KernelSU、APatch 与 Magisk,能让你的系统模块以一种更隐蔽、更接近 OEM 原厂的方式"整体叠加上去"。本文将从原理、安装、配置到进阶玩法,为你带来一份面向新手的完整解析。
一、Mountify 是什么?先看它的核心定位
简单来说,Mountify 是一个"管理模块挂载方式"的模块。它本身不提供任何功能,而是负责把 /data/adb/modules/ 下其他模块的内容,用 OverlayFS 全局挂载到系统目录(如 /system、/vendor、/product),从而替代传统方案。
| 项目信息 | 详情 |
|---|---|
| 项目名称 | mountify |
| 最新版本 | v2.0.3(versionCode 203) |
| 核心机制 | OverlayFS 全局模块挂载 |
| 支持平台 | KernelSU(metamodule)、APatch、Magisk |
| 核心描述 | Globally mounted modules via OverlayFS |
它最大的特点是会模仿 OEM 厂商的原生挂载,例如把模块挂载到 /mnt/vendor/my_bigball 这类"假目录",从而降低被检测的风险。
二、为什么要用 Mountify?传统模块挂载方案的四大痛点
在了解为什么之前,先看看传统方案的问题所在:
- Magic mount 挂载数量激增:Magic Mount 会大量增加挂载点数量,很容易被 Zimperium 等检测工具识别。
- ext4 upperdir 会创建设备节点:用 ext4 镜像作为 OverlayFS 的 upperdir 时,会在
/proc/fs下创建设备节点,同样可被检测。 - F2FS /data 兼容性差:在原生 casefolding 环境下,把 F2FS 格式的
/data当作 overlay 数据源会直接失败(ovl_dentry_weird),只有 sdcardfs 用户能用。 - 可逆性与可维护性差:一旦挂载方式被识别,模块很难"隐形"。
Mountify 的思路是绕开 /data 直接当数据源,而是把模块内容复制到 /mnt/vendor 下的临时目录,再通过 OverlayFS 做全局覆盖,从源头减少特征。
三、Mountify 工作原理详解:tmpfs 与 ext4 两种模式
3.1 tmpfs 模式(默认推荐)
这是默认且最推荐的模式,完整逻辑位于 module/post-fs-data.sh,大致流程如下:
- 为每个模块写入
skip_mount标记; - 把
/data/adb/modules/模块名的内容复制到/mnt/vendor/假目录名; - 为复制出的每个文件镜像 SELinux 上下文,避免变成
u:object_r:tmpfs:s0; - 对所有目标模块重复 2、3 步;
- 用 OverlayFS 把假目录中的
system/bin等文件夹覆盖到/system/bin及对应分区。
3.2 ext4 sparse 模式(兼容备选)
当内核不支持 tmpfs xattr 时,安装脚本 module/customize.sh 会自动探测并回退到 ext4 模式;你也可以在配置中强制开启。流程为:
- 创建一块 ext4 sparse 镜像并挂载到假目录;
- 复制模块内容并镜像 SELinux 上下文;
- 卸载后以只读方式重新挂载;
- 再通过 OverlayFS 覆盖到系统目录。
💡 ext4 模式主要用于兼容 GPU 驱动等特殊模块,属于兜底方案而非主推方案。
3.3 两种模式如何选择?一张表看懂
| 对比项 | tmpfs 模式 | ext4 sparse 模式 |
|---|---|---|
| 内核要求 | CONFIG_OVERLAY_FS=y + TMPFS_XATTR=y | 需要 mkfs.ext4 工具 |
| 检测风险 | 更低(无 ext4 设备节点) | 较高(可配合 LKM 消除) |
| 适用场景 | 绝大多数用户默认选择 | GPU 驱动、特殊兼容需求 |
四、Mountify 安装与配置:新手快速上手指南
4.1 安装前的系统要求
- 内核必须开启 CONFIG_OVERLAY_FS=y(缺少会直接终止安装);
- 强烈建议开启 CONFIG_TMPFS_XATTR=y;
- KernelSU 建议 22098+、APatch 建议 11170+(否则会以传统方式安装)。
4.2 一键安装步骤
- 下载或克隆项目到本地:
git clone https://gitcode.com/gh_mirrors/mo/mountify
- 将
module/目录打包成 zip,在 KernelSU / APatch / Magisk 中刷入; - 重启后,在模块页面即可看到挂载状态(如
mode: auto 🤖 | modules: xxx)。
安装时脚本会自动完成内核能力探测、SELinux 规则写入、配置文件迁移等操作,新手无需手动干预。
4.3 最快配置方法:WebUI 可视化操作
项目自带了独立的 WebUI(源码在 webui/index.html),支持英文、日语、葡萄牙语、简体中文等多语言。你可以在 WebUI 中直接切换挂载模式、sparse 大小、LKM 选项,无需手敲命令,非常适合新手。
4.4 进阶:手动编辑 config.sh
所有配置集中在 /data/adb/mountify/config.sh(模块内模板见 module/config.sh),最核心的几个参数:
mountify_mounts:0关闭、1手动模式(只挂载 module/modules.txt 中列出的模块)、2自动模式(默认,挂载所有含 system 目录的模块);FAKE_MOUNT_NAME:自定义假目录名,默认mountify;use_ext4_sparse:设为1强制使用 ext4 模式;sparse_size:sparse 镜像大小(MB),默认 2048;mountify_stop_start:某些模块(如开机动画、GPU 驱动)加载过晚时,可设为1让 Android 在服务阶段重启。
五、Mountify 高级玩法:模块白名单、跳过挂载与白名单文件
5.1 只挂载指定模块
将 mountify_mounts=1,然后编辑 modules.txt,每行写一个模块 ID,例如:
Adreno_Gpu_Driver
DisplayFeatures
ViPER4Android-RE-Fork
mountify_whiteouts
5.2 如何让某个模块不被 Mountify 挂载?
- KernelSU / APatch 的 metamodule 模式下,在
/data/adb/modules/模块名下创建skip_mount标记即可; - Magisk 环境下则使用
skip_mountify标记。
5.3 Whiteout(白名单)文件支持
项目内置了 whiteout 机制(相关模板见 module/whiteouts.txt 与生成脚本 module/whiteout_gen.sh),可以对系统文件做"删除隐藏"处理,实现更彻底的模块控制。
六、Mountify 隐藏功能盘点:反检测、反 Bootloop 与热安装
6.1 LKM 内核模块"消除 ext4 痕迹"
当使用 ext4 sparse 模式时,系统会在 /proc/fs 留下 ext4 sysfs 节点。Mountify 附带了一个实验性 LKM(源码在 nuke_ext4_lkm/nuke.c),加载后可注销这些节点。项目为不同内核预编译了多个版本,存放在 module/lkm/,例如:
nuke-android12-5.10.ko(Android 12 / 5.10 内核)nuke-android13-5.15.ko(Android 13 / 5.15 内核)nuke-android15-6.6.ko、nuke-android16-6.12.ko等
在 config.sh 中设置 enable_lkm_nuke=1 并按需选择 lkm_filename 即可启用。若你的 KernelSU 版本在 22105+,ksud 会自动处理,无需手动开启。
6.2 APEX 伪装:让挂载看起来像系统服务
开启 spoof_sparse=1 后,Mountify 会把 sparse 镜像伪装成 /apex/com.android.mntservice 这类 APEX 挂载,进一步降低特征(可配合自定义 FAKE_APEX_NAME 使用)。
6.3 反 Bootloop 保护
模块内置开机计数机制:若连续两次开机均未成功,会自动禁用模块并恢复系统,避免无限重启。想完全关闭该保护,可在 /data/adb/mountify/ 创建 explicit_I_want_a_bootloop 文件(不建议)。
6.4 热安装支持
配合 KernelSU / APatch 的 metamodule 机制(见 module/metainstall.sh),部分模块更新后无需重启即可生效。
七、Mountify 常见问题解答(FAQ)
Q1:安装后没有任何模块被挂载? 检查 config.sh 中 mountify_mounts 是否为 2,并确认目标模块目录下存在 system 文件夹。
Q2:为什么 De-Bloater 不生效? De-Bloater 使用的是虚拟文本而非正规 whiteout,与 Mountify 不兼容;官方建议改用 System App Nuker 这类生成正规 whiteout 的工具。
Q3:需要卸载(unmount)时怎么办? 可使用 NeoZygisk、ReZygisk、Zygisk Assistant 等 Zygisk Provider,并在 config.sh 中把 MOUNT_DEVICE_NAME 改为 KSU、APatch 或 magisk。
Q4:Mountify 安全吗? 项目作者明确表示"无任何保修"。它是把"锋利的刀"交到你手里,刷机前请务必做好数据备份,谨慎操作。
八、总结:Mountify 适合谁?
如果你正在使用 KernelSU / APatch / Magisk,对模块挂载的隐蔽性、稳定性有较高要求,或曾被"模块不生效、检测被拒"困扰,那么 Mountify 这套 OverlayFS 全局模块挂载方案非常值得一试。它用一次性的清晰设计,把复杂的挂载细节封装成开箱即用的模块,配合 WebUI 可视化配置,即使新手也能轻松驾驭。
📌 小贴士:项目采用多种开源协议——模块本体为 Unlicense、LKM 为 GPLv2、WebUI 为 MIT,使用前请留意对应条款。
更多推荐
所有评论(0)