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校验和的build议也是有帮助的,因为它证实这些文件确实是不同的:

 $ 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字节的边界上alignment,如果它更短(每个文件),则用NUL字符NUL

现在批准了,tar应该在bz2之前完成,所以它的大小应该是不一样的(理论上)。 但也许它先压缩,然后把它放到焦油中,使它alignment到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 

如果校验和全部不同,则解压缩的文件是不同的。