Rhel

將大數據歸檔為多個部分

  • July 5, 2018

我正在處理大數據,我需要歸檔一個大於 64 TB 的目錄。我無法在我的文件系統上創建如此大的文件(存檔)。不幸的是,所有在 Linux 上創建多部分存檔的建議解決方案都建議首先創建一個存檔,然後使用命令將其拆分為更小的文件split

我知道使用 fe 7zip 是可能的,但不幸的是,我不得不使用 RedHat 6 中內置的工具 - tar、gzip、bzip2 ……

我想知道創建一個腳本來詢問使用者最大卷大小。它會用 gzip 歸檔每個文件,拆分那些太大的文件,然後手動將它們合併成許多具有所選大小的 tars。這是一個好主意嗎?

有沒有其他可能用基本的 Linux 命令來實現大存檔劃分?

更新:

我已經在具有限制的最大文件大小的文件系統上測試了該解決方案並且它有效。tar將輸出直接重定向到命令的管道split已按預期工作:

tar -czf - HugeDirectory | split --bytes=100GB - MyArchive.tgz.

創建的文件已經很小,將它們合併在一起時不會創建超大文件:

cat MyArchive.tgz* | tar -xzf -

如果您有足夠的空間來儲存壓縮存檔,則可以一次性創建和拆分存檔(假設 GNU split):

tar -c -vz -f - directory | split --additional-suffix=.gz.part -b 1G

這將創建名為xaa.gz.partxab.gz.part的文件,每個文件都是tar存檔的 1G 壓縮位。

要提取存檔:

cat x*.gz.part | tar -x -vz -f -

如果文件系統不能儲存壓縮存檔,則需要將存檔部分寫入另一個文件系統,以替代某個遠端位置。

在那個遠端位置,例如:

ssh user@serverwithfiles tar -c -vz -f - directory | split --additional-suffix=.gz.part -b 1G

這會將壓縮存檔ssh從具有大目錄的機器傳輸到本地機器並拆分它。

引用自:https://unix.stackexchange.com/questions/452472