Minecraft 伺服器世界備份與還原:複製資料夾就能留下存檔,損毀時回到備份時的狀態

摘要

升級版本或修改設定前,我們都想留一份真的能還原的世界。只要關閉伺服器並複製世界資料夾,就能留下完整的備份,出事時把備份放回去,世界就會回到備份時的狀態。

文章目錄

要升級 Minecraft 伺服器或修改設定前,我們會想先留一份世界,出事時才能回到原本的狀態。最簡單的備份方式不用打任何指令,只要關閉伺服器,再用檔案總管複製世界資料夾。還原時把這份備份放回去,世界就會回到備份時的狀態。

本文的測試環境是 Windows 11、Java 25,以及原版與 Paper 的 26.3,文中的做法在兩種伺服器都相同。如果還沒有伺服器,可以先架設 Java 原版伺服器。

世界資料夾的位置

伺服器的世界在伺服器資料夾裡的 world,名稱由 server.properties 的 level-name 決定。單人遊戲的存檔則在 %APPDATA%\.minecraft\saves 底下,每個世界一個資料夾,內部的結構和伺服器相同。

Minecraft 26.1 改變了世界資料夾的結構,舊教學常寫的 world/region 與 DIM-1 在新版都已經不使用,因此備份時要複製整個資料夾,不要只挑 region。下圖左邊是 1.21.11 的世界,右邊是 26.3 的世界:

左邊的 1.21.11 世界把主世界放在 world/region,地獄與終界放在 DIM-1 與 DIM1,玩家資料放在 playerdata。右邊的 26.1 起的世界把三個維度都放在 dimensions/minecraft 底下,玩家資料放在 players/data,種子、遊戲規則與計分板放在 data/minecraft

開啟伺服器後發現世界變成全新的地圖時,原本的世界通常還在。主控台的 Preparing level 顯示的名稱如果不是 world,就代表 level-name 被改過,改回原本的名稱再啟動即可。

備份世界

下面的步驟要關閉伺服器,server.properties 與 plugins 都不用動:

  1. 在伺服器視窗輸入 stop,等伺服器存檔結束。
  2. 用檔案總管開啟伺服器資料夾,對 world 按右鍵並選擇「複製」,再按右鍵選擇「貼上」。
  3. 把貼上的副本改名成當天的日期,例如 world-20261106。
  4. 啟動伺服器,繼續遊戲。

完成後,伺服器資料夾裡會同時有 world 和剛才的備份:

檔案總管的伺服器資料夾,裡面有 world 與備份的 world-20261106 兩個資料夾,旁邊是 server.jar 與 start.bat

打開 world-20261106,裡面看得到 level.dat 與 dimensions 就代表備份完成。把這個資料夾再複製到另一顆硬碟或隨身碟時,硬碟故障也不會讓世界和備份一起遺失。

還原世界

要還原時,先把現在的世界改名保留,再把備份放回去。server.properties、plugins 與 jar 檔都不用動:

  1. 在伺服器視窗輸入 stop,等伺服器結束。
  2. 把 world 改名成 world-before-restore。還原結果不對時,把它改回 world 就能回到還原之前的狀態。
  3. 複製 world-20261106,貼上後把副本改名成 world。備份本身要留著,之後才能再次使用。
  4. 啟動伺服器,等它印出 Done,再進遊戲確認世界回到了備份時的狀態。

還原完成時,資料夾的樣子如下:

檔案總管的伺服器資料夾,裡面有 world、world-20261106 與 world-before-restore 三個資料夾

進遊戲後就會看到世界回到備份時的樣子。下圖是我用遊戲連線拍的,左邊是備份後把方塊換成金磚的世界,右邊是還原後回到鑽石磚的世界:

左右對照的遊戲畫面,左邊的雪地上兩塊木板中間是金磚,右邊同一個位置在還原後回到鑽石磚

world-before-restore 確定用不到時再刪除。

想用指令確認時,可以在備份前放一塊標記方塊,座標換成沒有人會去的地方,備份後再把它換成別的方塊,例如金磚。還原後在伺服器視窗檢查它,出現 Test passed 就代表世界回到了備份時的狀態:

1forceload add 3000 3000
2setblock 3000 300 3000 minecraft:diamond_block
3execute if block 3000 300 3000 minecraft:diamond_block

