При настройке автоматического резервного копирования баз данных 1С (особенно файловых вариантов .1CD) системные администраторы часто прибегают к использованию консольной версии архиватора WinRAR. Одним из наиболее интересных, но капризных инструментов является ключ -ver, предназначенный для управления версиями файлов внутри одного архива. В этой статье мы подробно разберем ситуацию, когда этот ключ кажется нерабочим, проанализируем логику архиватора и выясним, как правильно организовать процесс версионирования.
Рассмотрим пример команды, которая была представлена в обсуждении:
"m:\fixin\PortableProgramFiles\WinRAR\Rar.exe" u -dh -ep -ver4 -y -agA "PATH2\1s.rar" "PATH1\1Cv8.1CD"
Проанализируем используемые ключи, чтобы понять изначальный замысел:
u — команда обновления архива. Она добавляет файлы, которых нет в архиве, или обновляет те, что были изменены.-dh — открывает файлы, занятые другими процессами (актуально для 1С, если кто-то забыл выйти из базы).-ep — исключает пути из имен файлов (в архиве файл будет лежать в корне, а не в дереве папок).-ver4 — теоретически должен заставлять WinRAR хранить до 4 предыдущих версий файла внутри архива.-y — автоматический ответ "Да" на все запросы системы.-agA — добавление даты и времени к имени архива.Разберем по шагам, почему при выполнении такой команды пользователь может увидеть только один файл в архиве. Основная причина кроется в логике сравнения файлов WinRAR. Проанализируем ситуацию: архиватор — это прежде всего инструмент оптимизации. Перед тем как создать новую версию файла внутри архива, WinRAR проверяет два основных параметра:
Если эти параметры у файла на диске и у файла, уже находящегося в архиве, полностью идентичны, WinRAR считает, что файл не изменялся. В этом случае ключ -ver не срабатывает, так как системе незачем плодить дубликаты абсолютно одинаковых данных. Это критически важно для баз 1С: если в базе не производилось никаких действий (например, ночью), файл 1Cv8.1CD сохранит прежнюю дату модификации, и новая версия в архиве не появится.
Проанализируем еще одну серьезную ошибку в представленной команде — одновременное использование -ver и -ag. Рассмотрим подробнее, как они работают:
Ключ -ver предназначен для управления версиями файлов внутри одного и того же файла архива. Старые копии переименовываются в формат имя_файла;n.
Ключ -ag (в примере -agA) заставляет WinRAR при каждом запуске создавать новый файл архива, добавляя к его имени текущую дату и время (например, 1s_202310271200.rar).
Следовательно, когда создается абсолютно новый архивный файл, в нем еще нет никаких старых версий. Ключ -ver в таком сценарии фактически бесполезен, так как он никогда не найдет "предыдущую" версию файла в только что созданном пустом архиве. Для корректной работы версионности внутри архива необходимо записывать все бэкапы в один и тот же файл, например, 1s_backup.rar, не используя ключ -ag.
Выясним некоторые важные детали, которые помогут правильно настроить процесс:
-ver5) жестко ограничивает количество копий. При добавлении шестой версии самая старая (с индексом ;1) будет безвозвратно удалена.
rar x backup.rar 1Cv8.1CD;2
Если ваша задача — иметь возможность "откатиться" на несколько состояний назад, у вас есть два пути. Рассмотрим их подробнее.
Вместо использования сложного механизма версий внутри RAR, лучше использовать ключ -ag, создавая каждый раз новый файл архива. Это надежнее, так как повреждение одного архива не затронет остальные копии.
"C:\Program Files\WinRAR\Rar.exe" a -dh -ep -ag_YYYY-MM-DD_HHMM "D:\Backups\1s_base.rar" "C:\1C_Bases\Accounting\1Cv8.1CD"
Если вы хотите хранить все в одном файле, уберите -ag и используйте команду a (add) вместо u (update), чтобы WinRAR был более "склонен" к добавлению данных, хотя проверка на идентичность все равно может сработать.
"C:\Program Files\WinRAR\Rar.exe" a -dh -ep -ver5 "D:\Backups\1s_history.rar" "C:\1C_Bases\Accounting\1Cv8.1CD"
Важный совет: При работе через командную строку Windows, символ точки с запятой ; иногда может восприниматься оболочкой некорректно. Если вы пишете сложные скрипты для извлечения конкретных версий, всегда заключайте пути и имена файлов в кавычки. Это поможет избежать ошибок интерпретации команд процессором cmd.exe.
Таким образом, мы выяснили, что ключ -ver в WinRAR работает исправно, но требует понимания логики сравнения файлов и отсутствия конфликтующих ключей генерации имен архивов. Проанализируйте ваши задачи: если вам нужна максимальная надежность — используйте разные файлы архивов. Если нужно экономить место в одном контейнере — используйте -ver, но помните о правилах обновления файлов.