解壓失敗
我正在處理將大文件從一台機器傳輸到另一台機器(600GB+),我正在使用
tar -cpvzf file.tar.gz -C PATH_TO_DIR DIR
完成焦油處理後,將完成以下操作:
split -d -b 2G file.tar.gz file_part_
這會創建一堆 file_part_00, file_part_01, … 直到整個文件被分成 2GB 塊。在傳輸文件之前,我遍歷 tar 被拆分的目錄中的每個部分,並使用以下等價物收集它們的 md5 雜湊:
md5sum PART_NAME >> list_md5.start
對每個部分進行雜湊處理後,我將執行以下操作:
sort -u list_md5.start
(這對它們進行排序並刪除重複項,只是為了安全起見)
然後這些部分按照它們在 list_md5.start 中的順序一個接一個地傳輸。一旦他們到達另一台電腦,他們的 md5 雜湊將使用相同的方法收集,但在不同的列表中,我們稱之為 list_md5_2.start。轉移後,在將零件重新組合在一起之前,我執行以下命令:
diff list_md5.start list_md5_2.start
如果沒有發現差異,我繼續下一部分。否則,我放棄並刪除所有部分。在將它們重新組合在一起時,我會執行以下操作:
cat file_part_* > file.tar.gz.incomplete
(不完整的存在是因為我有一個看門狗等待解壓它遇到的任何 .tar.gz)。一旦 cat 完成,文件將使用以下命令重命名:
mv file.tar.gz.incomplete file.tar.gz
此時,看門狗檢測到它並使用以下方法解壓它:
tar -C DEST -xzf file.tar.gz --totals --unlink-first --recursive-unlink
此時,我收到一個無法調試的錯誤:
Tar Failed 2 gzip: stdin: unexpected end of file tar: Unexpected EOF in archive tar: Unexpected EOF in archive tar: Error is not recoverable: exiting now /PATH/TO/DEST
解壓後,無論它是否失敗,都會刪除 tar(保留解壓失敗的大文件沒有意義)。
值得注意的是,有時 md5sum 不匹配,這也會導致程序停止(這是在
cat
組裝步驟之前檢查的)。我已嘗試確保名稱不是無效的。我嘗試將零件尺寸更改為更小的尺寸。我已經嘗試手動完成該過程,但仍然遇到 md5sum 不匹配或 EOF 錯誤的問題。
這一切都是在已經更新的 Ubuntu 機器上完成的(沒有更新待定)。
有誰知道如何解決這個問題?
通過添加額外的儲存空間解決了這個問題。具體來說,我添加了一個 2TB 硬碟,用於在 tar 拆分時保存它。最初,整個過程是在一個 6TB 硬碟上完成的,上面還有其他大文件,給我們最多 3TB 的儲存空間可以使用。當我們在後台進行大量下載時,我們注意到了這個問題,它佔用了大部分空間,從問題中重現了損壞的 tar 問題。
此解決方案可能不是最優雅的解決方案,但在 tar 化後刪除原始文件會涉及大量成本,這比簡單地添加額外儲存空間要花費更多時間。
萬一有人偶然發現了這個問題,並且要走與我相同的路線,這是我添加新硬碟所遵循的步驟: https ://askubuntu.com/a/125277/
我想指出有人確實建議檢查儲存空間是否足夠,我想給予他們信任。這裡的建議:
確保您的第一個 tar -cpvzf … 正在執行且沒有任何錯誤,返回碼(echo $?)為 0 並且磁碟空間足夠。–賽勒斯8 月 16 日 19:37
然而,這個建議在當時是不完整的,因為有足夠的儲存空間用於 tarring,所以它從未返回任何錯誤。
Rsync 是用於 Unix 和 Linux 類系統的免費軟體實用程序,可將文件和目錄從一台主機複製到另一台主機。
使用 rsync 將文件從一個系統傳輸到另一個系統。您可以使用螢幕和啟動 rsync 然後分離螢幕
Rsync 被認為是一個輕量級應用程序,因為文件傳輸是增量的——在初始完整傳輸之後,只有文件中已更改的位會被傳輸。Rsynch 通常用於通過將數據同步到防火牆外的遠端電腦來提供異地備份。它也用於鏡像網站。