Mastodon

备份Cloudflare R2重要文件到BackBlaze B2

备份Cloudflare R2重要文件到BackBlaze B2
Photo by benjamin lehman / Unsplash

前提:

1. 确保安装rclone

2. 配置好rclone config r2、b2

3. 确保需要备份哪些文件/文件夹

以我备份Cloudflare R2 Mastodon-Main的“本地”媒体到Backblaze B2 Hostdzire-SFO-Backup(我的策略是每一个服务器对于Backblaze的一个bucket用于备份)

流程:

从Cloudflare R2下载本地文件到本地——在本地打包为tar.gz——上传到Backblaze对应bucket

  1. 确保bucket存在
rclone lsd r2:mastodon-main
rclone lsd b2:Hostdzire-SFO-Backup
  1. 配置文件名环境变量
DATE=$(date +%Y%m%d)
ARCHIVE_NAME="mastodon-media-${DATE}.tar.gz"
ARCHIVE_NAME="mastodon-media-${DATE}.tar.gz"
ARCHIVE_PATH="/tmp/${ARCHIVE_NAME}"
B2_DEST="b2:Hostdzire-SFO-Backup/mastodon/main"
  1. 创建用于存储媒体的临时目录
TMPDIR=/tmp/mastodon-media-backup
mkdir -p $TMPDIR
  1. 从R2拉取三个目录,并且显示进度

一般accounts最快,media_attachment较快,custom_emojis对我来说最慢

rclone copy r2:mastodon-main/accounts        $TMPDIR/accounts        --progress
rclone copy r2:mastodon-main/custom_emojis   $TMPDIR/custom_emojis   --progress
rclone copy r2:mastodon-main/media_attachments $TMPDIR/media_attachments --progress

对于custom_emojis可以单独修改使用这个命令提高并发(transfers)

rclone copy r2:mastodon-main/media_attachments $TMPDIR/media_attachments \
  --progress \
  --stats 5s \
  --transfers 8 \
  --checkers 16
  1. 确保有以下的文件夹
$TMPDIR/
├── accounts/
├── custom_emojis/
└── media_attachments/
  1. 打包3个文件夹为tar.gz文件
tar -czvf $ARCHIVE_PATH \
  -C $TMPDIR \
  accounts custom_emojis media_attachments
  1. 检查tar.gz文件是否存在
ls -lh $ARCHIVE_PATH
  1. 上传tar.gz文件到b2:Hostdzire-SFO-Backup/mastodon/main下
rclone copy \
  $ARCHIVE_PATH \
  $B2_DEST \
  --progress \
  --checksum
  1. 检查tar.gz文件是否成功上传
rclone ls $B2_DEST | grep $ARCHIVE_NAME
  1. 确保本地tar.gz文件未损坏
tar -tzf $ARCHIVE_PATH | head
  1. 删除三个目录
rm -rf \
  $TMPDIR/accounts \
  $TMPDIR/custom_emojis \
  $TMPDIR/media_attachments
  1. 删除tar.gz文件
rm -f $ARCHIVE_PATH
  1. 清空临时目录
rmdir $TMPDIR 2>/dev/null || true