feat: rclone支持
这个提交包含在:
@@ -1,6 +1,6 @@
|
||||
# backup.sh
|
||||
|
||||
把指定目录打包成 `tar.gz`,再通过 SMB / Samba 上传到远端服务器。同时支持 **Linux** 与 **macOS**。
|
||||
把指定目录打包成 `tar.gz`,再上传到远端:当前支持 **SMB / Samba** 与 **rclone**(覆盖 Google Drive / OneDrive / S3 / WebDAV 等所有 rclone 支持的远端)。同时支持 **Linux** 与 **macOS**。
|
||||
|
||||
> SFTP 等其它方式已在脚本中预留入口(`run_sftp`、`SFTP_*` 配置),目前未实现。
|
||||
|
||||
@@ -8,17 +8,18 @@
|
||||
|
||||
- bash 3.2+ / tar / date / split
|
||||
- `sha256sum`(Linux 自带,属于 coreutils)或 `shasum`(macOS 自带)
|
||||
- Linux:`smbclient`(包含在 `smbclient` 或 `samba-client` 包中)
|
||||
- macOS:`smbclient`(推荐,`brew install samba`),或退回到系统自带的 `mount_smbfs`
|
||||
- 上传 SMB:`smbclient`(Linux 一般在 `smbclient` 或 `samba-client` 包中;macOS 推荐 `brew install samba`,没装会回退到 `mount_smbfs`)
|
||||
- 上传 rclone:`rclone`,且需提前用 `rclone config` 配好远端
|
||||
|
||||
### 安装依赖
|
||||
|
||||
| 系统 | 命令 |
|
||||
| --- | --- |
|
||||
| Debian / Ubuntu | `apt install -y smbclient` |
|
||||
| RHEL / Rocky / Alma | `dnf install -y samba-client` |
|
||||
| Arch | `pacman -S smbclient` |
|
||||
| macOS | `brew install samba`(可选,无则使用 `mount_smbfs`) |
|
||||
| 系统 | SMB | rclone |
|
||||
| --- | --- | --- |
|
||||
| Debian / Ubuntu | `apt install -y smbclient` | `apt install -y rclone` 或官方脚本 |
|
||||
| RHEL / Rocky / Alma | `dnf install -y samba-client` | `dnf install -y rclone` 或官方脚本 |
|
||||
| Arch | `pacman -S smbclient` | `pacman -S rclone` |
|
||||
| macOS | `brew install samba`(可选) | `brew install rclone` |
|
||||
| 通用 | — | `curl https://rclone.org/install.sh \| sudo bash` |
|
||||
|
||||
## 文件
|
||||
|
||||
@@ -63,6 +64,7 @@ bash backup.sh <method> [options]
|
||||
| 方式 | 说明 |
|
||||
| --- | --- |
|
||||
| `smb` | 通过 SMB / Samba 上传 |
|
||||
| `rclone` | 通过 rclone 上传到网盘 / 对象存储等任意 rclone 支持的远端 |
|
||||
| `sftp` | 已预留入口,暂未实现 |
|
||||
|
||||
最常见的用法是先编辑同目录下的 `backup.conf`,然后执行:
|
||||
@@ -99,6 +101,18 @@ bash backup.sh smb
|
||||
| `SMB_DOMAIN` | 域 / 工作组(可选) |
|
||||
| `SMB_VERSION` | SMB 协议版本,如 `3.0`(可选) |
|
||||
|
||||
### rclone 段
|
||||
|
||||
| 字段 | 说明 |
|
||||
| --- | --- |
|
||||
| `RCLONE_EXECUTABLE` | rclone 可执行文件路径(可选,留空则从 `PATH` 中查找)。装在非标准路径时填这里 |
|
||||
| `RCLONE_REMOTE` | rclone 远端名(**不带尾随冒号**),例如 `gdrive`。需提前用 `rclone config` 配好 |
|
||||
| `RCLONE_PATH` | 远端目标子路径,例如 `vps-backup/web1` |
|
||||
| `RCLONE_CONFIG` | 自定义 rclone.conf 路径(可选,留空则使用 `~/.config/rclone/rclone.conf`) |
|
||||
| `RCLONE_FLAGS` | 透传给 `rclone` 的额外参数(可选),常用:`--bwlimit 10M --transfers 2 --tpslimit 4` |
|
||||
|
||||
> 网盘类远端(Google Drive、OneDrive 等)建议加 `--tpslimit` 限制每秒事务数,避免触发风控;带宽紧张的服务器加 `--bwlimit` 限速。
|
||||
|
||||
### SFTP 段(预留,暂未实现)
|
||||
|
||||
`SFTP_HOST` / `SFTP_PORT` / `SFTP_USER` / `SFTP_PASSWORD` / `SFTP_KEY` / `SFTP_PATH`
|
||||
@@ -133,6 +147,16 @@ bash backup.sh smb
|
||||
| `--smb-domain DOMAIN` | `SMB_DOMAIN` |
|
||||
| `--smb-version VER` | `SMB_VERSION` |
|
||||
|
||||
### rclone
|
||||
|
||||
| 参数 | 对应配置 |
|
||||
| --- | --- |
|
||||
| `--rclone-executable F` | `RCLONE_EXECUTABLE` |
|
||||
| `--rclone-remote NAME` | `RCLONE_REMOTE` |
|
||||
| `--rclone-path PATH` | `RCLONE_PATH` |
|
||||
| `--rclone-config FILE` | `RCLONE_CONFIG` |
|
||||
| `--rclone-flags STR` | `RCLONE_FLAGS`(整串透传,需引号包裹) |
|
||||
|
||||
### SFTP(预留)
|
||||
|
||||
`--sftp-host` `--sftp-port` `--sftp-user` `--sftp-password` `--sftp-key` `--sftp-path`
|
||||
@@ -164,6 +188,35 @@ bash backup.sh smb \
|
||||
bash backup.sh smb -s "/var/lib/mysql"
|
||||
```
|
||||
|
||||
rclone 上传到 Google Drive(先 `rclone config` 配好名为 `gdrive` 的远端):
|
||||
|
||||
```bash
|
||||
bash backup.sh rclone \
|
||||
--rclone-remote gdrive \
|
||||
--rclone-path vps-backup/web1 \
|
||||
--rclone-flags "--bwlimit 10M --transfers 2 --tpslimit 4" \
|
||||
--retention 30
|
||||
```
|
||||
|
||||
完全依赖配置文件的 rclone 用法:
|
||||
|
||||
```bash
|
||||
bash backup.sh rclone
|
||||
```
|
||||
|
||||
### rclone 远端的初始化
|
||||
|
||||
脚本本身不做交互式 OAuth,需要先在本机跑一次 `rclone config`:
|
||||
|
||||
```bash
|
||||
rclone config
|
||||
# 选 n (new remote) -> 输入名字(如 gdrive)-> 选存储类型 -> 跟着提示走
|
||||
rclone listremotes # 应能看到 "gdrive:"
|
||||
rclone lsd gdrive: # 验证可访问
|
||||
```
|
||||
|
||||
之后把同样的远端名填到 `backup.conf` 的 `RCLONE_REMOTE`(不带冒号)。
|
||||
|
||||
## 定时任务
|
||||
|
||||
使用 `>`(单箭头)覆盖写入日志,避免日志文件无限增长——只保留最近一次执行的日志:
|
||||
@@ -190,9 +243,10 @@ macOS 可用 `launchd` 或 `cron`(需要在「系统设置 → 隐私与安全
|
||||
|
||||
## 远端目录结构
|
||||
|
||||
每次备份在远端创建一个独立子目录,内含分卷文件与 SHA256 清单:
|
||||
每次备份在远端创建一个独立子目录(SMB 与 rclone 行为一致),内含分卷文件与 SHA256 清单:
|
||||
|
||||
```
|
||||
# SMB
|
||||
//${SMB_HOST}/${SMB_SHARE}/${SMB_PATH}/
|
||||
└── backup-20260426-031000/ # 本次备份目录
|
||||
├── backup-20260426-031000.tar.gz.0 # 分卷 0
|
||||
@@ -200,6 +254,13 @@ macOS 可用 `launchd` 或 `cron`(需要在「系统设置 → 隐私与安全
|
||||
├── backup-20260426-031000.tar.gz.2
|
||||
├── ...
|
||||
└── backup-20260426-031000.sha256 # SHA256 清单(覆盖所有分卷)
|
||||
|
||||
# rclone
|
||||
${RCLONE_REMOTE}:${RCLONE_PATH}/
|
||||
└── backup-20260426-031000/
|
||||
├── backup-20260426-031000.tar.gz.0
|
||||
├── ...
|
||||
└── backup-20260426-031000.sha256
|
||||
```
|
||||
|
||||
未启用分卷(`COMMON_SPLIT_SIZE=""`)时目录里只有完整归档加清单:
|
||||
@@ -285,3 +346,5 @@ tar -xzf backup-20260426-031000.tar.gz
|
||||
- 命令行密码会出现在进程列表中,安全敏感场景请优先使用 `backup.conf`,并把权限收紧:`chmod 600 backup.conf`。
|
||||
- macOS 上若未安装 `smbclient`,会回退到挂载方式(`mount_smbfs`),此时不支持 `--retention` 远端清理,仅完成上传。
|
||||
- 远端清理仅清理符合 `${COMMON_ARCHIVE_PREFIX}-YYYYmmdd-HHMMSS` 命名规范的目录,避免误删其它内容。
|
||||
- rclone 上传完成后会自动用 `rclone hashsum SHA256` 拉取远端 hash 与本地 `.sha256` 清单逐项比对,校验失败会以非 0 状态码退出。少数远端(个别 WebDAV)不支持 SHA256 hash,遇到这种情况脚本会报错退出,可改成手动下载后用 `sha256sum -c` 校验。
|
||||
- rclone 远端必须先在本机用 `rclone config` 配好;自定义 `RCLONE_CONFIG` 路径需保证脚本运行用户可读。
|
||||
|
||||
在新工单中引用
屏蔽一个用户