feat(ops): проверка бэкапа и уборка файлов без записи

- glchat verify-backup: расшифровка age, integrity_check, foreign_key_check,
  схема и состав данных, сверка с манифестом; живые данные не трогает
- чистка удаляет файлы на диске, у которых не осталось записи в базе (так
  оставались вложения удалённых серверов), и пустые подкаталоги; работает
  через os.Root, чтобы символическая ссылка не вывела за каталог файлов
- удаление сервера теперь чистит и содержимое файлов, а не только записи
- install.sh пишет значения .env с пробелами в кавычках: файл подключается
  через `set -a && . .env`, иначе имя главного сервера выполнялось как команда
- тесты: Go на уборку файлов без записи (свежие не трогаются, пустые
  каталоги удаляются)
This commit is contained in:
2026-09-21 23:33:04 +03:00
parent ef871bcd96
commit 1cb949a7a4
8 changed files with 329 additions and 4 deletions
+2 -2
View File
@@ -294,8 +294,8 @@ func cliCleanup(args []string) int {
options.OrphanHours = *orphanHours
}
stats, err := retention.New(st, options).RunOnce(ctx)
fmt.Printf("удалено: сессий %d, записей аудита %d, файлов %d (%d байт)\n",
stats.Sessions, stats.Audit, stats.Files, stats.Bytes)
fmt.Printf("удалено: сессий %d, записей аудита %d, файлов %d, файлов без записи %d (%d байт)\n",
stats.Sessions, stats.Audit, stats.Files, stats.Unknown, stats.Bytes)
return err
})
}