Сжатие двух идентичных папок дает разный результат

Я только что испытал аналогичную проблему с неопределенными последовательными портами UART и Linux на ПК ARCHMI. dmesg | grep serial не показывал никаких результатов. После многих проб я заметил, что это проблема BIOS. После отключения опции «Быстрая загрузка» все работало гладко и последовательные порты были правильно загружены с помощью UART, dmesg показал результаты. На всякий случай помогает случайно.

8
23.02.2017, 02:10
3 ответа

Хорошо, объяснение, данное ddnomad, верное. Дело в метке времени.

Вот решение:

добавить - mtime = '1970-01-01 00:00:00' в команду tar:

tar --mtime='1970-01-01 00:00:00' -Jcf archive.tar.xz *

Это заставит временную метку содержимого установить фиксированное значение в результате получаются идентичные архивы.

10
20.08.2021, 11:45

Каждый файл (папка также является файлом) имеет встроенную отметку времени.

Я полагаю, вы не можете создавать их для структур папок одновременно, поэтому отметки времени для этих файлов разные.

В результате архивирование или хеширование дадут вам разные результаты, поскольку отметка времени является частью файла, который используется в обеих операциях.

В этом разница между внешне идентичными файловыми структурами.

ОБНОВЛЕНИЕ: я полагаю, что при проверке одинакового содержимого вам нужно проверить содержимое этих файлов и сравнить их.

2
20.08.2021, 11:45

Существует ряд причин, по которым два архива одного и того же дерева каталогов могут различаться. Основными из них являются:

  • Метаданные, такие как право собственности, временные метки и т. Д., Могут отличаться. Чтобы получить воспроизводимый tar-архив, у вас должны быть те же права собственности, права доступа и временные метки. Убедитесь, что вы скопировали все метаданные (если у вас идентичное содержимое файла с разными метаданными, может помочь cp -a --attributes-only ). В GNU tar есть несколько опций, которые вы можете использовать для игнорирования определенных атрибутов:

    • - numeric-owner хранит только числовые идентификаторы пользователей и групп, но не имена.
    • - владелец и - группа принудительно записывают файлы под определенным пользователем и группой соответственно (например, - owner = 0 --group = 0 для записывать все файлы как принадлежащие корню).
    • - set-mtime позволяет сохранять все файлы с определенной меткой времени вместо реальной.
  • Порядок, в котором хранятся файлы, может отличаться. Большинство файловых систем не дают никаких конкретных гарантий относительно порядка, в котором файлы перечислены в каталоге, и tar перечисляет их по мере их поступления. (Вы можете увидеть порядок с помощью ls -U .) В GNU tar 1.28 появилась новая опция - sort = name . В более старых версиях или других реализациях вы можете получить воспроизводимый порядок файлов, построив отсортированный список имен файлов и передав его в tar:

     find. -print0 | LC_ALL = C sort -z | tar --no-recursion -Jcf ../archive.tar.xz -T - 
     

Возможно, вас заинтересует вики-страница Debian о воспроизводимых сборках .

3
20.08.2021, 11:45

Теги

Похожие вопросы