运行在 VPS 上的 Minecraft 服务器累积了玩家大量的心血与回忆:精美的建筑、复杂的红石装置、玩家数据以及插件配置。只要出一次意外,无论是硬盘损坏、世界损毁,还是误删命令,一切都可能瞬间消失。本指南将带你用 cron 结合 tar 和 rsync 设置自动备份,并制作异地副本,让你的世界即使在 VPS 宕机时也能安然无恙。
为什么要自动备份
手动备份往往会被遗忘,而且通常是在为时已晚时才想起来。通过 cron 自动备份可以让你获得稳定的副本,无需依赖记忆。服务器的玩家越多、更新越频繁,就越需要提高备份频率,因为丢失一天的数据可能意味着整个社区数小时的建造成果付诸东流。
关键原则是:在你成功测试过恢复之前,拥有备份并不等于安全。至少每月一次,把最新的备份解压到测试文件夹,确认压缩包没有损坏且确实可以恢复。
需要备份哪些内容
很多人只备份主世界文件夹,却忽略了同样重要的其他部分。对于运行 Paper 或 Spigot 的服务器,应当备份以下内容:
- 所有世界文件夹 —
world、world_nether、world_the_end(Paper 将每个维度存储在独立文件夹中) - server.properties — 服务器的核心配置
- plugins/ 文件夹 — 插件 jar 包及其所有配置文件
- ops.json 和 whitelist.json — 管理员名单和白名单
- bukkit.yml、spigot.yml、paper-global.yml — 服务器级别配置
数据一致性问题
这正是新手最容易出错的地方。如果你在服务器正在写入区域文件时复制世界文件夹,可能会得到一个撕裂的快照,或者一个无法加载的损坏区域文件。为防止这种情况,你有两种选择。
方案一:短暂停止服务器
这是最安全的做法:执行 stop 命令,运行备份,然后重新启动。适合能在凌晨 4 点下线且不影响任何人的私人服务器。
方案二:使用 save-off 加 save-all
对于必须保持在线的服务器,在备份前通过控制台或 RCON 发送命令。输入 save-all 将所有内容刷新到磁盘,接着输入 save-off 让服务器暂时停止写入世界文件。然后再复制或打包文件。完成后执行 save-on 恢复正常保存。这样无需关闭服务器即可获得完整、一致的副本。
切勿在服务器运行时未先执行 save-off 就复制世界文件夹。区域文件(.mca)可能在复制过程中被写入,从而悄悄损坏你的备份,而你直到真正需要恢复的那一天才会发现。
tar 备份脚本
创建文件 /opt/minecraft/backup.sh,内容如下。该脚本会将所有世界文件夹压缩成带时间戳的 .tar.gz 归档,并自动删除超过 7 天的旧备份。
#!/bin/bash
set -euo pipefail
SERVER_DIR="/opt/minecraft/server"
BACKUP_DIR="/opt/minecraft/backups"
KEEP_DAYS=7
mkdir -p "$BACKUP_DIR"
cd "$SERVER_DIR"
# 若使用 RCON,请先在此处执行 save-off + save-all(见一致性章节)
# mcrcon -H 127.0.0.1 -P 25575 -p PASS "save-all" "save-off"
tar czf "$BACKUP_DIR/backup-$(date +%F-%H%M).tar.gz" \
world world_nether world_the_end \
server.properties ops.json whitelist.json plugins
# mcrcon -H 127.0.0.1 -P 25575 -p PASS "save-on"
# 删除超过 KEEP_DAYS 天的备份
find "$BACKUP_DIR" -name "backup-*.tar.gz" -mtime +$KEEP_DAYS -delete
echo "Backup completed: $(date)"
别忘了用 chmod +x /opt/minecraft/backup.sh 赋予执行权限,并在设置 cron 之前手动运行一次进行测试。
用 crontab 定时执行
使用 crontab -e 打开 crontab,添加下面这行,让备份在每天凌晨 4 点运行——这是玩家活动最少的时段。
# 每天 04:00 备份 Minecraft
0 4 * * * /opt/minecraft/backup.sh >> /var/log/mc-backup.log 2>&1
将输出重定向到日志文件,能让你确认 cron 是否成功运行。初期应定期查看日志,确保一切按计划进行。
备份策略对比
| 策略 | 频率 | 保留期 | 适用场景 |
|---|---|---|---|
| 完整 tar(本地) | 每天 | 7 天 | 中小型服务器 |
| rsync 异地 | 每天 | 7-14 天 | 防范 VPS 故障 |
| restic/borg(去重) | 每 6 小时 | 30 天以上 | 大型世界 |
| 主机快照 | 每月两次 | 视服务商而定 | 系统级备份 |
异地副本与 3-2-1 原则
与服务器位于同一台 VPS 上的备份,一旦硬盘损坏或 VPS 被删除便毫无用处。3-2-1 原则指出,你应当保留 3 份数据副本,存储在 2 种介质 上,并且 至少 1 份放在异地。最简单的方法是用 rsync 将备份文件夹推送到另一台服务器或对象存储。
# 通过 SSH 将备份发送到远程主机
rsync -avz --delete /opt/minecraft/backups/ user@remote-host:/backups/minecraft/
或者使用 restic 备份到兼容 S3 的存储,它内置了去重、加密和保留策略。
export RESTIC_REPOSITORY="s3:https://s3.example.com/mc-backups"
restic backup /opt/minecraft/backups
restic forget --keep-daily 7 --keep-weekly 4 --prune
大型世界的增量备份
随着世界不断变大,每天做完整 tar 会消耗大量空间和时间。解决办法是使用只保存变化部分的增量备份。restic 和 borg 等工具采用去重技术,让你用极少的空间保留多个快照。使用 rsync 时,可以用 --link-dest 硬链接到上一次备份,从而避免重复复制未改变的文件。
恢复步骤
备份只有能够恢复才有价值。基本步骤如下:
- 务必先将服务器完全 stop。
- 先备份当前的世界文件夹(以防恢复错误的归档)。
- 将备份解压覆盖到现有文件夹:
tar xzf backup-2026-07-02-0400.tar.gz -C /opt/minecraft/server - 检查文件权限(属主必须是运行服务器的用户)。
- 重新启动服务器并登录,确认世界加载正确。
在 AsiaGB VPS 上备份
如果你在 AsiaGB 的 Linux VPS 上运行 Minecraft(每月 500 泰铢起),可以立即在采用 SSD 存储的机器上部署上述 cron 任务和脚本。在主机层面,AsiaGB 每月提供两次自动备份(每月 1 号和 15 号)作为系统级保障,并提供 99% 的正常运行时间保证,通过 DirectAdmin 进行管理。即便如此,我们仍建议你以更高的频率设置专属于 Minecraft 的备份,因为游戏数据每天都在变化,你应当自行掌控备份节奏以契合自己社区的需求。
常见问题 (FAQ)
每次备份都必须关闭 Minecraft 服务器吗?
不需要。如果你通过 RCON 在备份前执行 save-all 再执行 save-off,完成后再执行 save-on,就能在不关闭服务器的情况下获得完整副本。不过对私人服务器来说,短暂停止服务器仍是最安全的方法。
Minecraft 服务器应该多久备份一次?
这取决于服务器的活跃程度。繁忙的服务器应每 6 小时或每天备份,而小型服务器每天备份即可。你还应始终遵循 3-2-1 原则,至少保留一份异地副本。
为什么放在同一台 VPS 上的备份不安全?
因为一旦硬盘损坏、VPS 被删除或遭到入侵,服务器和备份会同时消失。这正是 3-2-1 原则要求至少一份副本放在异地的原因,例如用 rsync 传到另一台主机或对象存储。
AsiaGB 已经会备份我的服务器,为什么还要自己设置?
AsiaGB 的备份每月运行两次(1 号和 15 号),属于系统级保障,对于每天都在变化的游戏数据可能不够频繁。设置专属于 Minecraft 的备份能让你以更精细、更频繁的方式进行恢复。
准备好开设您的 Minecraft 服务器了吗?
AsiaGB Linux VPS(SSD、DirectAdmin、99% 在线率)每月 500 泰铢起,泰国与新加坡数据中心低延迟,适合任何规模的 Minecraft 服务器。
查看 VPS 套餐