Недавно я перешел с 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
Если все контрольные суммы различаются, то несжатые файлы разные.