level.dat 損毀的處理

level.dat 記錄世界的時間、重生點、難度與遊戲版本。26.3 的方塊存在 dimensions,遊戲規則與計分板存在 data/minecraft,因此這個檔案損毀時,這些資料都還在。依下表判斷要怎麼處理:

情況 伺服器的反應 處理方式
只有 level.dat 損毀 自動改用 level.dat_old,正常啟動 不用處理
level.dat 與 level.dat_old 都損毀 無法啟動 從備份複製 level.dat
兩個都損毀,也沒有備份 無法啟動 從同版本的新世界複製一份 level.dat

只有 level.dat 損毀時,主控台會印出 Attempting to use fallback,最後仍然會出現 Done,我們不用手動把 level.dat_old 改名:

主控台印出 Failed to load world data 的警告與 Attempting to use fallback,接著 Preparing level 與 Done

兩個檔案都損毀時,主控台最後一行是 World files may be corrupted. Shutting down.,伺服器會直接結束。這時不用還原整個世界,只要把備份裡的 level.dat 複製到 world,備份之後的建築就能保留下來。

沒有備份時,可以先把 level-name 改成 donor 並啟動一次,建立同版本的新世界。接著把 donor/level.dat 複製到 world,再把 level-name 改回 world 並啟動。這樣做之後,方塊、種子、遊戲規則與計分板都會保留,但世界的時間與重生點會變成新世界的值,要用 setworldspawn X Y Z 改回原本的重生點。

升級前的準備

升級後想降回舊版本時,只能還原升級前的備份,因為舊版的 jar 不會把新版的世界轉回去。因此升級前要留下備份與舊版的 jar,回退時照「還原世界」的步驟放回備份,並在啟動前把 jar 檔換回舊版。

直接用舊版開啟新版的世界,世界可能會被破壞。我用 26.2 開啟 26.3 的世界時,伺服器仍然印出 Done,但載入過的區塊都變成空氣,改回 26.3 也無法恢復。

不關閉伺服器的備份

如果伺服器不方便關閉,就要先暫停自動存檔再壓縮世界。伺服器開著時直接複製世界會在 session.lock 這個檔案報錯,這個流程要用到命令提示字元:

  1. 在伺服器視窗輸入 save-off,暫停把資料寫進世界資料夾。

  2. 輸入 save-all flush,把目前的資料全部寫進硬碟,看到 Saved the game 再繼續。少了這一步時,最近放的方塊不會進入備份。

  3. 在伺服器資料夾開啟命令提示字元,輸入下面的指令壓縮世界。tar 是 Windows 11 內建的工具,--exclude=session.lock 也不能省略,否則會留下 0 位元組的壓縮檔:

    1tar -a -cf world-20261106.zip --exclude=session.lock world
    
  4. 壓縮完成後,回到伺服器視窗輸入 save-on,恢復自動存檔。

伺服器視窗的輸出如下:

伺服器視窗依序執行 save-off、save-all flush 與 save-on,分別顯示 Automatic saving is now disabled、Saved the game 與 Automatic saving is now enabled

還原時要先照「還原世界」的步驟關閉伺服器並把 world 改名,再輸入 tar -xf world-20261106.zip 解壓縮,資料夾裡就會出現新的 world。

實測紀錄

測試伺服器沒有玩家連線。關閉伺服器複製資料夾的做法,我在原版 26.3 放一塊鑽石磚後備份,把它換成金磚,再照步驟還原,鑽石磚與種子碼都回到備份時的值,也用遊戲連線確認過畫面。不關閉伺服器的做法則在三個維度各放一塊方塊,也設定一個計分板的分數與一條遊戲規則,原版 26.3 與 Paper 26.3 的 build 238 都回到備份時的值。檔案總管的複製與改名是用相同效果的指令執行,畫面則是實際的資料夾。

總結

留一份能還原的世界,只要關閉伺服器並複製整個世界資料夾,還原時再把備份放回去。實測還原後,標記方塊與種子碼都回到備份時的狀態。

接著可以做什麼

下一篇Minecraft 找要塞、古城與生態域的指令:查到座標並傳送過去Games
Ted Liou

Ted Liou

現役軟體工程師,Unity、AI 技術開發經驗分享與諮詢。