RE:NODE

Provoz11 min čtení

Zálohy herního serveru do S3: kopie světů mimo server podle plánu

Kopíruj herní světy a savy každou noc do úložiště S3 pomocí rclone nebo restic: co kopírovat, jak získat čisté uložení, historie, mazání starých záloh a obnova.

2 čtenáři

Spolehlivý způsob, jak dostat svět herního serveru každou noc do úložiště S3, je malá úloha na stroji, který ovládáš: stáhne svět přes SFTP a nahraje ho do bucketu, načasovaná pár minut poté, co serveru řekneš, aby uložil. rclone zvládne obě poloviny jedním příkazem, protože nativně mluví SFTP i S3; restic přidá šifrování a deduplikaci, pokud chceš měsíce historie na malém místě. Zálohy přímo z panelu zůstávají tvou první linií - dělají se rychle a obnovují jedním tlačítkem - a kopie v S3 je ta, která přežije věci, které zálohy z panelu nepřežijí: smazaný server, chybu, která byla zazálohovaná přes dobrou kopii, nebo účet, ke kterému už nemáš přístup. Tento článek tu úlohu staví od začátku do konce: co kopírovat, jak získat čistou kopii, jak držet historii bez verzování, jak mazat staré zálohy a jak dokázat, že se dají obnovit.

Proč druhá kopie a před čím chrání#

Zálohy z panelu a kopie v S3 selhávají různými způsoby, což je celý důvod mít obojí.

RizikoZáloha z paneluKopie v úložišti S3Kopie doma
Griefing, špatný plugin, poškozené uloženíAnoAnoAno
Sloty záloh přerotovaly dobrou kopiiJen když je zamčenáAno, s delším uchovánímAno
Server smazán (zálohy zmizí s ním)NeAnoAno
Ztráta celé lokalityZáležíNe, pokud je na stejné lokalitěAno
Ztratíš přístup k hostingovému účtuNeJen pokud je to samostatný účetAno

Na RE:NODE zahrnují herní tarify sloty pro zálohy, které se ukládají mimo stroj, který chrání, lze je zamknout proti rotaci a obnovují se tlačítkem - ale smazání serveru smaže i jeho zálohy, i ty zamčené. Kopie v bucketu to přežije. Buď ale upřímný i k druhému řádku: S3 úložiště RE:NODE drží jednu kopii tvých dat na NVMe na jedné lokalitě, v Německu, na stejném místě jako herní servery. Chrání před smazáním a chybami, ne před ztrátou lokality. U světa, o který by ses nechtěl připravit, záleží i na třetím sloupci a stejná úloha s rclone může kopii uložit na tvůj vlastní disk. Úvahu o pravidle 3-2-1 plně rozebírají zálohy, které opravdu obnovíš a dimenzování úložiště S3 a pravidlo 3-2-1 ji aplikuje na buckety.

Podoba nastavení#

Herní server v panelu je kontejner, který spouští hru, ne univerzální stroj: dostaneš konzoli, správce souborů, SFTP a plánovač, který spouští příkazy konzole, zálohy a akce napájení - ne libovolné shellové skripty. Kopírovací úloha proto běží jinde a sahá dovnitř přes SFTP.

příkaz savečtení přes SFTP ve 04:00nahrání do S3volitelněPlán v panelusave ve 03:55Záložní úloharclone na VDS nebo PCHerní serversoubory světaBucket S3game-backupsLokální diskvolitelná třetí kopie
Noční stažení z herního serveru do bucketu

Stahovač může být cokoli, co běží podle časovače: Linuxový VDS, domácí server nebo Raspberry Pi, nebo Windows PC, které je v noci zapnuté. Potřebuje rclone, SFTP údaje herního serveru a klíče k bucketu. Nikdy nepotřebuje spouštět hru ani držet soubory mezi běhy, pokud nezvolíš restic, který drží malou cache.

Pokud hra běží na VDS nebo na tvém vlastním stroji, přeskoč polovinu se SFTP: úloha běží na stejném stroji a čte složku se světem přímo.

Co kopírovat#

Kopíruj stav a konfiguraci; vynech vše, co jde stáhnout znovu. Složka se světem má obvykle megabajty až pár gigabajtů, zatímco herní soubory kolem ní jsou často desítky gigabajtů, které SteamCMD znovu nainstaluje za pár minut.

