Команда tar --append завершается ошибкой «Cannot update compressed archives», а задание резервного копирования с типом append внезапно раздувает хранилище — именно с таких симптомов обычно начинается знакомство с режимом добавления в архив. Тип архива append означает, что новые данные дописываются в конец уже существующего архивного файла, а не создают архив заново. Этот режим встречается и в классических архиваторах, и в системах резервного копирования, где набор данных пополняется инкрементально.

Понимание того, как работает добавление, критично для безопасности данных: при неправильном использовании append можно получить архив с дублирующимися версиями файлов, нечитаемый индекс или битую структуру, которую невозможно распаковать штатными средствами. Ниже разберём принцип работы, поддержку в популярных форматах и типичные ошибки.

Что означает тип архива append

В контексте архивации термин append (от англ. «добавить в конец») описывает операцию, при которой новые файлы или блоки данных присоединяются к существующему архиву без его полной перезаписи. Это принципиально отличается от создания нового архива: исходная структура сохраняется, а свежие данные занимают место после уже записанных.

Важно различать два разных применения термина. Во-первых, это режим обновления архива в архиваторах вроде tar, где файлы физически дописываются в конец файла-контейнера. Во-вторых, в системах резервного копирования (Bacula, Bareos, некоторые NAS-утилиты) append может обозначать тип задания или тома, при котором сессии бэкапа последовательно дописываются на один носитель или в один файл-хранилище, пока тот не заполнится.

Ключевая особенность режима — добавление не удаляет и не заменяет старые версии файлов внутри архива. Если файл с тем же именем уже есть в архиве, после append в нём окажутся обе копии, и при распаковке, как правило, будет извлечена последняя записанная. Это одновременно и преимущество (сохраняется история), и источник проблем (неконтролируемый рост размера).

Как работает добавление на уровне формата

Формат tar устроен как последовательность блоков: заголовок файла, затем его содержимое, затем заголовок следующего файла. Такая линейная структура позволяет дописывать данные в конец без перестройки всего архива — достаточно найти конец полезных данных (до завершающих нулевых блоков) и продолжить запись. Именно поэтому tar исторически поддерживает ключ -r (--append).

Иная ситуация с форматами, использующими централизованный индекс. В ZIP в конце файла хранится центральный каталог со смещениями всех записей, поэтому «добавление» фактически означает перезапись хвоста файла с обновлением каталога. В 7z заголовок может быть сжат и зашифрован целиком, и модификация архива требует пересборки индекса. Практический вывод: возможность и цена операции append напрямую зависят от внутреннего устройства формата.

💡

Append эффективен только в потоковых форматах без единого сжатого индекса. Чем сложнее структура заголовков, тем дороже обходится «добавление» — вплоть до полной перезаписи архива.