Cloudflare配置
创建R2储存桶Kopia
存储桶名称
Access Key ID
Secret Access Key
账户 ID(在 R2 概览页右侧)
Kopia配置
参考资料:使用 Kopia 自动化备份服务器数据
环境准备(清除残留的全部kopia服务):
# 1. 停止并删除 systemd 服务(如果有)sudo systemctl stop kopia-server 2>/dev/nullsudo systemctl disable kopia-server 2>/dev/nullsudo rm -f /etc/systemd/system/kopia-server.servicesudo systemctl daemon-reload
# 2. 杀掉所有 kopia 进程pkill -f kopia
# 3. 断开 Repositorykopia repository disconnect 2>/dev/null
# 4. 删除 Kopia 配置文件rm -rf ~/.config/kopiarm -rf /root/.config/kopia
# 5. 卸载 Kopia 程序sudo apt remove kopia -ysudo rm -f /etc/apt/sources.list.d/kopia.listsudo rm -f /usr/share/keyrings/kopia-keyring.gpgsudo apt update在 Debian GNU/Linux 上,最省心的安装方式是添加官方的 APT 仓库
# 1. 安装必要的系统组件
sudo apt update && sudo apt install -y curl gpg apt-transport-https
# 2. 下载并添加 Kopia 的 GPG 签名密钥
curl -s https://kopia.io/signing-key | sudo gpg --dearmor -o /usr/share/keyrings/kopia-keyring.gpg
# 3. 将 Kopia 官方软件源添加到系统中
echo "deb [signed-by=/usr/share/keyrings/kopia-keyring.gpg] http://packages.kopia.io/apt/ stable main" \ | sudo tee /etc/apt/sources.list.d/kopia.list
# 4. 再次更新源并安装 kopia
sudo apt update && sudo apt install kopia -y
# 5. 验证是否安装成功
kopia --versionKopia 创建并连接到 Cloudflare R2存储桶
kopia repository create s3 \ --bucket=你的存储桶名称 \ --endpoint=你的账户ID.r2.cloudflarestorage.com \ --access-key=你的AccessKeyID \ --secret-access-key=你的SecretAccessKey \ --password=你设置的仓库加密密码Kopia 连接到 Cloudflare R2存储桶
kopia repository create s3 \ --bucket=你的存储桶名称 \ --endpoint=你的账户ID.r2.cloudflarestorage.com \ --access-key=你的AccessKeyID \ --secret-access-key=你的SecretAccessKey \ --password=你设置的仓库加密密码查看存储桶连接状态:
kopia repository status一键启动服务(含Web服务,账户密码):
kopia server start --address=0.0.0.0:41515 --insecure --server-username=用户名 --server-password=密码 &杀死当前 kopia 服务进程:
pkill -f kopia查看 kopia 服务运行状态:
ps aux | grep kopia添加系统服务:
sudo tee /etc/systemd/system/kopia-server.service > /dev/null <<EOF[Unit]Description=Kopia ServerAfter=network.target
[Service]ExecStartPre=kopia repository connect s3 \ --bucket=你的存储桶名称 \ --endpoint=你的账户ID.r2.cloudflarestorage.com \ --access-key=你的AccessKeyID \ --secret-access-key=你的SecretAccessKey \ --password=你设置的仓库加密密码ExecStart=kopia server start --address=0.0.0.0:41515 --insecure --server-username=登录用户名 --server-password=登录密码Restart=on-failureUser=root
[Install]WantedBy=multi-user.targetEOF
# 先杀掉当前后台进程pkill -f kopia
# 启用并启动服务sudo systemctl daemon-reloadsudo systemctl enable --now kopia-server
# 查看状态sudo systemctl status kopia-serverKopia 备份、恢复与使用方法
备份
查询服务所在文件夹
查看对应服务的容器挂载路径(把容器名替换成实际名称)
docker inspect 容器名 | grep -A 10 Mounts例:
docker inspect rss-reader | grep -A 10 Mounts执行后提示路径:/root/rss-reader/config.json
选择备份路径:/root/rss-reader
查看非 docker 容器服务状态:
systemctl status 服务名查看 非docker容器 服务详细定义:
systemctl cat 服务名执行备份命令
立即创建一次快照
kopia snapshot create /root/rss-reader定时创建快照
kopia snapshot create 备份文件夹kopia policy set 备份文件夹 --add-time-of-day=18:00恢复
先在新服务器上查看快照列表找到 ID:
本机快照:
kopia snapshot list所有快照:
kopia snapshot list --all恢复命令:
kopia restore 快照ID 备份文件夹例:快照 ID :k7e2b3c4d5e6f;备份文件夹:/root/rss-reader
kopia restore k7e2b3c4d5e6f /root/rss-readerkopia 的正确使用方法
1.设置自动定时备份、自动保留
2.使用前置/后置脚本(文件夹动作)
① 快照前填入:(全部容器与指定容器)
备份前停止全部容器:
/bin/bash -c "docker stop $(docker ps -q)"备份前停止指定容器:
docker stop rss-reader komari② 快照后填入:(全部容器与指定容器)
备份后重启全部容器:
/bin/bash -c "docker start $(docker ps -a -q --filter status=exited)"备份后重启容器:
docker start rss-reader komari3.在备份 root 的时候必须忽略 .config/kopia 目录:
如果 Kopia 缓存或者配置文件刚好也装在 /root/.config/kopia 里,Kopia 备份 /root 时就会陷入“我自己备份我自己,导致数据无限循环膨胀”的死循环。
忽略目录:
.config/kopia/**.cache/kopia/**.cache/**.tmp/****/logs/***.log” ** ” 意思是“包含这个目录下所有的子目录、多级子目录以及所有文件”。这是一种更强力、更彻底的递归忽略写法,能确保整个文件夹里的垃圾碎片绝对不会被打包。
.config/kopia/ 和 .cache/kopia/: Kopia 面板在运行期间,会把缓存、临时索引文件源源不断地写进 /root/.config/kopia 和 /root/.cache/kopia 目录里。如果不排除它们,Kopia 在备份 /root 时就会去读这些正在变动的缓存,导致“我自己备份我自己”的死循环,使备份数据无限膨胀并疯狂报错。
.cache/: Linux 系统和各种应用存放运行缓存的地方(比如 Python、各种包管理工具的缓存)。它们全是临时衍生出来的碎片文件,丢了也完全不影响服务恢复,不备份可以极大地提高备份速度。
.tmp/: 系统临时文件的聚集地,重启就失效,没有备份价值。
/logs/ 和 * .log: 屏蔽所有的日志目录和以 .log 结尾的文件。Docker 容器和系统天天都在疯狂打印日志,这些文件体积大、变动极度频繁,而且对于恢复服务毫无帮助,排除掉能帮你省下大量的云端存储桶空间。
4.Command Mode(命令模式)改为 ignore failures(容忍失败):
服务器上本来就没有任何正在运行的 Docker 容器(或者手动停掉了某些容器),docker stop $(docker ps -q) 这条命令在 Linux 底层执行时会因为“没有接收到任何容器 ID”而返回一个错误状态码(Exit Code 1)。
因为设置了 must succeed,Kopia 这个脚本“报错”了就会立刻中断并取消今天的整个备份任务。
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时










