Назад | Перейти на главную страницу

Файлы резервных копий BZ2 не различаются по размеру изо дня в день

Недавно я перешел с zip к bz2 для сжатия ночных дампов баз данных. Я использую команду tar cj. Старый zip файлы всегда будут немного отличаться по размеру изо дня в день:

-rw-r--r--  1 mysql mysql 1192139 Aug 20 22:00 mysql_full_export.Fri.zip
-rw-r--r--  1 mysql mysql 1192425 Aug 23 22:00 mysql_full_export.Mon.zip
-rw-r--r--  1 mysql mysql 1192140 Aug 21 22:00 mysql_full_export.Sat.zip
-rw-r--r--  1 mysql mysql 1192145 Aug 22 22:00 mysql_full_export.Sun.zip
-rw-r--r--  1 mysql mysql 1192137 Aug 19 22:00 mysql_full_export.Thu.zip
-rw-r--r--  1 mysql mysql 1192403 Aug 24 22:00 mysql_full_export.Tue.zip
-rw-r--r--  1 mysql mysql 1186645 Aug 25 22:00 mysql_full_export.Wed.zip

В то время как новый bz2 файлы показывают одинаковые размеры файлов за последнюю неделю:

-rw-r--r--  1 mysql mysql 972800 Oct  1 22:00 mysql_full_export.Fri.bz2
-rw-r--r--  1 mysql mysql 972800 Oct  4 22:00 mysql_full_export.Mon.bz2
-rw-r--r--  1 mysql mysql 972800 Oct  2 22:00 mysql_full_export.Sat.bz2
-rw-r--r--  1 mysql mysql 972800 Oct  3 22:00 mysql_full_export.Sun.bz2
-rw-r--r--  1 mysql mysql 972800 Oct  7 22:00 mysql_full_export.Thu.bz2
-rw-r--r--  1 mysql mysql 972800 Oct  5 22:00 mysql_full_export.Tue.bz2
-rw-r--r--  1 mysql mysql 972800 Oct  6 22:00 mysql_full_export.Wed.bz2

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

Следовать за:

Правильный ответ ниже кажется лучшим объяснением. Предложение вычислить контрольную сумму md5 также оказалось полезным, поскольку оно подтвердило, что файлы действительно разные:

$ md5sum *.bz2
7bec25e80644645e6b2d5b417bb4627d  mysql_full_export.Fri.bz2
9cca30e7ed4fb536976ef9d8705e0466  mysql_full_export.Mon.bz2
bc9b9cd1e5a5e552811bff80192b1b43  mysql_full_export.Sat.bz2
7ebbed98f7153a6cafe61836d9a6440d  mysql_full_export.Sun.bz2
ad1af98a0ecf90bef1dc1c0b3dedb101  mysql_full_export.Thu.bz2
b399d30e03c200c1ad03bde391e5e682  mysql_full_export.Tue.bz2
b14b4d1bb22ef39b9ebc2f668a2f520d  mysql_full_export.Wed.bz2

Другая мысль заключается в том, что формат файла tar всегда выравнивается по границе 512 байт, он дополняет его NUL символов, если он короче (для каждого файла).

Теперь разрешено, что tar должен быть создан до bz2, поэтому он все равно должен отличаться по размеру (теоретически). Но, может быть, он сначала сжимается, а затем помещает его в tar, что приводит к выравниванию по границе 512 байт?

Возможно, в архиве скриптов есть ошибка. Сравнить файлы:

cmp mysql_full_export.Wed.bz2 mysql_full_export.Tue.bz2

Сравните содержимое архивов (используйте diff или cmp).

В каталог, содержащий ваши файлы bz2, вставьте эту команду:

for file in *.bz2;do echo "checksum for ${file/.bz2/}: $(bunzip2 -c $file|md5sum)";done

Если все контрольные суммы различаются, то несжатые файлы разные.