Linux

創建包含校驗和的 tar 文件

  • December 21, 2015

這是我的問題:我需要將很多(最多 60 TB)大文件(通常每個 30 到 40 GB)歸檔到 tar 文件中。我想在歸檔之前對這些文件進行校驗和(md5、sha1 等);但是,讀取每個文件兩次(一次用於校驗和,兩次用於 tar’ing)或多或少是實現非常高的歸檔性能的必要條件(LTO-4 需要持續 120 MB/s,並且備份視窗是有限的)。

所以我需要一些方法來讀取文件,在一側提供校驗和工具,並在另一側建構一個 tar 到磁帶,沿著:

tar cf - files | tee tarfile.tar | md5sum -

除了我不想要整個存檔的校驗和(這個範例 shell 程式碼就是這樣做的),而是存檔中每個單獨文件的校驗和。

我研究過 GNU tar、Pax、Star 選項。我查看了Archive::Tar的來源。我認為沒有明顯的方法可以實現這一目標。看來我必須用 C 或類似語言手動建構一些東西才能實現我需要的東西。Perl/Python/etc 根本不會降低性能,並且各種 tar 程序都缺少必要的“外掛架構”。在我開始編寫程式碼之前,有誰知道任何現有的解決方案?

在繼續重寫 tar 之前,您可能想要分析兩次讀取數據的快速簡便的方法,因為它可能不會比一次執行慢多少。

這裡實現了兩遍方法:

http://www.g-loaded.eu/2007/12/01/veritar-verify-checksums-of-files-within-a-tar-archive/

單線:

 tar -cvpf mybackup.tar myfiles/| xargs -I '{}' sh -c "test -f '{}' && 
 md5sum '{}'" | tee mybackup.md5

雖然 md5sum 確實與 tar 並行從磁碟讀取每個文件,而不是通過管道獲取數據流,但 Linux 磁碟記憶體應該使第二次讀取從記憶體緩衝區中讀取,這不應該真的比標準輸入讀取。你只需要確保你的磁碟記憶體中有足夠的空間來儲存足夠的每個文件,第二個閱讀器總是從記憶體中讀取,並且沒有遠遠落後於必須從磁碟檢索

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