トップ «前の日記(2026-05-22 (Fri)) 最新 編集   RSS 1.0 FEED  

Journal InTime


2026-05-28 (Thu) [長年日記]

_ Cloudflare R2へのバックアップ時の501

MastodonのデータをrcloneでCloudflare R2にバックアップするようにしていたが、以下のようなエラーが出ていた。

2026/05/28 04:50:29 ERROR : db_20260528.sql.gz: Failed to copy: NotImplemented: Not Implemented
	status code: 501, request id: , host id: 
2026/05/28 04:50:29 ERROR : Attempt 1/3 failed with 1 errors and: NotImplemented: Not Implemented
	status code: 501, request id: , host id: 
2026/05/28 04:50:29 ERROR : Attempt 2/3 succeeded

rclone copy /home/mastodon/backup r2:mastodon-db --dump headers -vv でリクエスト・レスポンスヘッダをダンプしてみると、R2側にまだ存在しないファイルに対するHEADリクエストへのレスポンスで401ではなく501が返って来ていた。

--s3-no-head オプションを付けたら501が出なくなったので、バックアップスクリプトを以下のように書き換えて様子を見ることにした。

#!/bin/bash
set -euo pipefail

# Configurable variables
INSTANCE_DIR="/home/mastodon/live"
SYSTEM_DIR="/home/mastodon/live/public/system"
BACKUP_DIR="/home/mastodon/backup"
BACKUP_LIFETIME_DAYS=7
DATE_FORMAT="%Y%m%d"
DB_USER="mastodon"
DB_NAME="mastodon_production"
RCLONE_DB_DEST="r2:mastodon-db"
RCLONE_MEDIA_DEST="r2:mastodon-media"

# Error handling
trap 'echo "An error occurred. Exiting." && exit 1' ERR

backup_date="$(date +$DATE_FORMAT)"

# Database backup
echo -n "Backup DB... "
DB_BACKUP_FILE="$BACKUP_DIR/db_$backup_date.sql.gz"
pg_dump -Fc -U $DB_USER $DB_NAME | gzip -c >"$DB_BACKUP_FILE"
ls -1 $BACKUP_DIR/db_*.gz | sort | head -n -7 | xargs rm -f
echo "Success!"

# Sync backup
echo -n "Backup to R2... "
rclone copy "$BACKUP_DIR" $RCLONE_DB_DEST
rclone copy --exclude="/cache/**" "$SYSTEM_DIR" $RCLONE_MEDIA_DEST --s3-no-head
echo "Success!"
Tags: Mastodon