用 termux + rclone + adb 给 android 做文件增量备份
# 用 termux + rclone + adb 给 android 做文件增量备份
刚开始只是为了 做自动同步照片,测试了一些文件管理器,也就 Solid Explorer 表现还不错,但总体来说都需要人为操作,然后突发奇想,Android 也是 Linux ,是否可以用 rclone 做增量 同步?那么说干就干
# 一、在 MacOS 上,安装 adb
(Android Debug Bridge)命令行工具。首先,安装 Android Platform Tools,其中包含了 adb
工具。请按照以下步骤操作:
- 安装 Homebrew(如果尚未安装):
1 | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" |
- 使用 Homebrew 安装 Android Platform Tools:
1 | brew install android-platform-tools |
-
确保你的 Android 设备已连接到电脑,并启用 USB 调试模式。要启用 USB 调试,请按照以下步骤操作:
a. 打开设备上的 “设置” 应用。
b. 如果你还没有启用 “开发者选项”,请转到 “关于手机”>“软件信息”>“版本号”,然后连续点击 “版本号” 7 次以启用 “开发者选项”。
c. 返回 “设置”>“开发者选项”,启用 “USB 调试”。 -
在终端中,运行以下命令,检查设备是否已连接:
1 | adb devices |
你应该看到类似以下的输出,其中列出了已连接的设备:
1 | List of devices attached |
- 可以使用以下命令将 Android 设备上的 DCIM/Camera 目录下的照片拷贝到电脑上的指定目录(例如:桌面):
仅展示命令,不推荐这个方法
1 | adb pull /sdcard/DCIM/Camera ~/Desktop/AndroidPhotos |
# 二、在 Android 手机上安装 Termux
-
在
https://github.com/termux/termux-app/releases
上下载合适的 apk 版本
我下载的是 termux-app_v0.118.0+github-debug_arm64-v8a.apk 这个版本 -
安装 termux 到手机
上面步骤已经安装好 adb 了,就直接通过 adb 安装
1 | adb install ~/Downloads/termux-app_v0.118.0+github-debug_arm64-v8a.apk |
- 给 termux 添加 系统文件夹权限
运行termux-setup-storage
命令:
1 | termux-setup-storage |
这会向您请求存储权限。同意后,Termux 将创建一些符号链接,使您能够访问 Android 设备上的共享存储目录。这些链接位于 Termux 的 ~/storage
目录下。
以下是 ~/storage
目录下的一些常见符号链接:
~/storage/shared
:这是设备的共享存储(例如,内部存储或 SD 卡)。~/storage/dcim
:这是设备上的照片和视频目录。~/storage/downloads
:这是设备上的默认下载目录。~/storage/music
:这是设备上的音乐目录。~/storage/movies
:这是设备上的电影目录。~/storage/pictures
:这是设备上的图片目录。
请注意,Termux 无法访问 /storage
下的其他目录,因为 Android 的沙盒限制。要访问其他目录,您需要使用具有 root 权限的文件管理器应用。
# 三、安装 SSHD 并使用 MacOS 连接到 Termux
-
在 Android 设备上安装并打开 Termux。
-
运行以下命令以更新软件包列表并安装
openssh
:
1 | pkg update && pkg upgrade |
- 启动 SSH 服务器:
1 | sshd |
-
当前 SSH 服务器的端口号(默认为 8022)
-
在系统设置里查看 WIFI IP 地址
-
查看当前用户名
1 | whoami |
- 设置一个简单的密码(后面会处理)
1 | passwd |
- 手机敲命令非常难受,敲过以上几个命令就够了,准备用 Macos SSH 连接 Termux 解放双手
- 以上的操作可以得到一条完整的 ssh 命令,并连接到 Termux
1 | ssh -p 8022 <username>@<ip>:<port> |
- 配置使用 MacOS 公钥访问 Termux
1 | # macos |
- 设置强密码,也可以关掉 ssh 的密码访问,我选了前者
1 | # macos |
-
这样 macos 就能安全访问 termux 进行后续操作了
-
追加 + 1,其实我还更改了默认的 8022 端口
1 | # termux |
- 追加 + 1, 给 SSHD 添加开机启动
1 | pkg install termux-services |
# 四、配置 rclone 做增量同步
rclone
是一个命令行程序,用于同步文件和目录。它支持多种云存储服务,但也可以在本地和远程设备之间同步文件。
- 在 macOS 上安装
rclone
。使用 Homebrew 安装:
1 | brew install rclone |
- 生成 rclone 加密秘钥
1 | # 这里填写之前 sshd 设置的密码 |
- 直接写配置文件(敲命令生成配置很烦)
1 | vim ~/.config/rclone/rclone.conf |
- 测试看看
1 | rclone lsd adr: |
- 使用以下命令将 Android 设备上的 DCIM/Camera 目录下的照片同步到电脑上的指定目录(例如:桌面):
1 | rclone sync adr:storage/dcim/Camera ~/Desktop/AndroidPhotos --progress |
这将执行增量同步。只有在源目录中有变化时, rclone
才会传输文件。这将节省时间和带宽。
请注意,无线调试可能不如 USB 调试稳定,因此在进行大量文件传输时,请确保网络连接稳定。
# 五、做到这里有没有发现什么问题,adb 安装来是干啥的,难道就只是为了 adb install termux 吗
为了加快备份的传输速度,用公司的 wifi 测试只有 10M/s,几十个 G 的照片要传很久,虽然这种很久是一次性的,后续增量同步只有很少的数据需要传输
但是我还是很难等待这个过程,所以准备利用 USB 线加快 rclone 的备份速度
-
首先用线连上手机
-
使用 adb forward,转发 sshd 端口到 本地
1 | # macos |
- 配置 rclone adl(与 adr 的区别是:android remote、android local)
1 | vim ~/.config/rclone/rclone.conf |
- 接下来试试传输速度
1 | rclone sync adl:storage/dcim/Camera ~/Desktop/AndroidPhotos --progress |
起飞,比 WIFI 快得不是一点,爽
# 六、衍生想法
还想过做:Macos 检测手机连上 USB 之后,自动执行 rclone 同步
也可以做:Macos 检测手机连上 家里 WIFI 之后,自动执行 rclone 同步
也可以做:在 termux 上安装 rclone,定时或触发条件,主动向 macos 同步数据(我的 macos 连了一个 NAS 存储,24 小时开机,配有公网 IP 和 DDNS 解析)
以上几个方案我觉得都可以,也都不难,这里就不展开写了