Недавно я решил заархивировать некоторые данные с помощьюТар. Данные состоят из многочисленных резервных копий одной и той же папки; это означает, что они содержат много дубликатов. Я читал, что из-за отсутствия индекса Tar не очень хорошо работает с данными, содержащими много дубликатов. Так что, по сути, мой вопрос в том, подойдет ли Tar для архивирования таких данных?
Меня больше всего волнует сохранение всех исходных данных в архиве, включая все временные метки файлов: создание, изменение, доступ.
решение1
Конечно, Tar может архивировать эти резервные копии, независимо от того, сколько у вас там дубликатов. Если у вас 100 дубликатов файла abc.doc в 100 разных папках, он будет архивирован 100 раз. Тем не менее, это неэффективно.
Если инструмент резервного копирования может дедуплицировать данные, он распознает эти 100 идентичных файлов, сделает резервную копию одного и сошлется на него 99 раз. Если одна из этих версий изменится, он удалит ссылку и создаст отдельную резервную копию.
решение2
GNU-тар
Время создания:
Linux на самом деле не записывает время создания файла. У него есть ctime
временная метка, которую иногда ошибочно принимают за время создания, но на самом деле это «время изменения inode»: он записывает последний раз, когда был изменен либо файл, либо его разрешения, владелец и т. д. Т. е. он меняется чаще, чем mtime
. ctime
Метка обрабатывается ядром и не может быть установлена на произвольные значения пользователем (хотя вы можете сбросить ее на текущее время достаточно легко).
Время модификации:
mtime
сохраняетсяtar
Время доступа:
tar
обычно изменяет время доступа даже в исходном файле. Вы можете предотвратить это с помощью флага --atime-preserve
. Вы также можете захотеть --preserve
тег, который сохраняет разрешения (а также порядок сортировки каталогов).
Я не знаю, можно ли tar
сохранить время доступа к архивным файлам, но это всегда можно исправить следующим образом:
- Распаковка
- Использование
touch -a -d TIME FILE
для каждого файла (со временем в формате[[CC]YY]MMDDhhmm[.ss]
) - Повторное тарирование с помощью
tar --atime-preserve
предупреждение: Использование --atime-preserve
в настоящее время запоминает atime, чтобы сохранить его после прочтения. В большинстве систем это приведет к изменению ctime, что иногда может помешать работе другого программного обеспечения (например, программного обеспечения безопасности).
Другое программное обеспечение
Вы можете рассмотреть rsync
(см.Эта статьянапример) или система контроля версий (например git
)