本项目基于master-hax的pixel-backup-gang的原始方案改进和维护,特别感谢master-hax的开源贡献!
本脚本专为 Google Pixel / Pixel XL 手机设计,支持 FAT32 和 EXT4 格式的 OTG 存储设备。它可将外接存储内容直接挂载到系统内部存储,使 Google Photos 能直接识别和备份 OTG 设备上的照片和视频。用户无需将外部媒体内容复制到手机内部存储,即可通过 Google 相册高效备份大批量照片和视频,节省拷贝时间和手机空间,显著减少闪存写入,延长设备寿命。
警告:本脚本为实验性工具,使用前请确保已备份重要数据。root 操作有风险,可能导致数据丢失或设备损坏,请谨慎操作。
- Android 系统将 OTG 设备挂载到
/mnt/media_rw/xxxx或/storage/xxxx-xxxx,这些路径不属于"内部存储",普通应用(包括 Google Photos)无法直接访问。 - 应用只能直接访问
/storage/emulated/0及其子目录,OTG 设备需要手动授权且通常仅限于沙箱目录。 - Android 媒体库(MediaStore)只会自动索引内部存储,OTG 设备内容不会被自动发现。
- SELinux 和挂载命名空间进一步隔离了外部挂载点。
- 因此,Google Photos 默认无法自动识别和备份 OTG 设备上的照片和视频。
本脚本的核心目标,是让插入的 OTG 存储设备(如移动硬盘、U盘)能够被 Google Photos 等 Android 应用直接识别和访问,实现自动备份和管理。其实现机制如下:
- 挂载命名空间切换:自动切换到全局挂载命名空间,确保所有应用都能看到新挂载内容。
- OTG 设备挂载到系统目录:将 OTG 设备内容桥接到
/storage/emulated/0/otg,让其"伪装"为内部存储子目录。 - 权限与 SELinux 管理:自动处理权限和 SELinux 状态,保证应用可访问且系统安全。
- 媒体库刷新:主动通知系统媒体库刷新,Google Photos 能第一时间发现新内容。
- 兼容性与交互:支持 Android 10 及以上,中文菜单一键操作。
总结:
本脚本通过"命名空间切换 + 设备挂载到内部存储 + 权限桥接 + 媒体库刷新"四步,实现了让 OTG 设备内容无缝出现在 Google Photos 等应用中的效果。
- 支持 Google Pixel(sailfish)和 Pixel XL(marlin)等机型,需 Android 10 并已 root(Magisk)。
- 支持 FAT32 和 EXT4 格式的 OTG 存储设备。
- 一键挂载/卸载,Google Photos 可直接访问 OTG 的内容。
- 自动切换到全局挂载命名空间,无需手动操作。
- 自动检测可用的 FAT32/EXT4 设备,找不到时可手动输入。
- 交互式中文菜单,操作简单。
- 支持查看当前挂载状态。
- 需 root 权限(Magisk 推荐)
- Android 10(理论上 10 及以上可用)
- 推荐使用 Termux 或 adb shell
- 在手机终端或通过 adb shell,先切换到 root:
su- 下载并运行脚本:
cd /data/local/tmp && \
curl -fsSL https://raw.githubusercontent.com/wuzf/pixel-otg-backup-tool/refs/heads/main/pixel-otg-backup-tool.sh -o pixel-otg-backup-tool.sh && \
chmod +x pixel-otg-backup-tool.sh && \
./pixel-otg-backup-tool.sh- 按照脚本菜单提示进行操作。运行后会出现如下菜单:
===========================
Pixel OTG 备份工具
===========================
请选择功能:
1. 挂载 FAT32 设备
2. 挂载 EXT4 设备
3. 卸载设备
4. 查看挂载状态
5. 退出脚本
===========================
请输入选项编号:
-
挂载 FAT32 设备
- 将 FAT32 格式的 OTG 存储设备插入手机。
- 选择"1. 挂载 FAT32 设备",脚本会自动检测并挂载。
- 挂载成功后,Google Photos 等应用可直接访问
/storage/emulated/0/otg路径下的内容。
-
挂载 EXT4 设备
- 将 EXT4 格式的 OTG 存储设备插入手机。
- 选择"2. 挂载 EXT4 设备",脚本会自动检测分区,若未检测到会提示手动输入块设备路径(如
/dev/block/sdX1)。 - 挂载成功后,Google Photos 等应用可直接访问
/storage/emulated/0/otg路径下的内容。
-
卸载设备
- 确认没有应用正在访问
/storage/emulated/0/otg路径下的文件。 - 选择"3. 卸载设备",脚本会自动卸载所有相关挂载点并恢复 SELinux。
- 卸载后可安全移除 OTG 设备。
- 确认没有应用正在访问
-
查看挂载状态 选择"4. 查看挂载状态",可显示当前 /otg 挂载点和 SELinux 状态。
-
退出脚本 选择"5. 退出脚本"即可。
- 挂载 EXT4 设备时会自动关闭 SELinux(
setenforce 0),卸载时自动恢复(setenforce 1)。请勿在设备上安装不可信应用,使用完毕后可手动检查 SELinux 状态。 - 本脚本不会对系统做永久性更改,重启后挂载会失效。
- 建议定期备份重要数据,避免意外丢失。
- 仅在 Pixel/Pixel XL + Android 10 + Magisk root 环境下测试通过,其他设备和系统版本请自行评估兼容性。
- 请确保所有依赖命令已安装,否则脚本会提示缺失。
Q: 挂载失败怎么办? A: 请确认已获取 root 权限,设备格式为 FAT32 或 EXT4,且未被其他应用占用。检查依赖命令是否齐全。
Q: Google Photos 没有识别到 OTG 内容怎么办? A: 请确认已挂载成功,并尝试重启 Google Photos 或重新扫描媒体库。如仍无效,可尝试重启手机。
Q: EXT4 挂载后 SELinux 关闭安全吗?
A: 挂载 EXT4 时会自动关闭 SELinux,卸载时自动恢复。建议用完后手动执行 setenforce 1 检查。
Q: 如何查看当前挂载状态? A: 选择菜单"4. 查看挂载状态"即可显示当前 /otg 挂载点和 SELinux 状态。
Q: 如何恢复 SELinux?
A: 卸载设备后脚本会自动恢复,也可手动执行 setenforce 1。
Q: 设备未被识别或挂载点不存在怎么办? A: 请确认 OTG 设备已正确插入,格式为 FAT32/EXT4,必要时重插或重启手机。
Q: 其他问题如何反馈? A: 可在本项目 GitHub 提 issue 或联系维护者。
欢迎提交 issue、PR 或建议!如有改进想法请 fork 本仓库并发起 Pull Request。
本项目基于 MIT License 开源,详见 LICENSE 文件。