gzip 是否為 .tar 新增完整性/crc 檢查?

gzip 是否為 .tar 新增完整性/crc 檢查?

我運行命令:

tar -cf myArchive.tar myDirectory/
gzip myArchive.tar

然後我將文件複製到許多不可靠的媒體上,然後我使用以下方法解壓縮它:

tar -xzf myArchive.tar.gz

事實上,我壓縮了 tar 包,這是否會以任何方式保證解壓縮內容的完整性,或至少保證 CRC?

答案1

tar它本身不會寫下校驗和以後比較。如果您gzip存檔tar,您就可以擁有該功能。

tar使用compress.如果您-Z在建立存檔時使用該標誌,則在讀取或寫入存檔時tar將使用該程式。compressgzip線上說明頁:

標準壓縮格式的設計不允許一致性檢查。

但是,您可以使用該-z參數。然後tar透過 讀取和寫入存檔gzip。並gzip寫入一個crc校驗和。若要顯示該校驗和,請使用該指令:

$ gzip -lv archive.tar.gz
method  crc     date  time           compressed        uncompressed  ratio uncompressed_name
defla 3f641c33 Sep 25 14:01               24270              122880  80.3% archive.tar

gzip線上說明頁:

當使用前兩種格式時(gzip 或 zip 的意思是),gunzip 檢查 32 位 CRC。

答案2

是的gzip 檔案格式包含一個 CRC-32 校驗和,可用於偵測存檔是否已損壞。

當然,雖然校驗和讓gzip告訴如果您發現存檔已損壞,它實際上不會做任何事情來幫助您恢復存檔內的資料。因此,它對於檢查您剛剛從網路上下載的存檔是否確實正確下載等事情非常有用。

如果您確實擔心透過不可靠的媒體儲存或傳輸檔案,您可能需要考慮使用像標竿這實際上提供了糾錯除了錯誤檢測之外。當然,這種格式的缺點是糾錯所需的冗餘必然會稍微增加檔案大小。

答案3

tar沒有完整性檢查。例子:

$ echo JJJJJJJJJJJJJJJJJJ > b
$ tar cvf a.tar b
$ sed -i s/JJJJJJJJJJJJJJJJJJ/tttttttttttttttttt/g a.tar
$ tar xvf a.tar
$ cat b

tttttttttttttttttt

看,歸檔的內容a.tar發生了變化,因此文件的b內容完全不同,但 tar 沒有註意到這一點。這對於任何 tar 都是如此,包括具有兩種 tar 格式的 tar-1.28(最新)--format=gnu --format=posix。該pax命令(替代 tar 閱讀器)pax -r < a.tar也不會注意到存檔更改。

答案4

PKZip 軟體包 (win/dos) 附帶一個名為 PKZipFix 的程序,該程序可以從損壞的存檔中恢復檔案。我過去使用過這個實用程序,它可以從無法解壓縮的中等損壞的存檔中恢復檔案。

相關內容