Почему не работает ключ -ver в WinRAR при архивации файлов 1С?

Системный администратор 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При настройке автоматического резервного копирования баз данных 1С (особенно файловых вариантов .1CD) системные администраторы часто прибегают к использованию консольной версии архиватора WinRAR. Одним из наиболее интересных, но капризных инструментов является ключ -ver, предназначенный для управления версиями файлов внутри одного архива. В этой статье мы подробно разберем ситуацию, когда этот ключ кажется нерабочим, проанализируем логику архиватора и выясним, как правильно организовать процесс версионирования.

Разбор исходной ситуации и используемой команды

Рассмотрим пример команды, которая была представлена в обсуждении:


"m:\fixin\PortableProgramFiles\WinRAR\Rar.exe" u -dh -ep -ver4 -y -agA "PATH2\1s.rar" "PATH1\1Cv8.1CD"

Проанализируем используемые ключи, чтобы понять изначальный замысел:

  1. u — команда обновления архива. Она добавляет файлы, которых нет в архиве, или обновляет те, что были изменены.
  2. -dh — открывает файлы, занятые другими процессами (актуально для 1С, если кто-то забыл выйти из базы).
  3. -ep — исключает пути из имен файлов (в архиве файл будет лежать в корне, а не в дереве папок).
  4. -ver4 — теоретически должен заставлять WinRAR хранить до 4 предыдущих версий файла внутри архива.
  5. -y — автоматический ответ "Да" на все запросы системы.
  6. -agA — добавление даты и времени к имени архива.

Выяснение причины: почему не создаются версии?

Разберем по шагам, почему при выполнении такой команды пользователь может увидеть только один файл в архиве. Основная причина кроется в логике сравнения файлов WinRAR. Проанализируем ситуацию: архиватор — это прежде всего инструмент оптимизации. Перед тем как создать новую версию файла внутри архива, WinRAR проверяет два основных параметра:

Если эти параметры у файла на диске и у файла, уже находящегося в архиве, полностью идентичны, WinRAR считает, что файл не изменялся. В этом случае ключ -ver не срабатывает, так как системе незачем плодить дубликаты абсолютно одинаковых данных. Это критически важно для баз 1С: если в базе не производилось никаких действий (например, ночью), файл 1Cv8.1CD сохранит прежнюю дату модификации, и новая версия в архиве не появится.

Конфликт ключей -ver и -ag

Проанализируем еще одну серьезную ошибку в представленной команде — одновременное использование -ver и -ag. Рассмотрим подробнее, как они работают:

Ключ -ver предназначен для управления версиями файлов внутри одного и того же файла архива. Старые копии переименовываются в формат имя_файла;n.

Ключ -ag (в примере -agA) заставляет WinRAR при каждом запуске создавать новый файл архива, добавляя к его имени текущую дату и время (например, 1s_202310271200.rar).

Следовательно, когда создается абсолютно новый архивный файл, в нем еще нет никаких старых версий. Ключ -ver в таком сценарии фактически бесполезен, так как он никогда не найдет "предыдущую" версию файла в только что созданном пустом архиве. Для корректной работы версионности внутри архива необходимо записывать все бэкапы в один и тот же файл, например, 1s_backup.rar, не используя ключ -ag.

Технические нюансы работы с версиями

Выясним некоторые важные детали, которые помогут правильно настроить процесс:

  1. Лимит версий: Число после ключа (например, -ver5) жестко ограничивает количество копий. При добавлении шестой версии самая старая (с индексом ;1) будет безвозвратно удалена.
  2. Извлечение файлов: По умолчанию WinRAR всегда извлекает последнюю актуальную версию. Чтобы достать старую копию, нужно явно указать ее индекс в командной строке, например: rar x backup.rar 1Cv8.1CD;2
  3. Формат архива: Помним, что поддержка версионности является эксклюзивной фишкой формата RAR. Если вы попытаетесь применить этот ключ при создании ZIP-архива, он будет проигнорирован.

Рекомендуемый подход к созданию бэкапа 1С

Если ваша задача — иметь возможность "откатиться" на несколько состояний назад, у вас есть два пути. Рассмотрим их подробнее.

Вариант 1: Версионность средствами имен файлов (рекомендуется)

Вместо использования сложного механизма версий внутри 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"

Вариант 2: Использование ключа -ver для экономии места

Если вы хотите хранить все в одном файле, уберите -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, но помните о правилах обновления файлов.

← На главную