Linux Rclone数据备份:使用 tar 与 Rclone 在 Linux 中进行打包上传(含分块上传)

一、直接打包并上传到远程

在 Linux 环境下,可以通过 tar → 管道 → rclone rcat 来实现“边压缩边上传”,无需生成本地压缩文件。

基本示例

tar -czf - /path/to/files | rclone rcat remote:backup.tar.gz

参数说明

  • -czf -:使用 gzip 压缩,并将输出写入标准输出(- 表示不生成本地文件)。
  • |:管道,将 tar 的输出传递给 rclone。
  • rclone rcat:从标准输入接收数据并直接上传到远程存储。

二、Rclone 同步目录示例(带排除规则)

rclone sync /data/backup alist:/百度云盘/backup \
  -P \
  --log-file="/var/backup.log" \
  --log-level=ERROR \
  --exclude "panel/**" \
  --delete-excluded \
  --modify-window=1s

参数解释

  • --exclude "目录/**":排除某目录及其所有子文件夹。
  • --checksum:基于校验和判断文件是否变化,而不是时间戳或大小。
  • -P:显示实时进度。
  • --log-file:将日志写入文件。
  • --log-level=ERROR:只记录错误,日志更干净。

三、打包并分块上传

思路: 先用 tar 打包 → 再用 split 分块 → 最后上传每个分块。

方式一:使用 split 的 filter(需要新版本 split)

tar -czf - /path/to/files | \
split -b 200M - /tmp/backup_$(date +%Y%m%d).tar.gz.part \
  --filter='rclone rcat remote:backup/$(basename "$FILE") --size-only'

$(basename "$FILE"):提取文件名(去掉路径)。

:warning: 如果你的 split 版本较旧,不支持 $FILE 变量,则使用下面的方式。


四、方式二(通用):先分块,再批量上传

1. 打包并分块到 /tmp

cd /data && tar -czf - docker | \
split -b 200M - /tmp/docker_$(date +%Y%m%d).tar.gz.part

2. 批量上传所有分块

for FILE in /tmp/docker_$(date +%Y%m%d).tar.gz.part*; do
    rclone rcat alist:/百度云盘/docker/$(basename "$FILE") --size-only < "$FILE"
done

五、下载分块文件

rclone copy remote:backup /path/to/local/backup \
  --include "backup_20231030.tar.gz.part*"

示例:

rclone copy alist:/百度云盘/docker \
  /data/backup \
  --include "docker_20241030.tar.gz.part*"

六、合并分块文件

cat /path/to/local/backup/backup_20231030.tar.gz.part* \
  > /path/to/local/backup/backup_20231030.tar.gz

示例:

cat /data/backup/docker_20241030.tar.gz.part* \
  > /data/backup/docker_20241030.tar.gz

七、解压文件

tar -xzf /path/to/local/backup/backup_20231030.tar.gz \
  -C /path/to/extract/directory

示例:

tar -xzf /data/backup/docker_20241030.tar.gz \
  -C /data/backup/dockertest