HraKopírovatVynechat
Minecraft (Paper)world*/, plugins/, server.properties, seznamy *.jsoncache/, libraries/, versions/, jar serveru
Valheimsložku worlds_local/ ve složce uložení, tři soubory se seznamyinstalaci hry
PalworldPal/Saved/všechno ostatní
Project ZomboidZomboid/Saves/, Zomboid/db/, Zomboid/Server/instalaci hry, Zomboid/Logs/
Terrariasoubory .wld, serverconfig.txt, tshock/binárky serveru
Factoriosaves/, data/server-settings.json, mods/instalaci hry

Tyto cesty se mění, pokud je server spuštěn s vlastním adresářem pro uložení, takže je porovnej se svým startovacím řádkem. Strategie zálohování herního serveru má delší seznam, včetně her, kde zjevná složka není celý příběh - klasikou je databáze hráčů v Project Zomboid.

Svůj výběr zapiš jako filtrovací soubor rclone. Slouží zároveň jako dokumentace toho, co záloha skutečně obsahuje:

minecraft.filter
+ /world/**+ /world_nether/**+ /world_the_end/**+ /plugins/**+ /server.properties+ /*.json- /plugins/*.jar.old- /plugins/**/logs/**- *

Pravidla se čtou shora dolů, vyhrává první shoda a závěrečné - * vyloučí všechno, co není uvedeno. Ponechání jarů pluginů v kopii je záměrné: svět obnovený vedle novější verze pluginu je častý způsob, jak ho rozbít, a přesný jar, který jsi provozoval, nemusí jít později stáhnout.

Nastavení vzdálených cílů rclone#

Nainstaluj rclone na stahovač (sudo apt install rclone bývá zastaralé; instalační skript nebo binárka z rclone.org dá aktuální verzi) a pak definuj dva cíle (remotes) - jeden pro SFTP herního serveru, jeden pro úložiště.

~/.config/rclone/rclone.conf
[mc]type = sftphost = sftp.example-node.netport = 2022user = yourname.a1b2c3d4pass = <output of: rclone obscure 'your-sftp-password'>[store]type = s3provider = Otheraccess_key_id = AKIA...secret_access_key = ...endpoint = https://s3.example.comregion = us-east-1force_path_style = true

Hostitele SFTP, port a uživatelské jméno vezmi přesně tak, jak je panel ukazuje pro daný server - v panelech postavených na Pterodactylu nese uživatelské jméno příponu serveru a port obvykle není 22. Pole pass musí obsahovat výstup rclone obscure, ne heslo v čitelné podobě. rclone obscure je vratné kódování, ne šifrování, takže samotný soubor chraň pomocí chmod 600. Odkud údaje pocházejí, vysvětluje SFTP a správce souborů.

U cíle pro úložiště je provider = Other obecné nastavení kompatibilní s S3 a force_path_style = true je u rclone už výchozí. Endpoint je HTTPS hostname, který jsi namířil na proxy slot tarifu úložiště; funguje i holý port s prostým HTTP, ale pak tvůj svět putuje nešifrovaně. Než uděláš cokoli dalšího, otestuj oba cíle:

bash
$ rclone lsd mc:/$ rclone ls mc:/ --filter-from minecraft.filter | head$ rclone lsd store:$ rclone mkdir store:game-backups

Druhý řádek je ten důležitý: vypíše přesně ty soubory, které záloha vezme. Pokud složka se světem v tom výpisu není, nic dalšího už nezáleží. Cíle, přepínače a limity šířky pásma popisuje podrobněji rclone s úložištěm S3.

Čistá kopie: nejdřív ulož#

Většina her drží svět v paměti a zapisuje ho podle časovače. Zkopíruj soubory uprostřed zápisu a dostaneš zálohu, která vypadá úplná a nenačte se. Řešením je říct hře, aby krátce před začátkem kopírování uložila, pomocí plánovače v panelu.

Na RE:NODE záložka Schedules spouští uspořádané úlohy se zpožděním podle výrazu cron. Pro Minecraft by noční plán ve 03:55 vypadal takto:

Plán: uložení před zálohou, 55 3 * * *
Task 1  command  save-offTask 2  command  save-all flush       (delay 5 s)Task 3  command  save-on              (delay 600 s)

save-off zastaví autosavy, aby hra nezačala uprostřed kopírování přepisovat region soubory, save-all flush zapíše všechno na disk a počká na to a save-on znovu zapne autosave o deset minut později, až stahovač ve 04:00 skončí. U světa, který se zkopíruje za minutu, je deset minut štědrých; u světa o několika gigabajtech změř jeden běh a mezeru rozšiř. Jiné hry mají vlastní příkaz pro uložení - save v Project Zomboid a Terrarii, saveworld ve 7 Days to Die, /server-save ve Factoriu - a některé, jako Valheim a DayZ, žádný příkaz konzole serveru nemají a nejbezpečnější je kopírovat je z naplánované zálohy v panelu nebo po čistém restartu. Plánovač popisují naplánované úlohy, které stojí za to mít a výrazy cron vysvětlené.

Hodiny stahovače a plán v panelu se musí shodovat v časovém pásmu. Zapiš obojí v UTC, nebo zjisti, co který předpokládá, než se spolehneš na pětiminutovou mezeru.

Historie bez verzování#

Jediný rclone sync drží bucket shodný se serverem - což znamená, že když je svět v 21:00 zgriefovaný, synchronizace ve 04:00 věrně zkopíruje zgriefovaný svět přes ten dobrý. Záloha potřebuje historii. Bez verzování bucketu, o které by ses mohl opřít, jsou tři způsoby, jak ji získat.

Datované plné kopie. Každá noc jde do vlastního prefixu. Jednoduché, zřejmé při obnově a stojí velikost celého světa za každý den.

bash
$ rclone copy mc:/ store:game-backups/mc/daily/$(date -u +%F) \    --filter-from minecraft.filter --transfers 4 --log-file /var/log/mc-backup.log

Sync se záložním adresářem. Bucket drží jednu aktuální kopii a každý soubor, který by sync přepsal nebo smazal, se nejdřív přesune do datované složky. Historie stojí jen soubory, které se změnily, což jsou u světa Minecraftu region soubory, které hráči skutečně navštívili.

bash
$ rclone sync mc:/ store:game-backups/mc/current \    --backup-dir store:game-backups/mc/changed/$(date -u +%F) \    --filter-from minecraft.filter

Obnova minulého dne tímto způsobem znamená vzít current a položit na něj datované složky zpět, od nejnovější až po den, který chceš - jde to, ale pod tlakem je to zdlouhavé.

restic. Stáhni soubory pomocí rclone do lokální přípravné složky a pak nech restic pořídit snapshot do bucketu. restic deduplikuje na úrovni chunků a všechno šifruje, takže třicet denních snapshotů světa, který se denně trochu změní, stojí jen o málo víc než jeden. Obnova libovolného snapshotu je jeden příkaz. Je to nejlepší možnost, pokud můžeš stahovači věnovat trochu lokálního disku.

bash
$ rclone sync mc:/ /srv/stage/mc --filter-from minecraft.filter$ restic -r s3:https://s3.example.com/game-backups/restic backup /srv/stage/mc --tag mc

restic čte AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY a RESTIC_PASSWORD (nebo RESTIC_PASSWORD_FILE) z prostředí. Ztratíš-li heslo k restic, repozitář je nečitelný - záměrně. Inicializaci repozitáře a zbytek popisují zálohy do S3 pomocí restic.

Uchovávání a úklid#

Úložiště bez pravidel životního cyklu samo nic nemaže, takže uchovávání je součástí tvého skriptu.

Zřejmý příkaz je ten špatný. rclone delete --min-age 14d filtruje podle času změny každého objektu a rclone při nahrávání zachovává čas změny zdrojového souboru (ukládá ho do metadat objektu). Konfigurační soubor, na který nikdo měsíc nesáhl, dorazí do dnešní datované složky už „měsíc starý“ a --min-age 14d ho smaže v okamžiku, kdy úloha skončí. Tvoje nejnovější záloha tiše přijde o každý soubor, který se nedávno neměnil - přesně ty soubory, které by tě nenapadlo kontrolovat.

Místo toho mazej celé datované prefixy podle jejich názvu. Název složky je datum pořízení kopie, což je to, co myslíš stářím:

bash
CUTOFF=$(date -u -d '14 days ago' +%F)rclone lsf --dirs-only store:game-backups/mc/daily | while read -r d; do  d=${d%/}  if [[ "$d" < "$CUTOFF" ]]; then    rclone purge "store:game-backups/mc/daily/$d"  fidone

Data ve formátu ISO (2026-10-08) se jako text řadí stejně jako v čase, a proto prosté porovnání řetězců funguje. date -d je GNU date, standardní na Linuxu; na macOS použij date -u -v-14d +%F. Totéž platí pro uspořádání s --backup-dir: datované složky changed/ mazej podle názvu, nikdy ne pomocí --min-age. U restic je uchovávání politika:

bash
$ restic -r s3:https://s3.example.com/game-backups/restic forget \    --tag mc --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune

Rozumná politika pro většinu herních serverů je týden denních záloh, měsíc týdenních a kopie před každým větším updatem držená napořád. Podle toho dimenzuj bucket: Minecraft svět o 2 GB s datovanými plnými kopiemi po čtrnáct dní potřebuje asi 28 GB; stejná historie v restic je obvykle malý násobek jednoho světa. S částí o světě pomůže kolik úložiště potřebuje herní server.

Naplánování úlohy#

Dej celou věc do jednoho skriptu, aby byl plán jeden řádek:

/usr/local/bin/mc-backup.sh
#!/usr/bin/env bashset -euo pipefailDAY=$(date -u +%F)CUTOFF=$(date -u -d '14 days ago' +%F)rclone copy mc:/ "store:game-backups/mc/daily/$DAY" \  --filter-from /etc/rclone/minecraft.filter --log-file /var/log/mc-backup.logrclone lsf --dirs-only store:game-backups/mc/daily | while read -r d; do  d=${d%/}  if [[ "$d" < "$CUTOFF" ]]; then rclone purge "store:game-backups/mc/daily/$d"; fidonecurl -fsS -m 10 https://hc.example.com/ping/mc-backup > /dev/null || true

Pak crontab -e a 0 4 * * * /usr/local/bin/mc-backup.sh. set -euo pipefail zastaví skript u první chyby, takže nepovedená kopie nikdy nepokračuje mazáním starých záloh. Poslední řádek pingne monitor typu dead-man's-switch (Healthchecks.io a podobné služby), který upozorní, když ping nedorazí - jediný spolehlivý způsob, jak si všimnout záložní úlohy, která potichu přestala běžet. Na Windows stahovači spouští stejné příkazy rclone Plánovač úloh ze souboru .bat; rclone se tam chová stejně.

Obnova z bucketu#

Záloha, kterou nikdo neobnovil, je hypotéza. Jednu obnov dřív, než ji budeš potřebovat:

  1. Vyber den a stáhni ho na svůj počítač: rclone copy store:game-backups/mc/daily/2026-10-07 ./restore-test.
  2. Otevři svět v lokální kopii hry nebo na testovacím serveru a projdi se po hlavní základně.
  3. Při skutečné obnově zastav herní server, poškozenou složku se světem odlož stranou, nahraj obnovenou přes rclone nebo správce souborů a server spusť.

Poslat obnovu rovnou zpět přes SFTP funguje stejně, jen opačným směrem - rclone copy store:game-backups/mc/daily/2026-10-07 mc:/ - ale jen se zastaveným serverem, jinak další uložení hry přepíše to, co jsi právě vrátil. Z toho udělá čtvrtletní návyk vyzkoušej obnovu dřív, než ji budeš potřebovat.

FAQ#

Umí herní server nahrávat do S3 sám?

Ne z herního serveru v panelu: jeho plánovač spouští příkazy konzole, zálohy a akce napájení, ne shellové skripty. Některé hry mají pluginy, které nahrávají zálohy do S3, a ty fungují, pokud pluginu důvěřuješ. Jinak stahuj zvenku pomocí rclone, jak je uvedeno výše.

Jak často mám kopírovat svět mimo server?

Denně je správně pro většinu serverů, načasované na nejklidnější hodinu. Přidej ruční kopii před každým updatem hry a každou větší změnou pluginů. Hodinové kopie velkého světa stojí víc, než chrání.

Nestačí záloha z panelu?

Na většinu chyb stačí a je to nejrychlejší obnova. Nepřežije smazání serveru a sloty se rotují. Kopie v S3 existuje pro případy, které zálohy z panelu nepokryjí.

Mám zálohy herních světů šifrovat?

restic šifruje všechno ve výchozím stavu. S rclone můžeš cíl pro úložiště obalit cílem typu crypt. U herního světa je hlavním důvodem to, že konfigurace často obsahují hesla k RCON a k databázi.

Zpomalí kopírování světa server?

Čtení několika stovek megabajtů přes SFTP je lehké, ale velký svět na vytíženém serveru může způsobit krátké zadrhnutí. Spouštěj úlohu v nejklidnější hodinu a pokud si hráči všimnou, použij v rclone --bwlimit.


Komentáře

Zcela anonymně: žádný účet, žádný e-mail, žádné cookie. Ukládáme jen jméno, které napíšeš, text a čas - nic dalšího. Počet odkazů je omezený a značkování se nevykresluje.

0/2000