Compression

BZ2 備份文件的大小每天都沒有變化

  • October 8, 2010

最近我從 切換zipbz2壓縮夜間數據庫轉儲。我使用的命令是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)。

引用自:https://serverfault.com/questions/189059