xz печать контрольной суммы crc

Вопрос или проблема

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

Как я могу проверить, что файлы идентичны, не распаковывая их? Поскольку они такие большие, я бы предпочел не распаковывать их, если это не обязательно.

Я знаю, что xz хранит контрольную сумму CRC, поэтому подумал, что это должно быть достаточно просто: просто напечатать и сравнить контрольные суммы CRC каждого файла. Однако команда xz -lxz -l -v) просто перечисляет контрольную сумму как тип “CRC64” вместо того, что на самом деле является контрольной суммой.

Вы беспокоитесь о времени/производительности декомпрессии или о хранении распакованных файлов?

Вы можете избежать хранения файлов, используя

xzcat file1 | sha256sum
xzcat file2 | sha256sum

и сравнивая результаты.

Кроме того, при достаточной детализации (xz -vvl file1) вы получите значение CRC64. Поскольку xz позволяет использовать различные алгоритмы контрольных сумм, возможно, ваши архивы были созданы с использованием различных алгоритмов, в этом случае это не поможет.

Если вас беспокоит время декомпрессии, я предположу, что ожидание ответа на StackExchange занимает немного больше времени…

xz -lvv покажет контрольную сумму содержимого в столбце CheckVal.

> echo foo > test
> xz --fast -kf test
> md5sum test.xz
73f4e719ee8a19d7afa90939e6340e0c  test.xz
> xz -lvv test.xz
test.xz (1/1)
...
  Blocks:
    Stream     Block      CompOffset    UncompOffset       TotalSize      UncompSize  Ratio  Check      CheckVal          Header  Flags        CompSize    MemUsage  Filters
         1         1              12               0              32               4  8.000  CRC64      f29c31305aacd7ff      16  cu                  8       1 MiB  --lzma2=dict=256KiB
...
> xz --best -kf test
> md5sum test.xz
fc821047713f85563b66cd1dc64b611b  test.xz
> xz -lvv test.xz
test.xz (1/1)
...
  Blocks:
    Stream     Block      CompOffset    UncompOffset       TotalSize      UncompSize  Ratio  Check      CheckVal          Header  Flags        CompSize    MemUsage  Filters
         1         1              12               0              36               4  9.000  CRC64      f29c31305aacd7ff      20  cu                  8      65 MiB  --lzma2=dict=64MiB
...

Ответ или решение

Чтобы проверить идентичность двух файлов, сжатых с помощью xz, без необходимости их разжатия, наиболее подходящим методом является использование контрольных сумм CRC, которые xz хранит в заголовке каждого сжатого файла. Однако команда xz -l отображает только тип контрольной суммы (CRC64), а не саму сумму. В этом ответе подробно расскажем о том, как получить контрольные суммы и корректно их сравнить.

1. Использование команды xz -lvv

Чтобы получить контрольные суммы, выполните команду xz -lvv <имя_файла>.xz. Эта команда выводит подробную информацию о сжатом файле, включая значение контрольной суммы. Например:

xz -lvv file1.xz

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

2. Использование xzcat и сравнение SHA256

Если вам необходимо более надежное средство проверки, помимо контрольных сумм CRC, можно рассмотреть использование команды xzcat. Этот метод позволяет генерировать и сравнивать контрольные суммы для разжатых данных, не занимая дополнительного места на диске:

xzcat file1.xz | sha256sum
xzcat file2.xz | sha256sum

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

3. Учитывайте различные алгоритмы контрольных сумм

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

4. Заключение

Таким образом, для проверки идентичности двух сжатых файлов xz без их разжатия можно использовать команду xz -lvv для извлечения контрольных сумм CRC64 или xzcat с последующим вычислением хешей с использованием SHA256. Выбор метода зависит от ваших требований к точности и удобству процесса. Пользуйтесь предложенными методами, чтобы эффективно проверять идентичность больших файлов и оптимизировать ваши рабочие процессы в IT.

Оцените материал
Добавить комментарий

Капча загружается...