Skip to content

wuzf/pixel-otg-backup-tool

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 

Repository files navigation

pixel-otg-backup-tool

本项目基于master-haxpixel-backup-gang的原始方案改进和维护,特别感谢master-hax的开源贡献!

本脚本专为 Google Pixel / Pixel XL 手机设计,支持 FAT32 和 EXT4 格式的 OTG 存储设备。它可将外接存储内容直接挂载到系统内部存储,使 Google Photos 能直接识别和备份 OTG 设备上的照片和视频。用户无需将外部媒体内容复制到手机内部存储,即可通过 Google 相册高效备份大批量照片和视频,节省拷贝时间和手机空间,显著减少闪存写入,延长设备寿命。

警告:本脚本为实验性工具,使用前请确保已备份重要数据。root 操作有风险,可能导致数据丢失或设备损坏,请谨慎操作。

为什么 OTG 设备默认无法被 Google Photos 识别?

  • 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 应用直接识别和访问,实现自动备份和管理。其实现机制如下:

  1. 挂载命名空间切换:自动切换到全局挂载命名空间,确保所有应用都能看到新挂载内容。
  2. OTG 设备挂载到系统目录:将 OTG 设备内容桥接到 /storage/emulated/0/otg,让其"伪装"为内部存储子目录。
  3. 权限与 SELinux 管理:自动处理权限和 SELinux 状态,保证应用可访问且系统安全。
  4. 媒体库刷新:主动通知系统媒体库刷新,Google Photos 能第一时间发现新内容。
  5. 兼容性与交互:支持 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

使用方法

  1. 在手机终端或通过 adb shell,先切换到 root:
su
  1. 下载并运行脚本:
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
  1. 按照脚本菜单提示进行操作。运行后会出现如下菜单:
===========================
Pixel OTG 备份工具
===========================
请选择功能:
1. 挂载 FAT32 设备
2. 挂载 EXT4 设备
3. 卸载设备
4. 查看挂载状态
5. 退出脚本
===========================
请输入选项编号:

功能操作说明

  • 挂载 FAT32 设备

    1. 将 FAT32 格式的 OTG 存储设备插入手机。
    2. 选择"1. 挂载 FAT32 设备",脚本会自动检测并挂载。
    3. 挂载成功后,Google Photos 等应用可直接访问 /storage/emulated/0/otg 路径下的内容。
  • 挂载 EXT4 设备

    1. 将 EXT4 格式的 OTG 存储设备插入手机。
    2. 选择"2. 挂载 EXT4 设备",脚本会自动检测分区,若未检测到会提示手动输入块设备路径(如 /dev/block/sdX1)。
    3. 挂载成功后,Google Photos 等应用可直接访问 /storage/emulated/0/otg 路径下的内容。
  • 卸载设备

    1. 确认没有应用正在访问 /storage/emulated/0/otg 路径下的文件。
    2. 选择"3. 卸载设备",脚本会自动卸载所有相关挂载点并恢复 SELinux。
    3. 卸载后可安全移除 OTG 设备。
  • 查看挂载状态 选择"4. 查看挂载状态",可显示当前 /otg 挂载点和 SELinux 状态。

  • 退出脚本 选择"5. 退出脚本"即可。

注意事项

  • 挂载 EXT4 设备时会自动关闭 SELinux(setenforce 0),卸载时自动恢复(setenforce 1)。请勿在设备上安装不可信应用,使用完毕后可手动检查 SELinux 状态。
  • 本脚本不会对系统做永久性更改,重启后挂载会失效。
  • 建议定期备份重要数据,避免意外丢失。
  • 仅在 Pixel/Pixel XL + Android 10 + Magisk root 环境下测试通过,其他设备和系统版本请自行评估兼容性。
  • 请确保所有依赖命令已安装,否则脚本会提示缺失。

常见问题(FAQ)

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 文件。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages