Рабочий бэкап Terraria должен загружаться как нужный мир, а не просто присутствовать в списке файлов архива. Остановите запись, сохраните мир вместе с конфигурацией, вынесите архив за пределы VPS и проверьте восстановление в отдельном каталоге.
Инструкция относится к vanilla Terraria для PC на Ubuntu 24.04. Используется установка с tmux: пользователь terraria, домашний каталог /srv/terraria, миры в /srv/terraria/worlds, пример релиза /opt/terraria-release/1458/Linux. Если мир называется иначе, замените Coop.wld. Данные tModLoader, состояние TShock и сохранения мобильных устройств или консолей сюда не входят.
Определите состав восстанавливаемой копии#
Сохраняйте весь настроенный каталог миров, включая имеющиеся резервные варианты, и /srv/terraria/serverconfig.txt. Запишите фактическую команду запуска и точный релиз. Если banlist или дополнительная конфигурация лежат вне этих путей, отдельно экспортируйте именно используемый файл. Стандартный banlist может разрешаться относительно рабочего каталога бинарника.
В официальном серверном архиве описаны выбор мира и число сохраняемых резервных вариантов. Копии рядом с активным миром находятся на том же диске. Они помогают выбрать более раннее состояние, но не защищают от потери самого VPS.
Личные инвентари принадлежат отдельным сохранениям персонажей. Игрокам нужно сохранять их самостоятельно. При откате мира персонажи могут остаться новее сундуков и построек: заранее согласуйте точку восстановления, прежде чем группа снова войдёт в игру.
Сохраните мир, остановите запись и создайте архив#
Подключитесь к существующей консоли:
sudo -iu terraria tmux attach-session -t terraria
Выполните save, дождитесь завершения, затем exit. Убедитесь, что процесс вернулся в оболочку, а автоматический запуск отключён на время копирования. Произвольное завершение процесса не подтверждает сохранение последних изменений.
В оболочке пользователя terraria выполните:
(
set -eu
umask 077
cd /srv/terraria
test -d worlds
test ! -L worlds
test -f serverconfig.txt
test ! -L serverconfig.txt
test -z "$(find worlds -type l -print -quit)"
terraria_backup_dir=$(mktemp -d /srv/terraria/backups/snapshot.XXXXXX)
tar -czf "$terraria_backup_dir/terraria.tar.gz" worlds serverconfig.txt
sha256sum "$terraria_backup_dir/terraria.tar.gz"
tar -tzf "$terraria_backup_dir/terraria.tar.gz"
)
Каталог backups уже должен существовать и принадлежать terraria, как в базовой инструкции. Сохраните выведенные полный путь архива и контрольную сумму. Проверка символьных ссылок не даёт незаметно принять внешний файл за содержимое этого каталога миров. Если она не проходит, сначала разберите реальное расположение данных.
Вынесите проверенную копию за пределы VPS#
Используйте закрытый экспорт из инструкции установки, чтобы подготовить доступную только вашему SSH-пользователю копию, затем скачайте её на компьютер. Сравните SHA-256 с исходным архивом. Рядом сохраните сумму и название релиза. В конфигурации находится пароль сервера, поэтому архив должен оставаться приватным.
Подберите глубину хранения под допустимую потерю прогресса: несколько разных точек восстановления и отдельная копия перед обновлением. Автоматическое задание должно согласовывать сохранение, остановку и возврат сервера. Один tar в cron не повторяет эту процедуру. Ошибка внешней загрузки не должна удалять последнюю рабочую удалённую копию.
Распакуйте пробную копию без прав root#
Используйте собственный проверенный архив, доступный пользователю terraria. Введите точный путь по запросу. Следующий блок выполняется от terraria: он отвергает ссылки, специальные файлы, неожиданные верхние пути и повторяющиеся записи. Действующий мир не затрагивается:
До проверки выберите сохранённую программу сервера и PC-клиент, совместимые с версией снимка. Ниже показана 1.4.5.8: замените /opt/terraria-release/1458/Linux, если проверенная копия требует другого выпуска. Не открывайте новый мир старой программой и не принимайте отказ из-за версии за повреждение файла.
(
set -eu
umask 077
read -r -p "Verified archive path: " terraria_archive
test -f "$terraria_archive"
test ! -L "$terraria_archive"
terraria_restore=$(mktemp -d /srv/terraria/restore-check.XXXXXX)
python3 - "$terraria_archive" "$terraria_restore" <<'PY'
import pathlib
import sys
import tarfile
with tarfile.open(sys.argv[1], "r:gz") as archive:
seen = set()
for member in archive.getmembers():
name = pathlib.PurePosixPath(member.name)
if name.is_absolute() or ".." in name.parts or not name.parts:
raise SystemExit("Unsafe archive path")
if not (member.isdir() or member.isfile()) or str(name) in seen:
raise SystemExit("Unsupported or duplicate archive member")
if name.parts[0] not in {"worlds", "serverconfig.txt"}:
raise SystemExit("Unexpected archive member")
if name.parts[0] == "serverconfig.txt" and not (
len(name.parts) == 1 and member.isfile()
):
raise SystemExit("Unexpected configuration member")
seen.add(str(name))
archive.extractall(sys.argv[2], filter="data")
PY
test -s "$terraria_restore/worlds/Coop.wld"
printf 'world=%s/worlds/Coop.wld\nworldpath=%s/worlds\nbanlist=%s/banlist.txt\nport=17777\nupnp=0\n' \
"$terraria_restore" "$terraria_restore" "$terraria_restore" > "$terraria_restore/restore.ini"
printf 'Restore directory: %s\n' "$terraria_restore"
cd /opt/terraria-release/1458/Linux
./TerrariaServer -config "$terraria_restore/restore.ini" -ip 127.0.0.1
)
Используется фильтр распаковки Python 3.12 из Ubuntu 24.04. Пробная конфигурация явно выбирает копию мира, не содержит autocreate и слушает другой порт только на loopback. Архивная производственная конфигурация остаётся неизменной для просмотра. До запуска проверьте отсутствие слушателя на выбранном тестовом порте с помощью ss -ltn; пустой результат не резервирует порт, поэтому при конфликте во время запуска снова выберите другой. Не продолжайте проверку через уже работающий неизвестный экземпляр. Если 17777 занят, выберите свободный порт в конфигурации и туннеле, не останавливая чужой процесс.
Проверьте восстановление перед переключением игроков#
При необходимости держите пробный экземпляр в tmux пользователя terraria. Из отдельного терминала своего компьютера создайте туннель:
ssh -N -L 17777:127.0.0.1:17777 YOUR_SSH_USER@YOUR_VPS_IP
Совпадающий PC-клиент подключается к 127.0.0.1, порт 17777. Проверьте недавнюю постройку и содержимое мира, сделайте временное изменение, сохраните, завершите процесс и снова загрузите ту же пробную копию. Такая последовательность проверяет и пригодность мира, и возможность записи.
Для настоящего восстановления остановите оба экземпляра и отдельно сохраните повреждённый или текущий мир. Перенесите проверенный кандидат под новым производственным именем с владельцем terraria:terraria, измените world=, сохраните необходимые параметры пароля и исключите autocreate. Используйте явный выбор из инструкции переноса. Не заменяйте активный файл, пока его пишет хотя бы один процесс.
Если кандидатом служит .bak, скопируйте его под новым именем .wld и выполните тот же изолированный тест. В историческом обсуждении ошибки загрузки игрок не смог восстановить мир из соседнего бэкапа. Сохраняйте оригиналы: смена расширения не исправляет повреждённые байты. Если не загружается ни одна сохранённая версия, остановите дальнейшие попытки записи и отдельно сохраните весь набор для разбора.




