Repository navigation
main
Minecraft Spigot 伺服器進階備份插件 | Java 21 | Spigot 1.20.6+
| 項目 | 需求 |
|---|---|
| Java | 21 或更高版本 (Temurin/OpenJDK) |
| 伺服器 | Spigot / Paper / Leaf 1.20.6+ |
| 儲存空間 | 備份目標至少需要與來源目錄相同的可用空間 |
- 從 Releases 下載
ASPbackup-1.0.0.jar - 將 jar 檔案放入伺服器的
plugins/目錄 - 啟動(或重啟)伺服器
- 插件會自動生成
plugins/ASPbackup/config.yml配置檔案 - 編輯配置檔案以符合您的需求
- 執行
/aspbackup reload重新載入配置
plugins/ASPbackup/
├── config.yml # 主配置檔案
├── temp/ # 暫存目錄(壓縮中的備份檔)
├── checkpoints/ # 中斷備份的檢查點檔案
├── logs/ # 備份日誌檔案
│ ├── backup-2026-08-08.log
│ └── backup-2026-08-09.log
└── backups/ # 本地備份目標(預設,若使用 REMOTE 目標則不會有)
├── ASPbackup-20260808-143022.tar.gz
└── ASPbackup-20260809-080015.tar.gz
# 手動觸發備份
/aspbackup start
# 查看備份狀態
/aspbackup status
# 查看備份歷史
/aspbackup list
# 重新載入配置
/aspbackup reload
# 查看插件資訊
/aspbackup info
# 查看所有命令
/aspbackup help
插件預設啟用啟動備份和關閉備份,無需任何額外設定:
- 伺服器啟動時:延遲數秒後在背景執行備份,不阻塞伺服器
-
伺服器關閉時:收到
/stop命令後攔截關閉,先執行備份,完成後再關閉
在 config.yml 中啟用定時備份:
schedule:
enabled: true
interval-minutes: 360 # 每 6 小時備份一次
backup-type: "full"
target-id: "remote-cluster"
quiet-hours:
- "06:00-22:00" # 此時間段內不執行備份backup:
# 伺服器啟動時是否自動備份
auto-on-start: true
# 伺服器關閉時是否自動備份
auto-on-shutdown: true
# 啟動備份的延遲秒數(讓伺服器穩定後再備份)
start-delay-seconds: 10
# 備份主檔案名稱(用於暫存檔命名)
backup-name: "ASPbackup"
# 阻塞式備份超時秒數(防止遠端傳輸失敗時阻塞伺服器)
blocking-timeout-seconds: 120
# 暫存目錄
temp-directory: "plugins/ASPbackup/temp"
# 單次備份最大大小(MB),0 = 無限制
max-backup-size-mb: 0
# 備份完成後是否驗證完整性
verify-after-backup: true
# 壓縮設定
compression:
format: "targz" # "zip" 或 "targz"
level: 9 # 1 (最快) 到 9 (最小)每個來源可設定 category 分類標籤,備份完成後會按分類顯示統計資訊。
backup:
sources:
# 玩家背包資料
- path: "world/playerdata"
name: "玩家背包数据"
category: "player-data"
exclude:
- "**/*.dat"
- "**/*.dat_old"
max-depth: 10
# 玩家統計資料
- path: "world/stats"
name: "玩家统计数据"
category: "player-data"
exclude:
- "**/*.lock"
max-depth: 10
# 玩家進度資料
- path: "world/advancements"
name: "玩家进度数据"
category: "player-data"
exclude:
- "**/*.lock"
max-depth: 10
# 所有插件檔案
- path: "plugins"
name: "所有插件文件"
category: "plugins"
exclude:
- "**/ASPbackup/**" # 排除備份插件自身
- "**/dynmap/web/**"
- "**/*.log"
max-depth: 50
# 插件配置檔案(僅備份設定檔)
- path: "plugins"
name: "插件配置文件"
category: "plugin-configs"
include:
- "**/config.yml"
- "**/config.yaml"
- "**/settings.yml"
- "**/*.properties"
- "**/*.json"
- "**/*.toml"
- "**/*.conf"
exclude:
- "**/ASPbackup/**"
- "**/dynmap/web/**"
- "**/*.db"
max-depth: 30來源欄位說明:
| 欄位 | 類型 | 說明 |
|---|---|---|
path |
字串 | 相對於伺服器根目錄的路徑 |
name |
字串 | 顯示名稱 |
category |
字串 | 分類標籤,用於備份統計和 tar.gz 內部分類 |
include |
列表 | 僅包含符合這些 glob 模式的檔案(空 = 全部) |
exclude |
列表 | 排除符合這些 glob 模式的檔案 |
max-depth |
整數 | 最大目錄深度 |
backup:
file-filter:
# 包含的檔案(glob 模式)
include:
- "**/*"
# 排除的檔案(全域,對所有來源生效)
exclude:
- "**/*.tmp"
- "**/*.lock"
- "**/*.pid"
- "**/ASPbackup/**" # 避免備份的備份
# 最小檔案大小(位元組),0 = 不限制
min-size-bytes: 0
# 最大檔案大小(位元組),0 = 不限制
max-size-bytes: 0Glob 模式說明:
| 模式 | 說明 | 範例 |
|---|---|---|
* |
匹配任意字元(不含 /) |
*.log 匹配所有 .log 檔案 |
** |
匹配任意目錄層級 |
**/ASPbackup/** 匹配所有 ASPbackup 目錄下的檔案 |
? |
匹配單個字元 | region/r.?.?.mca |
backup:
targets:
# 遠端分散式目標(傳輸到接收端)
- id: "remote-cluster"
type: "REMOTE"
retention-count: 3
min-free-space-mb: 10240
# 本地目標
# - id: "local"
# type: "LOCAL"
# path: "backups/"
# retention-count: 10
# min-free-space-mb: 1024
# NAS 目標(掛載的網路磁碟)
# - id: "nas"
# type: "NAS"
# path: "/mnt/nas/minecraft-backups/"
# retention-count: 5
# min-free-space-mb: 5120目標類型:
| 類型 | 說明 |
|---|---|
LOCAL |
本地目錄,path 為相對於伺服器根目錄的路徑 |
NAS |
網路磁碟,path 為絕對路徑(如 /mnt/nas/...) |
REMOTE |
遠端接收端,透過 TCP 傳輸 |
transfer:
# 分塊大小(KB)— 用於進度顯示
chunk-size-kb: 1024
# 並行傳輸執行緒數
parallel-threads: 4
# 連線超時(毫秒)
connect-timeout-ms: 10000
# 讀取超時(毫秒)
read-timeout-ms: 30000
# 失敗重試次數
retry-count: 3
# 重試間隔(毫秒)
retry-delay-ms: 5000
# 負載均衡策略:"round_robin" 或 "least_loaded"
load-balance-strategy: "least_loaded"
# 傳輸節點列表
nodes:
- id: "node-1"
host: "127.0.0.1"
port: 9876
auth-token: "remote-cluster"
enabled: true
weight: 1checkpoint:
# 啟用中斷續傳
enabled: true
# 檢查點儲存目錄
directory: "plugins/ASPbackup/checkpoints"
# 自動清理超過 N 天的檢查點
max-age-days: 7logging:
# 日誌級別:"DEBUG"、"INFO"、"WARN"、"ERROR"
level: "INFO"
# 日誌目錄
directory: "plugins/ASPbackup/logs"
# 保留天數
retention-days: 30
# 詳細傳輸日誌
verbose-transfer: false
# 同時輸出到控制台
console-output: truedisk-space:
# 可用空間低於此百分比時警告
warn-threshold-percent: 15
# 檢查間隔(秒)
check-interval-seconds: 300| 命令 | 權限 | 說明 |
|---|---|---|
/aspbackup start |
aspbackup.start |
手動開始備份 |
/aspbackup stop <id> |
aspbackup.stop |
停止備份(儲存檢查點) |
/aspbackup status [id] |
aspbackup.status |
查看備份狀態 |
/aspbackup resume <id> |
aspbackup.resume |
從檢查點續傳 |
/aspbackup list |
aspbackup.list |
列出備份歷史 |
/aspbackup nodes |
aspbackup.nodes |
管理傳輸節點 |
/aspbackup verify <id> |
aspbackup.verify |
驗證備份完整性 |
/aspbackup reload |
aspbackup.reload |
重新載入配置 |
/aspbackup about |
aspbackup.command |
顯示插件資訊 |
/aspbackup info |
aspbackup.command |
顯示運行狀態 |
/aspbackup help |
aspbackup.command |
顯示命令幫助 |
/aspbackup start [--full|--incremental] [--target <目標ID>]
啟動一個新的備份任務。
參數:
-
--full:完整備份(預設) -
--incremental:增量備份(僅備份變更的檔案) -
--target <id>:指定目標(預設使用第一個配置的目標)
範例:
/aspbackup start
/aspbackup start --target remote-cluster
/aspbackup start --full --target local
輸出:
[ASPbackup] 备份任务已启动:a1b2c3d4
/aspbackup stop <任務ID>
安全停止正在執行的備份任務,並儲存檢查點以便後續續傳。
範例:
/aspbackup stop a1b2c3d4
/aspbackup status [任務ID]
查看備份任務的狀態。
不帶參數:顯示所有任務摘要 帶任務ID:顯示該任務的詳細進度
範例輸出(摘要):
===== 备份任务 =====
[COMPLETED] a1b2c3d4 - 100.0% - FULL
[PAUSED] e5f6g7h8 - 47.3% - FULL
[RUNNING] i9j0k1l2 - 12.8% - FULL
/aspbackup resume <任務ID>
從中斷的檢查點恢復備份任務。
注意:僅能恢復狀態為 PAUSED 的任務。
/aspbackup list [--active|--completed|--failed|--all] [--page <頁碼>]
列出備份任務歷史。
範例:
/aspbackup list --completed
/aspbackup list --all --page 2
/aspbackup nodes list
/aspbackup nodes status [節點ID]
管理分散式傳輸節點。
/aspbackup verify <任務ID>
驗證已完成備份的 SHA-256 完整性。
/aspbackup reload
重新載入 config.yml,無需重啟伺服器。
注意:正在執行的備份任務不受影響,新配置將在下一次備份時生效。
/aspbackup about
顯示插件名稱、版本、作者和網站資訊。
/aspbackup info
顯示當前運行狀態,包括:
- 啟動/關閉備份是否啟用
- 定時備份狀態
- 備份來源數量
- 備份目標數量
- 傳輸節點數量
- 活動備份任務數
1. 觸發備份(手動/自動/定時)
│
2. 儲存世界資料(主執行緒)
├── /save-off → 關閉自動存檔
├── /save-all → 強制儲存所有世界
└── /save-on → 重新開啟自動存檔
│
3. 檢查磁碟空間
├── 不足 → 終止備份,記錄錯誤
└── 充足 → 繼續
│
4. 收集檔案(依 category 分類,套用過濾規則)
│
5. 顯示分類統計
──────────────────────────────────
备份内容汇总:
player-data:45 个文件,12.3 MB
plugins:120 个文件,48.7 MB
plugin-configs:15 个文件,0.3 MB
总计:180 个文件,61.3 MB
──────────────────────────────────
│
6. 壓縮檔案(Tar.gz,SHA-256 校驗)
│
7. 傳輸到目標
├── LOCAL → 複製到本地目錄
├── NAS → 複製到網路磁碟
└── REMOTE → TCP 整檔傳輸到接收端(含 ACK 確認)
│
8. 驗證完整性
│
9. 清理舊備份(保留策略)
│
10. 完成 → 記錄日誌
備份檔案在 tar.gz 內按 category 分類組織,結構如下:
player-data/
world/playerdata/xxx.dat
world/stats/xxx.json
world/advancements/xxx.json
plugins/
plugins/LuckPerms/...
plugins/Essentials/...
plugin-configs/
plugins/Essentials/config.yml
plugins/LuckPerms/config.yml
- player-data:玩家背包、統計、進度資料
- plugins:所有插件檔案(排除 ASPbackup 自身、大型網頁資源、日誌)
- plugin-configs:僅插件設定檔(.yml, .json, .properties, .toml, .conf)
-
啟動備份:
save-off/save-all/save-on在主執行緒,備份在背景執行緒非同步執行,不阻塞主執行緒 -
關閉備份:攔截
/stop命令,先執行備份(阻塞),備份完成後再關閉伺服器 - 手動備份:非阻塞,玩家可繼續遊戲
備份進行中
│
管理員執行 /aspbackup stop
│
├── 設定中斷標記
├── 在安全的邊界點暫停
├── 儲存檢查點 → plugins/ASPbackup/checkpoints/<id>.properties
└── 任務狀態變為 PAUSED
管理員稍後執行 /aspbackup resume
│
├── 載入檢查點
├── 從中斷位置繼續收集檔案
└── 完成後刪除檢查點
| 狀態 | 說明 |
|---|---|
INITIALIZING |
任務已建立,正在初始化 |
COLLECTING |
正在收集要備份的檔案 |
COMPRESSING |
正在壓縮檔案 |
TRANSFERRING |
正在傳輸到目標 |
VERIFYING |
正在驗證完整性 |
PAUSED |
已暫停,檢查點已儲存 |
COMPLETED |
備份成功完成 |
CANCELLED |
備份已被取消 |
FAILED |
備份失敗 |
┌─────────────────┐
│ Minecraft 伺服器 │ (ASPbackup 插件)
│ 192.168.1.100 │
└────────┬────────┘
│ TCP 9876
├──────────────┬──────────────┐
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 接收端 #1 │ │ 接收端 #2 │ │ 接收端 #3 │
│ 10.0.0.101 │ │ 10.0.0.102 │ │ 10.0.0.103 │
└─────────────┘ └─────────────┘ └─────────────┘
輪詢(Round Robin):
- 依序將備份分配給每個線上節點
最少負載(Least Loaded):
- 將備份分配給目前傳輸量最少的節點
- 考慮節點權重(weight)
- 節點失敗時增加虛擬負載作為懲罰
目前使用整檔傳輸模式,一次傳送完整備份檔案。
握手階段:
插件 → 接收端:4位元組長度 + 協定版本(2B) + token長度(1B) + token + node_id長度(1B) + node_id + capabilities(1B)
接收端 → 插件:4位元組長度 + ACK(4B, 0=成功)
檔案傳輸:
插件 → 接收端:4位元組(任務ID長度) + 任務ID(UTF-8) + 8位元組(檔案大小) + 檔案資料(含進度顯示)
接收端 → 插件:4位元組長度 + 2位元組(任務ID長度) + 任務ID + 1位元組(成功標誌) + 2位元組(訊息長度) + 訊息
接收端輸出:
received-backups/{任務ID}/backup.tar.gz
Windows:
java -jar ASPbackup-receiver-1.0.0.jar --port 9876 --dir D:\receiver\received-backupsLinux/macOS:
java -jar ASPbackup-receiver-1.0.0.jar \
--port 9876 \
--dir /mnt/backups/minecraft \
--token your-secure-tokenreceiver/
├── ASPbackup-receiver-1.0.0.jar # 接收端主程式
└── received-backups/ # 接收的備份輸出目錄
└── <任務ID>/
└── backup.tar.gz
| 參數 | 預設值 | 說明 |
|---|---|---|
--port |
9876 |
監聽埠號 |
--dir |
received-backups |
備份輸出目錄 |
--token |
change-me |
認證令牌(必須與插件 auth-token 一致) |
--help |
- | 顯示幫助 |
- 使用防火牆:限制只有 Minecraft 伺服器 IP 可以連接收端埠
-
使用強密碼令牌:避免使用預設的
change-me - 使用 VPN:如果接收端在遠端網路,建議透過 VPN 連接
-
定期更換令牌:定期更新
auth-token並重啟兩端服務
原因:目標磁碟空間不足。
解決方案:
- 清理目標目錄的舊備份
- 調整
retention-count減少保留數量 - 降低
min-free-space-mb閾值 - 擴充目標磁碟容量
原因:壓縮大型檔案消耗 CPU 和 I/O。
解決方案:
- 降低
compression.level(如從 9 降到 3) - 排除不必要的目錄(如
dynmap/web/) - 使用
quiet-hours在玩家較少的時段執行定時備份 - 增加
start-delay-seconds避免啟動時伺服器尚未穩定
原因:ASPbackup 上一次備份的檔案被包含在本次備份中。
解決方案:
已在配置中預設排除 **/ASPbackup/**,確保備份插件自身的日誌、檢查點、暫存檔不會被重複備份。如果仍有問題,檢查 file-filter.exclude 和各來源的 exclude 是否正確設定。
備份檔案為標準的 .tar.gz 格式,已按分類組織:
# 解壓縮
tar -xzf backup.tar.gz
# 解壓後結構:
# player-data/world/playerdata/...
# plugins/plugins/...
# plugin-configs/plugins/.../config.yml將對應目錄內容複製回伺服器即可。
# 1. 查看暫停的任務
/aspbackup status
# 2. 續傳
/aspbackup resume <任務ID>
# 3. 如果檢查點損壞,可以刪除檢查點檔案重新開始
rm plugins/ASPbackup/checkpoints/<任務ID>.properties編輯 config.yml 中的 backup.targets 後:
/aspbackup reload
/aspbackup start --target <新目標ID>
原因:接收端未啟動、埠號錯誤、防火牆阻擋、或 JAR 版本過舊。
解決方案:
- 確認接收端已啟動並監聽正確埠號
- 檢查
config.yml中nodes.host和nodes.port是否正確 - 確認插件和接收端都是最新版本
- 檢查防火牆是否允許該埠號
| 權限節點 | 說明 | 預設 |
|---|---|---|
aspbackup.command |
使用 /aspbackup 命令 |
OP |
aspbackup.start |
手動開始備份 | OP |
aspbackup.stop |
停止備份任務 | OP |
aspbackup.status |
查看備份狀態 | OP |
aspbackup.resume |
續傳中斷的備份 | OP |
aspbackup.list |
列出備份歷史 | OP |
aspbackup.nodes |
管理傳輸節點 | OP |
aspbackup.verify |
驗證備份完整性 | OP |
aspbackup.reload |
重新載入配置 | OP |
aspbackup.* |
所有權限(萬用字元) | OP |
# 給予管理員所有權限
/lp user Admin permission set aspbackup.*
# 給予協管員基本權限
/lp group moderator permission set aspbackup.command
/lp group moderator permission set aspbackup.status
/lp group moderator permission set aspbackup.list
- GitHub Issues: https://github.com/HDB-Studio/ASPbackup/issues
- 授權: Apache License 2.0
ASPbackup v1.0.0 — 文件最後更新:2026-08-09