updates for backup and restore 4-18-26

This commit is contained in:
jester 2026-04-18 18:12:32 +00:00
parent 312e350a1c
commit 2729226342
6 changed files with 395 additions and 5 deletions

View File

@ -81,7 +81,18 @@ func createCheckpoint(cfg *state.Config) (Manifest, error) {
}) })
} }
func create(cfg *state.Config, opts createOptions) (Manifest, error) { func create(cfg *state.Config, opts createOptions) (manifest Manifest, err error) {
started := time.Now()
backupLogf(cfg, "action=backup_create status=begin requested_type=%s reason=%s prune=%t", opts.backupType, opts.reason, opts.prune)
defer func() {
if err != nil {
backupLogf(cfg, "action=backup_create status=failed elapsed_ms=%d err=%v", time.Since(started).Milliseconds(), err)
return
}
backupLogf(cfg, "action=backup_create status=complete id=%s archive=%s paths=%d files=%d bytes=%d elapsed_ms=%d",
manifest.ID, manifest.Archive, len(manifest.Paths), manifest.FileCount, manifest.TotalBytes, time.Since(started).Milliseconds())
}()
if err := requireMinecraft(cfg); err != nil { if err := requireMinecraft(cfg); err != nil {
return Manifest{}, err return Manifest{}, err
} }
@ -97,6 +108,7 @@ func create(cfg *state.Config, opts createOptions) (Manifest, error) {
archivePath := filepath.Join(rootDir, archiveName) archivePath := filepath.Join(rootDir, archiveName)
serverRoot := serverDir(*cfg) serverRoot := serverDir(*cfg)
paths := defaultPaths(cfg, serverRoot) paths := defaultPaths(cfg, serverRoot)
backupLogf(cfg, "action=backup_create step=metadata id=%s archive=%s root=%s server_root=%s paths=%q", id, archiveName, rootDir, serverRoot, paths)
backupType := strings.TrimSpace(opts.backupType) backupType := strings.TrimSpace(opts.backupType)
if backupType == "" { if backupType == "" {
@ -107,19 +119,24 @@ func create(cfg *state.Config, opts createOptions) (Manifest, error) {
saveOff := false saveOff := false
if running { if running {
state.SetOperationMessage("flushing minecraft saves") state.SetOperationMessage("flushing minecraft saves")
backupLogf(cfg, "action=backup_create step=save_off status=begin id=%s", id)
if err := runSaveOff(); err != nil { if err := runSaveOff(); err != nil {
return Manifest{}, fmt.Errorf("disable minecraft saves: %w", err) return Manifest{}, fmt.Errorf("disable minecraft saves: %w", err)
} }
backupLogf(cfg, "action=backup_create step=save_off status=complete id=%s", id)
saveOff = true saveOff = true
defer func() { defer func() {
if saveOff { if saveOff {
backupLogf(cfg, "action=backup_create step=save_on status=deferred id=%s", id)
_ = runSaveOn() _ = runSaveOn()
} }
}() }()
} else {
backupLogf(cfg, "action=backup_create step=save_off status=skipped id=%s reason=server_not_running", id)
} }
state.SetOperationMessage("creating backup archive") state.SetOperationMessage("creating backup archive")
manifest := Manifest{ manifest = Manifest{
ID: id, ID: id,
CreatedAtUTC: time.Now().UTC().Format(time.RFC3339), CreatedAtUTC: time.Now().UTC().Format(time.RFC3339),
Type: backupType, Type: backupType,
@ -132,27 +149,46 @@ func create(cfg *state.Config, opts createOptions) (Manifest, error) {
Archive: archiveName, Archive: archiveName,
Paths: paths, Paths: paths,
} }
backupLogf(cfg, "action=backup_create step=archive_write status=begin id=%s archive_path=%s", id, archivePath)
if err := writeArchive(serverRoot, archivePath, &manifest); err != nil { if err := writeArchive(serverRoot, archivePath, &manifest); err != nil {
return Manifest{}, err return Manifest{}, err
} }
backupLogf(cfg, "action=backup_create step=archive_write status=complete id=%s files=%d bytes=%d", id, manifest.FileCount, manifest.TotalBytes)
if saveOff { if saveOff {
backupLogf(cfg, "action=backup_create step=save_on status=begin id=%s", id)
if err := runSaveOn(); err != nil { if err := runSaveOn(); err != nil {
return Manifest{}, fmt.Errorf("enable minecraft saves: %w", err) return Manifest{}, fmt.Errorf("enable minecraft saves: %w", err)
} }
saveOff = false saveOff = false
backupLogf(cfg, "action=backup_create step=save_on status=complete id=%s", id)
} }
backupLogf(cfg, "action=backup_create step=manifest_sidecar status=begin id=%s", id)
if err := writeManifestSidecar(manifest); err != nil { if err := writeManifestSidecar(manifest); err != nil {
return Manifest{}, err return Manifest{}, err
} }
backupLogf(cfg, "action=backup_create step=manifest_sidecar status=complete id=%s", id)
if opts.prune { if opts.prune {
backupLogf(cfg, "action=backup_create step=prune status=begin id=%s max_count=%d", id, defaultMaxCount)
if err := prune(defaultMaxCount); err != nil { if err := prune(defaultMaxCount); err != nil {
return Manifest{}, err return Manifest{}, err
} }
backupLogf(cfg, "action=backup_create step=prune status=complete id=%s", id)
} }
return manifest, nil return manifest, nil
} }
func Restore(cfg *state.Config, id string) (RestoreResult, error) { func Restore(cfg *state.Config, id string) (result RestoreResult, err error) {
started := time.Now()
backupLogf(cfg, "action=backup_restore status=begin requested_id=%s", strings.TrimSpace(id))
defer func() {
if err != nil {
backupLogf(cfg, "action=backup_restore status=failed requested_id=%s elapsed_ms=%d err=%v", strings.TrimSpace(id), time.Since(started).Milliseconds(), err)
return
}
backupLogf(cfg, "action=backup_restore status=complete backup_id=%s checkpoint_id=%s elapsed_ms=%d",
result.Backup.ID, result.Checkpoint.ID, time.Since(started).Milliseconds())
}()
if err := requireMinecraft(cfg); err != nil { if err := requireMinecraft(cfg); err != nil {
return RestoreResult{}, err return RestoreResult{}, err
} }
@ -166,35 +202,48 @@ func Restore(cfg *state.Config, id string) (RestoreResult, error) {
return RestoreResult{}, err return RestoreResult{}, err
} }
archivePath := filepath.Join(rootDir, manifest.Archive) archivePath := filepath.Join(rootDir, manifest.Archive)
backupLogf(cfg, "action=backup_restore step=manifest status=loaded id=%s archive=%s paths=%q files=%d bytes=%d", id, manifest.Archive, manifest.Paths, manifest.FileCount, manifest.TotalBytes)
if _, err := os.Stat(archivePath); err != nil { if _, err := os.Stat(archivePath); err != nil {
return RestoreResult{}, err return RestoreResult{}, err
} }
backupLogf(cfg, "action=backup_restore step=archive_check status=ok id=%s archive_path=%s", id, archivePath)
state.SetOperationMessage("creating pre-restore checkpoint") state.SetOperationMessage("creating pre-restore checkpoint")
backupLogf(cfg, "action=backup_restore step=checkpoint status=begin target_id=%s", id)
checkpoint, err := createCheckpoint(cfg) checkpoint, err := createCheckpoint(cfg)
if err != nil { if err != nil {
return RestoreResult{}, fmt.Errorf("create pre-restore checkpoint: %w", err) return RestoreResult{}, fmt.Errorf("create pre-restore checkpoint: %w", err)
} }
backupLogf(cfg, "action=backup_restore step=checkpoint status=complete target_id=%s checkpoint_id=%s archive=%s", id, checkpoint.ID, checkpoint.Archive)
if _, running := getServerPID(); running { if _, running := getServerPID(); running {
state.SetOperationMessage("stopping server before restore") state.SetOperationMessage("stopping server before restore")
backupLogf(cfg, "action=backup_restore step=stop_server status=begin id=%s timeout=%s", id, 30*time.Second)
if err := stopServerAndWait(30 * time.Second); err != nil { if err := stopServerAndWait(30 * time.Second); err != nil {
return RestoreResult{}, err return RestoreResult{}, err
} }
backupLogf(cfg, "action=backup_restore step=stop_server status=complete id=%s", id)
} else {
backupLogf(cfg, "action=backup_restore step=stop_server status=skipped id=%s reason=server_not_running", id)
} }
state.SetOperationMessage("restoring backup archive") state.SetOperationMessage("restoring backup archive")
backupLogf(cfg, "action=backup_restore step=archive_restore status=begin id=%s archive_path=%s", id, archivePath)
if err := restoreArchive(serverDir(*cfg), archivePath, manifest.Paths); err != nil { if err := restoreArchive(serverDir(*cfg), archivePath, manifest.Paths); err != nil {
return RestoreResult{}, err return RestoreResult{}, err
} }
backupLogf(cfg, "action=backup_restore step=archive_restore status=complete id=%s", id)
state.SetOperationMessage("starting server after restore") state.SetOperationMessage("starting server after restore")
state.SetState(state.StateStarting) state.SetState(state.StateStarting)
state.SetReadyState(false, "", "") state.SetReadyState(false, "", "")
backupLogf(cfg, "action=backup_restore step=start_server status=begin id=%s", id)
if err := startServerReady(cfg); err != nil { if err := startServerReady(cfg); err != nil {
return RestoreResult{}, err return RestoreResult{}, err
} }
return RestoreResult{Backup: manifest, Checkpoint: checkpoint}, nil backupLogf(cfg, "action=backup_restore step=start_server status=complete id=%s", id)
result = RestoreResult{Backup: manifest, Checkpoint: checkpoint}
return result, nil
} }
func List() ([]Manifest, error) { func List() ([]Manifest, error) {
@ -297,6 +346,7 @@ func defaultPaths(cfg *state.Config, serverRoot string) []string {
} }
func writeArchive(serverRoot, archivePath string, manifest *Manifest) error { func writeArchive(serverRoot, archivePath string, manifest *Manifest) error {
backupLogf(nil, "action=archive_write status=begin backup_id=%s archive_path=%s server_root=%s paths=%q", manifest.ID, archivePath, serverRoot, manifest.Paths)
file, err := os.Create(archivePath) file, err := os.Create(archivePath)
if err != nil { if err != nil {
return err return err
@ -309,9 +359,11 @@ func writeArchive(serverRoot, archivePath string, manifest *Manifest) error {
defer tw.Close() defer tw.Close()
for _, rel := range manifest.Paths { for _, rel := range manifest.Paths {
backupLogf(nil, "action=archive_write step=add_path status=begin backup_id=%s path=%s", manifest.ID, rel)
if err := addPath(tw, serverRoot, rel, manifest); err != nil { if err := addPath(tw, serverRoot, rel, manifest); err != nil {
return err return err
} }
backupLogf(nil, "action=archive_write step=add_path status=complete backup_id=%s path=%s files=%d bytes=%d", manifest.ID, rel, manifest.FileCount, manifest.TotalBytes)
} }
data, err := json.MarshalIndent(manifest, "", " ") data, err := json.MarshalIndent(manifest, "", " ")
@ -329,6 +381,9 @@ func writeArchive(serverRoot, archivePath string, manifest *Manifest) error {
return err return err
} }
_, err = tw.Write(data) _, err = tw.Write(data)
if err == nil {
backupLogf(nil, "action=archive_write status=complete backup_id=%s files=%d bytes=%d", manifest.ID, manifest.FileCount, manifest.TotalBytes)
}
return err return err
} }
@ -351,6 +406,7 @@ func addPath(tw *tar.Writer, serverRoot, rel string, manifest *Manifest) error {
} }
name = filepath.ToSlash(name) name = filepath.ToSlash(name)
if name == "." || strings.HasPrefix(name, ".zlh-shadow/") || name == ".zlh-shadow" { if name == "." || strings.HasPrefix(name, ".zlh-shadow/") || name == ".zlh-shadow" {
backupLogf(nil, "action=archive_write step=skip_internal backup_id=%s path=%s", manifest.ID, name)
return nil return nil
} }
@ -363,6 +419,7 @@ func addPath(tw *tar.Writer, serverRoot, rel string, manifest *Manifest) error {
return err return err
} }
if info.IsDir() { if info.IsDir() {
backupLogf(nil, "action=archive_write step=entry backup_id=%s type=dir path=%s", manifest.ID, name)
return nil return nil
} }
f, err := os.Open(path) f, err := os.Open(path)
@ -379,15 +436,18 @@ func addPath(tw *tar.Writer, serverRoot, rel string, manifest *Manifest) error {
} }
manifest.FileCount++ manifest.FileCount++
manifest.TotalBytes += n manifest.TotalBytes += n
backupLogf(nil, "action=archive_write step=entry backup_id=%s type=file path=%s bytes=%d total_files=%d total_bytes=%d", manifest.ID, name, n, manifest.FileCount, manifest.TotalBytes)
return nil return nil
}) })
} }
func restoreArchive(serverRoot, archivePath string, paths []string) error { func restoreArchive(serverRoot, archivePath string, paths []string) error {
backupLogf(nil, "action=archive_restore status=begin archive_path=%s server_root=%s paths=%q", archivePath, serverRoot, paths)
for _, rel := range paths { for _, rel := range paths {
if !safeRel(rel) { if !safeRel(rel) {
return fmt.Errorf("backup contains unsafe path: %s", rel) return fmt.Errorf("backup contains unsafe path: %s", rel)
} }
backupLogf(nil, "action=archive_restore step=remove_existing path=%s", rel)
if err := os.RemoveAll(filepath.Join(serverRoot, filepath.FromSlash(rel))); err != nil { if err := os.RemoveAll(filepath.Join(serverRoot, filepath.FromSlash(rel))); err != nil {
return err return err
} }
@ -414,6 +474,7 @@ func restoreArchive(serverRoot, archivePath string, paths []string) error {
return err return err
} }
if header.Name == manifestName { if header.Name == manifestName {
backupLogf(nil, "action=archive_restore step=skip_manifest path=%s", header.Name)
continue continue
} }
if !safeRel(header.Name) { if !safeRel(header.Name) {
@ -428,6 +489,7 @@ func restoreArchive(serverRoot, archivePath string, paths []string) error {
if err := os.MkdirAll(target, os.FileMode(header.Mode)&0o777); err != nil { if err := os.MkdirAll(target, os.FileMode(header.Mode)&0o777); err != nil {
return err return err
} }
backupLogf(nil, "action=archive_restore step=entry type=dir path=%s mode=%#o", header.Name, os.FileMode(header.Mode)&0o777)
case tar.TypeReg: case tar.TypeReg:
if err := os.MkdirAll(filepath.Dir(target), 0o755); err != nil { if err := os.MkdirAll(filepath.Dir(target), 0o755); err != nil {
return err return err
@ -443,6 +505,7 @@ func restoreArchive(serverRoot, archivePath string, paths []string) error {
if err := out.Close(); err != nil { if err := out.Close(); err != nil {
return err return err
} }
backupLogf(nil, "action=archive_restore step=entry type=file path=%s bytes=%d mode=%#o", header.Name, header.Size, os.FileMode(header.Mode)&0o777)
default: default:
return fmt.Errorf("unsupported archive entry type for %s", header.Name) return fmt.Errorf("unsupported archive entry type for %s", header.Name)
} }

View File

@ -170,9 +170,11 @@ func setupBackupTest(t *testing.T) (*state.Config, string) {
oldRunSaveOn := runSaveOn oldRunSaveOn := runSaveOn
oldStopServerAndWait := stopServerAndWait oldStopServerAndWait := stopServerAndWait
oldStartServerReady := startServerReady oldStartServerReady := startServerReady
oldBackupLogPath := backupLogPath
rootDir = t.TempDir() rootDir = t.TempDir()
serverRoot := t.TempDir() serverRoot := t.TempDir()
backupLogPath = filepath.Join(t.TempDir(), "backup_restore.log")
serverDir = func(state.Config) string { return serverRoot } serverDir = func(state.Config) string { return serverRoot }
getServerPID = func() (int, bool) { return 0, false } getServerPID = func() (int, bool) { return 0, false }
runSaveOff = func() error { return nil } runSaveOff = func() error { return nil }
@ -188,6 +190,7 @@ func setupBackupTest(t *testing.T) (*state.Config, string) {
runSaveOn = oldRunSaveOn runSaveOn = oldRunSaveOn
stopServerAndWait = oldStopServerAndWait stopServerAndWait = oldStopServerAndWait
startServerReady = oldStartServerReady startServerReady = oldStartServerReady
backupLogPath = oldBackupLogPath
}) })
return &state.Config{ return &state.Config{

44
internal/backup/log.go Normal file
View File

@ -0,0 +1,44 @@
package backup
import (
"fmt"
"os"
"path/filepath"
"strings"
"sync"
"time"
"zlh-agent/internal/state"
)
var (
backupLogMu sync.Mutex
backupLogPath = "/opt/zlh-agent/logs/backup_restore.log"
)
func backupLogf(cfg *state.Config, format string, args ...any) {
line := fmt.Sprintf(format, args...)
prefix := fmt.Sprintf("[%s]", time.Now().UTC().Format(time.RFC3339))
if cfg != nil {
prefix += fmt.Sprintf(" vmid=%d type=%s game=%s variant=%s version=%s",
cfg.VMID,
strings.TrimSpace(cfg.ContainerType),
strings.TrimSpace(cfg.Game),
strings.TrimSpace(cfg.Variant),
strings.TrimSpace(cfg.Version),
)
}
backupLogMu.Lock()
defer backupLogMu.Unlock()
if err := os.MkdirAll(filepath.Dir(backupLogPath), 0o755); err != nil {
return
}
f, err := os.OpenFile(backupLogPath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0o644)
if err != nil {
return
}
defer f.Close()
_, _ = f.WriteString(prefix + " " + line + "\n")
}

View File

@ -452,3 +452,11 @@
2026/04/18 13:52:39 [update] periodic checks enabled (mode=notify interval=30m0s) 2026/04/18 13:52:39 [update] periodic checks enabled (mode=notify interval=30m0s)
2026/04/18 13:52:39 [agent] listening on :18888 2026/04/18 13:52:39 [agent] listening on :18888
2026/04/18 13:52:52 [update] notify check failed status=error current=0.0.0-dev target= err=Get "http://10.60.0.251:8080/agents/manifest.json": dial tcp 10.60.0.251:8080: connect: no route to host 2026/04/18 13:52:52 [update] notify check failed status=error current=0.0.0-dev target= err=Get "http://10.60.0.251:8080/agents/manifest.json": dial tcp 10.60.0.251:8080: connect: no route to host
2026/04/18 14:22:55 [update] notify check failed status=error current=0.0.0-dev target= err=Get "http://10.60.0.251:8080/agents/manifest.json": dial tcp 10.60.0.251:8080: connect: no route to host
2026/04/18 14:52:55 [update] notify check failed status=error current=0.0.0-dev target= err=Get "http://10.60.0.251:8080/agents/manifest.json": dial tcp 10.60.0.251:8080: connect: no route to host
2026/04/18 15:22:55 [update] notify check failed status=error current=0.0.0-dev target= err=Get "http://10.60.0.251:8080/agents/manifest.json": dial tcp 10.60.0.251:8080: connect: no route to host
2026/04/18 15:52:55 [update] notify check failed status=error current=0.0.0-dev target= err=Get "http://10.60.0.251:8080/agents/manifest.json": dial tcp 10.60.0.251:8080: connect: no route to host
2026/04/18 16:22:55 [update] notify check failed status=error current=0.0.0-dev target= err=Get "http://10.60.0.251:8080/agents/manifest.json": dial tcp 10.60.0.251:8080: connect: no route to host
2026/04/18 16:52:55 [update] notify check failed status=error current=0.0.0-dev target= err=Get "http://10.60.0.251:8080/agents/manifest.json": dial tcp 10.60.0.251:8080: connect: no route to host
2026/04/18 17:22:55 [update] notify check failed status=error current=0.0.0-dev target= err=Get "http://10.60.0.251:8080/agents/manifest.json": dial tcp 10.60.0.251:8080: connect: no route to host
2026/04/18 17:52:55 [update] notify check failed status=error current=0.0.0-dev target= err=Get "http://10.60.0.251:8080/agents/manifest.json": dial tcp 10.60.0.251:8080: connect: no route to host

272
logs/backup_restore.log Normal file
View File

@ -0,0 +1,272 @@
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create status=begin requested_type=manual reason= prune=true
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=metadata id=20260418T163917Z archive=20260418T163917Z.tar.gz root=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore683458746/001 server_root=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore683458746/002 paths=["world"]
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=save_off status=skipped id=20260418T163917Z reason=server_not_running
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=archive_write status=begin id=20260418T163917Z archive_path=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore683458746/001/20260418T163917Z.tar.gz
[2026-04-18T16:39:17Z] action=archive_write status=begin backup_id=20260418T163917Z archive_path=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore683458746/001/20260418T163917Z.tar.gz server_root=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore683458746/002 paths=["world"]
[2026-04-18T16:39:17Z] action=archive_write step=add_path status=begin backup_id=20260418T163917Z path=world
[2026-04-18T16:39:17Z] action=archive_write step=entry backup_id=20260418T163917Z type=dir path=world
[2026-04-18T16:39:17Z] action=archive_write step=entry backup_id=20260418T163917Z type=file path=world/level.dat bytes=6 total_files=1 total_bytes=6
[2026-04-18T16:39:17Z] action=archive_write step=add_path status=complete backup_id=20260418T163917Z path=world files=1 bytes=6
[2026-04-18T16:39:17Z] action=archive_write status=complete backup_id=20260418T163917Z files=1 bytes=6
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=archive_write status=complete id=20260418T163917Z files=1 bytes=6
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=manifest_sidecar status=begin id=20260418T163917Z
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=manifest_sidecar status=complete id=20260418T163917Z
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=prune status=begin id=20260418T163917Z max_count=10
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=prune status=complete id=20260418T163917Z
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create status=complete id=20260418T163917Z archive=20260418T163917Z.tar.gz paths=1 files=1 bytes=6 elapsed_ms=1
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore status=begin requested_id=20260418T163917Z
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=manifest status=loaded id=20260418T163917Z archive=20260418T163917Z.tar.gz paths=["world"] files=1 bytes=6
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=archive_check status=ok id=20260418T163917Z archive_path=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore683458746/001/20260418T163917Z.tar.gz
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=checkpoint status=begin target_id=20260418T163917Z
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create status=begin requested_type=checkpoint reason=pre_restore prune=false
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=metadata id=20260418T163917Z_001 archive=20260418T163917Z_001.tar.gz root=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore683458746/001 server_root=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore683458746/002 paths=["world"]
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=save_off status=skipped id=20260418T163917Z_001 reason=server_not_running
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=archive_write status=begin id=20260418T163917Z_001 archive_path=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore683458746/001/20260418T163917Z_001.tar.gz
[2026-04-18T16:39:17Z] action=archive_write status=begin backup_id=20260418T163917Z_001 archive_path=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore683458746/001/20260418T163917Z_001.tar.gz server_root=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore683458746/002 paths=["world"]
[2026-04-18T16:39:17Z] action=archive_write step=add_path status=begin backup_id=20260418T163917Z_001 path=world
[2026-04-18T16:39:17Z] action=archive_write step=entry backup_id=20260418T163917Z_001 type=dir path=world
[2026-04-18T16:39:17Z] action=archive_write step=entry backup_id=20260418T163917Z_001 type=file path=world/level.dat bytes=4 total_files=1 total_bytes=4
[2026-04-18T16:39:17Z] action=archive_write step=add_path status=complete backup_id=20260418T163917Z_001 path=world files=1 bytes=4
[2026-04-18T16:39:17Z] action=archive_write status=complete backup_id=20260418T163917Z_001 files=1 bytes=4
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=archive_write status=complete id=20260418T163917Z_001 files=1 bytes=4
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=manifest_sidecar status=begin id=20260418T163917Z_001
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=manifest_sidecar status=complete id=20260418T163917Z_001
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create status=complete id=20260418T163917Z_001 archive=20260418T163917Z_001.tar.gz paths=1 files=1 bytes=4 elapsed_ms=1
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=checkpoint status=complete target_id=20260418T163917Z checkpoint_id=20260418T163917Z_001 archive=20260418T163917Z_001.tar.gz
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=stop_server status=skipped id=20260418T163917Z reason=server_not_running
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=archive_restore status=begin id=20260418T163917Z archive_path=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore683458746/001/20260418T163917Z.tar.gz
[2026-04-18T16:39:17Z] action=archive_restore status=begin archive_path=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore683458746/001/20260418T163917Z.tar.gz server_root=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore683458746/002 paths=["world"]
[2026-04-18T16:39:17Z] action=archive_restore step=remove_existing path=world
[2026-04-18T16:39:17Z] action=archive_restore step=entry type=dir path=world mode=0755
[2026-04-18T16:39:17Z] action=archive_restore step=entry type=file path=world/level.dat bytes=6 mode=0644
[2026-04-18T16:39:17Z] action=archive_restore step=skip_manifest path=backup_manifest.json
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=archive_restore status=complete id=20260418T163917Z
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=start_server status=begin id=20260418T163917Z
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=start_server status=complete id=20260418T163917Z
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore status=complete backup_id=20260418T163917Z checkpoint_id=20260418T163917Z_001 elapsed_ms=1
[2026-04-18T16:39:17Z] action=archive_restore status=begin archive_path=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore683458746/001/20260418T163917Z_001.tar.gz server_root=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore683458746/003 paths=["world"]
[2026-04-18T16:39:17Z] action=archive_restore step=remove_existing path=world
[2026-04-18T16:39:17Z] action=archive_restore step=entry type=dir path=world mode=0755
[2026-04-18T16:39:17Z] action=archive_restore step=entry type=file path=world/level.dat bytes=4 mode=0644
[2026-04-18T16:39:17Z] action=archive_restore step=skip_manifest path=backup_manifest.json
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create status=begin requested_type=manual reason= prune=true
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=metadata id=20260418T163917Z archive=20260418T163917Z.tar.gz root=/tmp/TestRestoreAbortsIfCheckpointCreationFails1507747087/001 server_root=/tmp/TestRestoreAbortsIfCheckpointCreationFails1507747087/002 paths=["world"]
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=save_off status=skipped id=20260418T163917Z reason=server_not_running
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=archive_write status=begin id=20260418T163917Z archive_path=/tmp/TestRestoreAbortsIfCheckpointCreationFails1507747087/001/20260418T163917Z.tar.gz
[2026-04-18T16:39:17Z] action=archive_write status=begin backup_id=20260418T163917Z archive_path=/tmp/TestRestoreAbortsIfCheckpointCreationFails1507747087/001/20260418T163917Z.tar.gz server_root=/tmp/TestRestoreAbortsIfCheckpointCreationFails1507747087/002 paths=["world"]
[2026-04-18T16:39:17Z] action=archive_write step=add_path status=begin backup_id=20260418T163917Z path=world
[2026-04-18T16:39:17Z] action=archive_write step=entry backup_id=20260418T163917Z type=dir path=world
[2026-04-18T16:39:17Z] action=archive_write step=entry backup_id=20260418T163917Z type=file path=world/level.dat bytes=6 total_files=1 total_bytes=6
[2026-04-18T16:39:17Z] action=archive_write step=add_path status=complete backup_id=20260418T163917Z path=world files=1 bytes=6
[2026-04-18T16:39:17Z] action=archive_write status=complete backup_id=20260418T163917Z files=1 bytes=6
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=archive_write status=complete id=20260418T163917Z files=1 bytes=6
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=manifest_sidecar status=begin id=20260418T163917Z
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=manifest_sidecar status=complete id=20260418T163917Z
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=prune status=begin id=20260418T163917Z max_count=10
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=prune status=complete id=20260418T163917Z
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create status=complete id=20260418T163917Z archive=20260418T163917Z.tar.gz paths=1 files=1 bytes=6 elapsed_ms=1
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore status=begin requested_id=20260418T163917Z
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=manifest status=loaded id=20260418T163917Z archive=20260418T163917Z.tar.gz paths=["world"] files=1 bytes=6
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=archive_check status=ok id=20260418T163917Z archive_path=/tmp/TestRestoreAbortsIfCheckpointCreationFails1507747087/001/20260418T163917Z.tar.gz
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=checkpoint status=begin target_id=20260418T163917Z
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create status=begin requested_type=checkpoint reason=pre_restore prune=false
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=metadata id=20260418T163917Z_001 archive=20260418T163917Z_001.tar.gz root=/tmp/TestRestoreAbortsIfCheckpointCreationFails1507747087/001 server_root=/tmp/TestRestoreAbortsIfCheckpointCreationFails1507747087/002 paths=["world"]
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=save_off status=begin id=20260418T163917Z_001
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create status=failed elapsed_ms=0 err=disable minecraft saves: save-off failed
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore status=failed requested_id=20260418T163917Z elapsed_ms=0 err=create pre-restore checkpoint: disable minecraft saves: save-off failed
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create status=begin requested_type=manual reason= prune=true
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=metadata id=20260418T163917Z archive=20260418T163917Z.tar.gz root=/tmp/TestManualBackupIsManualAndCheckpointIsListable1869010815/001 server_root=/tmp/TestManualBackupIsManualAndCheckpointIsListable1869010815/002 paths=["world"]
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=save_off status=skipped id=20260418T163917Z reason=server_not_running
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=archive_write status=begin id=20260418T163917Z archive_path=/tmp/TestManualBackupIsManualAndCheckpointIsListable1869010815/001/20260418T163917Z.tar.gz
[2026-04-18T16:39:17Z] action=archive_write status=begin backup_id=20260418T163917Z archive_path=/tmp/TestManualBackupIsManualAndCheckpointIsListable1869010815/001/20260418T163917Z.tar.gz server_root=/tmp/TestManualBackupIsManualAndCheckpointIsListable1869010815/002 paths=["world"]
[2026-04-18T16:39:17Z] action=archive_write step=add_path status=begin backup_id=20260418T163917Z path=world
[2026-04-18T16:39:17Z] action=archive_write step=entry backup_id=20260418T163917Z type=dir path=world
[2026-04-18T16:39:17Z] action=archive_write step=entry backup_id=20260418T163917Z type=file path=world/level.dat bytes=6 total_files=1 total_bytes=6
[2026-04-18T16:39:17Z] action=archive_write step=add_path status=complete backup_id=20260418T163917Z path=world files=1 bytes=6
[2026-04-18T16:39:17Z] action=archive_write status=complete backup_id=20260418T163917Z files=1 bytes=6
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=archive_write status=complete id=20260418T163917Z files=1 bytes=6
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=manifest_sidecar status=begin id=20260418T163917Z
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=manifest_sidecar status=complete id=20260418T163917Z
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=prune status=begin id=20260418T163917Z max_count=10
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=prune status=complete id=20260418T163917Z
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create status=complete id=20260418T163917Z archive=20260418T163917Z.tar.gz paths=1 files=1 bytes=6 elapsed_ms=1
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore status=begin requested_id=20260418T163917Z
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=manifest status=loaded id=20260418T163917Z archive=20260418T163917Z.tar.gz paths=["world"] files=1 bytes=6
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=archive_check status=ok id=20260418T163917Z archive_path=/tmp/TestManualBackupIsManualAndCheckpointIsListable1869010815/001/20260418T163917Z.tar.gz
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=checkpoint status=begin target_id=20260418T163917Z
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create status=begin requested_type=checkpoint reason=pre_restore prune=false
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=metadata id=20260418T163917Z_001 archive=20260418T163917Z_001.tar.gz root=/tmp/TestManualBackupIsManualAndCheckpointIsListable1869010815/001 server_root=/tmp/TestManualBackupIsManualAndCheckpointIsListable1869010815/002 paths=["world"]
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=save_off status=skipped id=20260418T163917Z_001 reason=server_not_running
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=archive_write status=begin id=20260418T163917Z_001 archive_path=/tmp/TestManualBackupIsManualAndCheckpointIsListable1869010815/001/20260418T163917Z_001.tar.gz
[2026-04-18T16:39:17Z] action=archive_write status=begin backup_id=20260418T163917Z_001 archive_path=/tmp/TestManualBackupIsManualAndCheckpointIsListable1869010815/001/20260418T163917Z_001.tar.gz server_root=/tmp/TestManualBackupIsManualAndCheckpointIsListable1869010815/002 paths=["world"]
[2026-04-18T16:39:17Z] action=archive_write step=add_path status=begin backup_id=20260418T163917Z_001 path=world
[2026-04-18T16:39:17Z] action=archive_write step=entry backup_id=20260418T163917Z_001 type=dir path=world
[2026-04-18T16:39:17Z] action=archive_write step=entry backup_id=20260418T163917Z_001 type=file path=world/level.dat bytes=4 total_files=1 total_bytes=4
[2026-04-18T16:39:17Z] action=archive_write step=add_path status=complete backup_id=20260418T163917Z_001 path=world files=1 bytes=4
[2026-04-18T16:39:17Z] action=archive_write status=complete backup_id=20260418T163917Z_001 files=1 bytes=4
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=archive_write status=complete id=20260418T163917Z_001 files=1 bytes=4
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=manifest_sidecar status=begin id=20260418T163917Z_001
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=manifest_sidecar status=complete id=20260418T163917Z_001
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create status=complete id=20260418T163917Z_001 archive=20260418T163917Z_001.tar.gz paths=1 files=1 bytes=4 elapsed_ms=0
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=checkpoint status=complete target_id=20260418T163917Z checkpoint_id=20260418T163917Z_001 archive=20260418T163917Z_001.tar.gz
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=stop_server status=skipped id=20260418T163917Z reason=server_not_running
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=archive_restore status=begin id=20260418T163917Z archive_path=/tmp/TestManualBackupIsManualAndCheckpointIsListable1869010815/001/20260418T163917Z.tar.gz
[2026-04-18T16:39:17Z] action=archive_restore status=begin archive_path=/tmp/TestManualBackupIsManualAndCheckpointIsListable1869010815/001/20260418T163917Z.tar.gz server_root=/tmp/TestManualBackupIsManualAndCheckpointIsListable1869010815/002 paths=["world"]
[2026-04-18T16:39:17Z] action=archive_restore step=remove_existing path=world
[2026-04-18T16:39:17Z] action=archive_restore step=entry type=dir path=world mode=0755
[2026-04-18T16:39:17Z] action=archive_restore step=entry type=file path=world/level.dat bytes=6 mode=0644
[2026-04-18T16:39:17Z] action=archive_restore step=skip_manifest path=backup_manifest.json
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=archive_restore status=complete id=20260418T163917Z
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=start_server status=begin id=20260418T163917Z
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=start_server status=complete id=20260418T163917Z
[2026-04-18T16:39:17Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore status=complete backup_id=20260418T163917Z checkpoint_id=20260418T163917Z_001 elapsed_ms=1
[2026-04-18T16:39:17Z] action=archive_write status=begin backup_id=safe archive_path=/tmp/TestRestoreArchiveRejectsUnsafeManifestPathBeforeDeleting1722460547/003/safe.tar.gz server_root=/tmp/TestRestoreArchiveRejectsUnsafeManifestPathBeforeDeleting1722460547/002 paths=["world"]
[2026-04-18T16:39:17Z] action=archive_write step=add_path status=begin backup_id=safe path=world
[2026-04-18T16:39:17Z] action=archive_write step=entry backup_id=safe type=dir path=world
[2026-04-18T16:39:17Z] action=archive_write step=entry backup_id=safe type=file path=world/level.dat bytes=6 total_files=1 total_bytes=6
[2026-04-18T16:39:17Z] action=archive_write step=add_path status=complete backup_id=safe path=world files=1 bytes=6
[2026-04-18T16:39:17Z] action=archive_write status=complete backup_id=safe files=1 bytes=6
[2026-04-18T16:39:17Z] action=archive_restore status=begin archive_path=/tmp/TestRestoreArchiveRejectsUnsafeManifestPathBeforeDeleting1722460547/003/safe.tar.gz server_root=/tmp/TestRestoreArchiveRejectsUnsafeManifestPathBeforeDeleting1722460547/001 paths=["../world"]
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create status=begin requested_type=manual reason= prune=true
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=metadata id=20260418T163922Z archive=20260418T163922Z.tar.gz root=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore2225017108/001 server_root=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore2225017108/002 paths=["world"]
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=save_off status=skipped id=20260418T163922Z reason=server_not_running
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=archive_write status=begin id=20260418T163922Z archive_path=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore2225017108/001/20260418T163922Z.tar.gz
[2026-04-18T16:39:22Z] action=archive_write status=begin backup_id=20260418T163922Z archive_path=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore2225017108/001/20260418T163922Z.tar.gz server_root=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore2225017108/002 paths=["world"]
[2026-04-18T16:39:22Z] action=archive_write step=add_path status=begin backup_id=20260418T163922Z path=world
[2026-04-18T16:39:22Z] action=archive_write step=entry backup_id=20260418T163922Z type=dir path=world
[2026-04-18T16:39:22Z] action=archive_write step=entry backup_id=20260418T163922Z type=file path=world/level.dat bytes=6 total_files=1 total_bytes=6
[2026-04-18T16:39:22Z] action=archive_write step=add_path status=complete backup_id=20260418T163922Z path=world files=1 bytes=6
[2026-04-18T16:39:22Z] action=archive_write status=complete backup_id=20260418T163922Z files=1 bytes=6
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=archive_write status=complete id=20260418T163922Z files=1 bytes=6
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=manifest_sidecar status=begin id=20260418T163922Z
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=manifest_sidecar status=complete id=20260418T163922Z
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=prune status=begin id=20260418T163922Z max_count=10
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=prune status=complete id=20260418T163922Z
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create status=complete id=20260418T163922Z archive=20260418T163922Z.tar.gz paths=1 files=1 bytes=6 elapsed_ms=1
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore status=begin requested_id=20260418T163922Z
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=manifest status=loaded id=20260418T163922Z archive=20260418T163922Z.tar.gz paths=["world"] files=1 bytes=6
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=archive_check status=ok id=20260418T163922Z archive_path=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore2225017108/001/20260418T163922Z.tar.gz
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=checkpoint status=begin target_id=20260418T163922Z
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create status=begin requested_type=checkpoint reason=pre_restore prune=false
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=metadata id=20260418T163922Z_001 archive=20260418T163922Z_001.tar.gz root=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore2225017108/001 server_root=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore2225017108/002 paths=["world"]
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=save_off status=skipped id=20260418T163922Z_001 reason=server_not_running
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=archive_write status=begin id=20260418T163922Z_001 archive_path=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore2225017108/001/20260418T163922Z_001.tar.gz
[2026-04-18T16:39:22Z] action=archive_write status=begin backup_id=20260418T163922Z_001 archive_path=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore2225017108/001/20260418T163922Z_001.tar.gz server_root=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore2225017108/002 paths=["world"]
[2026-04-18T16:39:22Z] action=archive_write step=add_path status=begin backup_id=20260418T163922Z_001 path=world
[2026-04-18T16:39:22Z] action=archive_write step=entry backup_id=20260418T163922Z_001 type=dir path=world
[2026-04-18T16:39:22Z] action=archive_write step=entry backup_id=20260418T163922Z_001 type=file path=world/level.dat bytes=4 total_files=1 total_bytes=4
[2026-04-18T16:39:22Z] action=archive_write step=add_path status=complete backup_id=20260418T163922Z_001 path=world files=1 bytes=4
[2026-04-18T16:39:22Z] action=archive_write status=complete backup_id=20260418T163922Z_001 files=1 bytes=4
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=archive_write status=complete id=20260418T163922Z_001 files=1 bytes=4
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=manifest_sidecar status=begin id=20260418T163922Z_001
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=manifest_sidecar status=complete id=20260418T163922Z_001
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create status=complete id=20260418T163922Z_001 archive=20260418T163922Z_001.tar.gz paths=1 files=1 bytes=4 elapsed_ms=1
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=checkpoint status=complete target_id=20260418T163922Z checkpoint_id=20260418T163922Z_001 archive=20260418T163922Z_001.tar.gz
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=stop_server status=skipped id=20260418T163922Z reason=server_not_running
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=archive_restore status=begin id=20260418T163922Z archive_path=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore2225017108/001/20260418T163922Z.tar.gz
[2026-04-18T16:39:22Z] action=archive_restore status=begin archive_path=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore2225017108/001/20260418T163922Z.tar.gz server_root=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore2225017108/002 paths=["world"]
[2026-04-18T16:39:22Z] action=archive_restore step=remove_existing path=world
[2026-04-18T16:39:22Z] action=archive_restore step=entry type=dir path=world mode=0755
[2026-04-18T16:39:22Z] action=archive_restore step=entry type=file path=world/level.dat bytes=6 mode=0644
[2026-04-18T16:39:22Z] action=archive_restore step=skip_manifest path=backup_manifest.json
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=archive_restore status=complete id=20260418T163922Z
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=start_server status=begin id=20260418T163922Z
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=start_server status=complete id=20260418T163922Z
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore status=complete backup_id=20260418T163922Z checkpoint_id=20260418T163922Z_001 elapsed_ms=1
[2026-04-18T16:39:22Z] action=archive_restore status=begin archive_path=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore2225017108/001/20260418T163922Z_001.tar.gz server_root=/tmp/TestRestoreCreatesCheckpointBeforeDestructiveRestore2225017108/003 paths=["world"]
[2026-04-18T16:39:22Z] action=archive_restore step=remove_existing path=world
[2026-04-18T16:39:22Z] action=archive_restore step=entry type=dir path=world mode=0755
[2026-04-18T16:39:22Z] action=archive_restore step=entry type=file path=world/level.dat bytes=4 mode=0644
[2026-04-18T16:39:22Z] action=archive_restore step=skip_manifest path=backup_manifest.json
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create status=begin requested_type=manual reason= prune=true
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=metadata id=20260418T163922Z archive=20260418T163922Z.tar.gz root=/tmp/TestRestoreAbortsIfCheckpointCreationFails1479919200/001 server_root=/tmp/TestRestoreAbortsIfCheckpointCreationFails1479919200/002 paths=["world"]
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=save_off status=skipped id=20260418T163922Z reason=server_not_running
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=archive_write status=begin id=20260418T163922Z archive_path=/tmp/TestRestoreAbortsIfCheckpointCreationFails1479919200/001/20260418T163922Z.tar.gz
[2026-04-18T16:39:22Z] action=archive_write status=begin backup_id=20260418T163922Z archive_path=/tmp/TestRestoreAbortsIfCheckpointCreationFails1479919200/001/20260418T163922Z.tar.gz server_root=/tmp/TestRestoreAbortsIfCheckpointCreationFails1479919200/002 paths=["world"]
[2026-04-18T16:39:22Z] action=archive_write step=add_path status=begin backup_id=20260418T163922Z path=world
[2026-04-18T16:39:22Z] action=archive_write step=entry backup_id=20260418T163922Z type=dir path=world
[2026-04-18T16:39:22Z] action=archive_write step=entry backup_id=20260418T163922Z type=file path=world/level.dat bytes=6 total_files=1 total_bytes=6
[2026-04-18T16:39:22Z] action=archive_write step=add_path status=complete backup_id=20260418T163922Z path=world files=1 bytes=6
[2026-04-18T16:39:22Z] action=archive_write status=complete backup_id=20260418T163922Z files=1 bytes=6
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=archive_write status=complete id=20260418T163922Z files=1 bytes=6
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=manifest_sidecar status=begin id=20260418T163922Z
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=manifest_sidecar status=complete id=20260418T163922Z
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=prune status=begin id=20260418T163922Z max_count=10
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=prune status=complete id=20260418T163922Z
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create status=complete id=20260418T163922Z archive=20260418T163922Z.tar.gz paths=1 files=1 bytes=6 elapsed_ms=1
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore status=begin requested_id=20260418T163922Z
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=manifest status=loaded id=20260418T163922Z archive=20260418T163922Z.tar.gz paths=["world"] files=1 bytes=6
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=archive_check status=ok id=20260418T163922Z archive_path=/tmp/TestRestoreAbortsIfCheckpointCreationFails1479919200/001/20260418T163922Z.tar.gz
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=checkpoint status=begin target_id=20260418T163922Z
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create status=begin requested_type=checkpoint reason=pre_restore prune=false
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=metadata id=20260418T163922Z_001 archive=20260418T163922Z_001.tar.gz root=/tmp/TestRestoreAbortsIfCheckpointCreationFails1479919200/001 server_root=/tmp/TestRestoreAbortsIfCheckpointCreationFails1479919200/002 paths=["world"]
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=save_off status=begin id=20260418T163922Z_001
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create status=failed elapsed_ms=0 err=disable minecraft saves: save-off failed
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore status=failed requested_id=20260418T163922Z elapsed_ms=0 err=create pre-restore checkpoint: disable minecraft saves: save-off failed
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create status=begin requested_type=manual reason= prune=true
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=metadata id=20260418T163922Z archive=20260418T163922Z.tar.gz root=/tmp/TestManualBackupIsManualAndCheckpointIsListable3371450404/001 server_root=/tmp/TestManualBackupIsManualAndCheckpointIsListable3371450404/002 paths=["world"]
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=save_off status=skipped id=20260418T163922Z reason=server_not_running
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=archive_write status=begin id=20260418T163922Z archive_path=/tmp/TestManualBackupIsManualAndCheckpointIsListable3371450404/001/20260418T163922Z.tar.gz
[2026-04-18T16:39:22Z] action=archive_write status=begin backup_id=20260418T163922Z archive_path=/tmp/TestManualBackupIsManualAndCheckpointIsListable3371450404/001/20260418T163922Z.tar.gz server_root=/tmp/TestManualBackupIsManualAndCheckpointIsListable3371450404/002 paths=["world"]
[2026-04-18T16:39:22Z] action=archive_write step=add_path status=begin backup_id=20260418T163922Z path=world
[2026-04-18T16:39:22Z] action=archive_write step=entry backup_id=20260418T163922Z type=dir path=world
[2026-04-18T16:39:22Z] action=archive_write step=entry backup_id=20260418T163922Z type=file path=world/level.dat bytes=6 total_files=1 total_bytes=6
[2026-04-18T16:39:22Z] action=archive_write step=add_path status=complete backup_id=20260418T163922Z path=world files=1 bytes=6
[2026-04-18T16:39:22Z] action=archive_write status=complete backup_id=20260418T163922Z files=1 bytes=6
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=archive_write status=complete id=20260418T163922Z files=1 bytes=6
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=manifest_sidecar status=begin id=20260418T163922Z
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=manifest_sidecar status=complete id=20260418T163922Z
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=prune status=begin id=20260418T163922Z max_count=10
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=prune status=complete id=20260418T163922Z
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create status=complete id=20260418T163922Z archive=20260418T163922Z.tar.gz paths=1 files=1 bytes=6 elapsed_ms=1
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore status=begin requested_id=20260418T163922Z
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=manifest status=loaded id=20260418T163922Z archive=20260418T163922Z.tar.gz paths=["world"] files=1 bytes=6
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=archive_check status=ok id=20260418T163922Z archive_path=/tmp/TestManualBackupIsManualAndCheckpointIsListable3371450404/001/20260418T163922Z.tar.gz
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=checkpoint status=begin target_id=20260418T163922Z
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create status=begin requested_type=checkpoint reason=pre_restore prune=false
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=metadata id=20260418T163922Z_001 archive=20260418T163922Z_001.tar.gz root=/tmp/TestManualBackupIsManualAndCheckpointIsListable3371450404/001 server_root=/tmp/TestManualBackupIsManualAndCheckpointIsListable3371450404/002 paths=["world"]
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=save_off status=skipped id=20260418T163922Z_001 reason=server_not_running
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=archive_write status=begin id=20260418T163922Z_001 archive_path=/tmp/TestManualBackupIsManualAndCheckpointIsListable3371450404/001/20260418T163922Z_001.tar.gz
[2026-04-18T16:39:22Z] action=archive_write status=begin backup_id=20260418T163922Z_001 archive_path=/tmp/TestManualBackupIsManualAndCheckpointIsListable3371450404/001/20260418T163922Z_001.tar.gz server_root=/tmp/TestManualBackupIsManualAndCheckpointIsListable3371450404/002 paths=["world"]
[2026-04-18T16:39:22Z] action=archive_write step=add_path status=begin backup_id=20260418T163922Z_001 path=world
[2026-04-18T16:39:22Z] action=archive_write step=entry backup_id=20260418T163922Z_001 type=dir path=world
[2026-04-18T16:39:22Z] action=archive_write step=entry backup_id=20260418T163922Z_001 type=file path=world/level.dat bytes=4 total_files=1 total_bytes=4
[2026-04-18T16:39:22Z] action=archive_write step=add_path status=complete backup_id=20260418T163922Z_001 path=world files=1 bytes=4
[2026-04-18T16:39:22Z] action=archive_write status=complete backup_id=20260418T163922Z_001 files=1 bytes=4
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=archive_write status=complete id=20260418T163922Z_001 files=1 bytes=4
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=manifest_sidecar status=begin id=20260418T163922Z_001
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create step=manifest_sidecar status=complete id=20260418T163922Z_001
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_create status=complete id=20260418T163922Z_001 archive=20260418T163922Z_001.tar.gz paths=1 files=1 bytes=4 elapsed_ms=0
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=checkpoint status=complete target_id=20260418T163922Z checkpoint_id=20260418T163922Z_001 archive=20260418T163922Z_001.tar.gz
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=stop_server status=skipped id=20260418T163922Z reason=server_not_running
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=archive_restore status=begin id=20260418T163922Z archive_path=/tmp/TestManualBackupIsManualAndCheckpointIsListable3371450404/001/20260418T163922Z.tar.gz
[2026-04-18T16:39:22Z] action=archive_restore status=begin archive_path=/tmp/TestManualBackupIsManualAndCheckpointIsListable3371450404/001/20260418T163922Z.tar.gz server_root=/tmp/TestManualBackupIsManualAndCheckpointIsListable3371450404/002 paths=["world"]
[2026-04-18T16:39:22Z] action=archive_restore step=remove_existing path=world
[2026-04-18T16:39:22Z] action=archive_restore step=entry type=dir path=world mode=0755
[2026-04-18T16:39:22Z] action=archive_restore step=entry type=file path=world/level.dat bytes=6 mode=0644
[2026-04-18T16:39:22Z] action=archive_restore step=skip_manifest path=backup_manifest.json
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=archive_restore status=complete id=20260418T163922Z
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=start_server status=begin id=20260418T163922Z
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore step=start_server status=complete id=20260418T163922Z
[2026-04-18T16:39:22Z] vmid=5001 type=game game=minecraft variant=vanilla version=1.21.4 action=backup_restore status=complete backup_id=20260418T163922Z checkpoint_id=20260418T163922Z_001 elapsed_ms=1
[2026-04-18T16:39:22Z] action=archive_write status=begin backup_id=safe archive_path=/tmp/TestRestoreArchiveRejectsUnsafeManifestPathBeforeDeleting50238974/003/safe.tar.gz server_root=/tmp/TestRestoreArchiveRejectsUnsafeManifestPathBeforeDeleting50238974/002 paths=["world"]
[2026-04-18T16:39:22Z] action=archive_write step=add_path status=begin backup_id=safe path=world
[2026-04-18T16:39:22Z] action=archive_write step=entry backup_id=safe type=dir path=world
[2026-04-18T16:39:22Z] action=archive_write step=entry backup_id=safe type=file path=world/level.dat bytes=6 total_files=1 total_bytes=6
[2026-04-18T16:39:22Z] action=archive_write step=add_path status=complete backup_id=safe path=world files=1 bytes=6
[2026-04-18T16:39:22Z] action=archive_write status=complete backup_id=safe files=1 bytes=6
[2026-04-18T16:39:22Z] action=archive_restore status=begin archive_path=/tmp/TestRestoreArchiveRejectsUnsafeManifestPathBeforeDeleting50238974/003/safe.tar.gz server_root=/tmp/TestRestoreArchiveRejectsUnsafeManifestPathBeforeDeleting50238974/001 paths=["../world"]
[2026-04-18T16:39:59Z] action=archive_write status=begin backup_id=safe archive_path=/tmp/TestRestoreArchiveRejectsUnsafeManifestPathBeforeDeleting3166759872/003/safe.tar.gz server_root=/tmp/TestRestoreArchiveRejectsUnsafeManifestPathBeforeDeleting3166759872/002 paths=["world"]
[2026-04-18T16:39:59Z] action=archive_write step=add_path status=begin backup_id=safe path=world
[2026-04-18T16:39:59Z] action=archive_write step=entry backup_id=safe type=dir path=world
[2026-04-18T16:39:59Z] action=archive_write step=entry backup_id=safe type=file path=world/level.dat bytes=6 total_files=1 total_bytes=6
[2026-04-18T16:39:59Z] action=archive_write step=add_path status=complete backup_id=safe path=world files=1 bytes=6
[2026-04-18T16:39:59Z] action=archive_write status=complete backup_id=safe files=1 bytes=6
[2026-04-18T16:39:59Z] action=archive_restore status=begin archive_path=/tmp/TestRestoreArchiveRejectsUnsafeManifestPathBeforeDeleting3166759872/003/safe.tar.gz server_root=/tmp/TestRestoreArchiveRejectsUnsafeManifestPathBeforeDeleting3166759872/001 paths=["../world"]
[2026-04-18T16:40:02Z] action=archive_write status=begin backup_id=safe archive_path=/tmp/TestRestoreArchiveRejectsUnsafeManifestPathBeforeDeleting1871575453/003/safe.tar.gz server_root=/tmp/TestRestoreArchiveRejectsUnsafeManifestPathBeforeDeleting1871575453/002 paths=["world"]
[2026-04-18T16:40:02Z] action=archive_write step=add_path status=begin backup_id=safe path=world
[2026-04-18T16:40:02Z] action=archive_write step=entry backup_id=safe type=dir path=world
[2026-04-18T16:40:02Z] action=archive_write step=entry backup_id=safe type=file path=world/level.dat bytes=6 total_files=1 total_bytes=6
[2026-04-18T16:40:02Z] action=archive_write step=add_path status=complete backup_id=safe path=world files=1 bytes=6
[2026-04-18T16:40:02Z] action=archive_write status=complete backup_id=safe files=1 bytes=6
[2026-04-18T16:40:02Z] action=archive_restore status=begin archive_path=/tmp/TestRestoreArchiveRejectsUnsafeManifestPathBeforeDeleting1871575453/003/safe.tar.gz server_root=/tmp/TestRestoreArchiveRejectsUnsafeManifestPathBeforeDeleting1871575453/001 paths=["../world"]

View File

@ -2,5 +2,5 @@
"status": "error", "status": "error",
"current": "0.0.0-dev", "current": "0.0.0-dev",
"error": "Get \"http://10.60.0.251:8080/agents/manifest.json\": dial tcp 10.60.0.251:8080: connect: no route to host", "error": "Get \"http://10.60.0.251:8080/agents/manifest.json\": dial tcp 10.60.0.251:8080: connect: no route to host",
"checked_at_utc": "2026-04-18T13:52:49Z" "checked_at_utc": "2026-04-18T17:52:52Z"
} }