将大数据归档为多个部分

Jos*_*nar 5 rhel tar archive gzip

我正在处理大数据,我需要归档一个大于 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 -

Kus*_*nda 5

如果你有足够的空间来存储压缩档案,那么可以一次性创建和分割档案(假设是 GNU split):

tar -c -vz -f - directory | split --additional-suffix=.gz.part -b 1G
Run Code Online (Sandbox Code Playgroud)

这将创建名为 等的文件xaa.gz.partxab.gz.part每个文件都是存档的 1G 压缩位tar

要提取存档:

cat x*.gz.part | tar -x -vz -f -
Run Code Online (Sandbox Code Playgroud)

如果文件系统无法存储压缩存档,则需要将存档部分写入另一个文件系统,以替代某些远程位置。

在该远程位置,例如:

ssh user@serverwithfiles tar -c -vz -f - directory | split --additional-suffix=.gz.part -b 1G
Run Code Online (Sandbox Code Playgroud)

这会将压缩存档ssh从具有大目录的计算机传输到本地计算机并将其拆分。