Mountify 是什么?用 OverlayFS 实现全局模块挂载的开源神器完整解析

【免费下载链接】mountify Globally mounted modules via OverlayFS. 【免费下载链接】mountify 项目地址: https://gitcode.com/gh_mirrors/mo/mountify

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,大致流程如下:

  1. 为每个模块写入 skip_mount 标记;
  2. /data/adb/modules/模块名 的内容复制到 /mnt/vendor/假目录名
  3. 为复制出的每个文件镜像 SELinux 上下文,避免变成 u:object_r:tmpfs:s0
  4. 对所有目标模块重复 2、3 步;
  5. 用 OverlayFS 把假目录中的 system/bin 等文件夹覆盖/system/bin 及对应分区。

3.2 ext4 sparse 模式(兼容备选)

当内核不支持 tmpfs xattr 时,安装脚本 module/customize.sh 会自动探测并回退到 ext4 模式;你也可以在配置中强制开启。流程为:

  1. 创建一块 ext4 sparse 镜像并挂载到假目录;
  2. 复制模块内容并镜像 SELinux 上下文;
  3. 卸载后以只读方式重新挂载;
  4. 再通过 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 一键安装步骤

  1. 下载或克隆项目到本地:
git clone https://gitcode.com/gh_mirrors/mo/mountify
  1. module/ 目录打包成 zip,在 KernelSU / APatch / Magisk 中刷入;
  2. 重启后,在模块页面即可看到挂载状态(如 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_mounts0 关闭、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.konuke-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.shmountify_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 改为 KSUAPatchmagisk

Q4:Mountify 安全吗? 项目作者明确表示"无任何保修"。它是把"锋利的刀"交到你手里,刷机前请务必做好数据备份,谨慎操作。

八、总结:Mountify 适合谁?

如果你正在使用 KernelSU / APatch / Magisk,对模块挂载的隐蔽性、稳定性有较高要求,或曾被"模块不生效、检测被拒"困扰,那么 Mountify 这套 OverlayFS 全局模块挂载方案非常值得一试。它用一次性的清晰设计,把复杂的挂载细节封装成开箱即用的模块,配合 WebUI 可视化配置,即使新手也能轻松驾驭。

📌 小贴士:项目采用多种开源协议——模块本体为 Unlicense、LKM 为 GPLv2、WebUI 为 MIT,使用前请留意对应条款。

【免费下载链接】mountify Globally mounted modules via OverlayFS. 【免费下载链接】mountify 项目地址: https://gitcode.com/gh_mirrors/mo/mountify

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