我正在处理大数据,需要归档一个大于 64 TB 的目录。我无法在我的文件系统上创建这么大的文件(存档)。不幸的是,所有在 Linux 上创建多部分存档的建议解决方案都建议首先创建存档,然后使用split
命令将其分割成更小的文件。
我知道 fe 7zip 是可能的,但不幸的是我被迫使用 RedHat 6 中内置的工具 - tar、gzip、bzip2...
我想知道如何创建一个脚本来询问用户最大卷大小。它会使用 gzip 归档每个文件,拆分那些太大的文件,然后手动将它们合并到具有所选大小的许多 tar 文件中。这是一个好主意吗?
还有其他方法可以使用基本的 Linux 命令来实现大档案划分吗?
更新:
我已经在具有最大文件大小限制的文件系统上测试了该解决方案,并且它有效。将tar
输出直接重定向到命令的管道split
已按预期工作:
tar -czf - HugeDirectory | split --bytes=100GB - MyArchive.tgz.
创建的文件已经很小,将它们合并在一起时不会创建超大文件:
cat MyArchive.tgz* | tar -xzf -
答案1
如果你有足够的空间来存储压缩档案,那么可以一次性创建和分割档案(假设是 GNU split
):
tar -c -vz -f - directory | split --additional-suffix=.gz.part -b 1G
这将创建名为 等的文件xaa.gz.part
,xab.gz.part
每个文件都是存档的 1G 压缩位tar
。
要提取存档:
cat x*.gz.part | tar -x -vz -f -
如果文件系统无法存储压缩存档,则需要将存档部分写入另一个文件系统,以替代某些远程位置。
在该远程位置,例如:
ssh user@serverwithfiles tar -c -vz -f - directory | split --additional-suffix=.gz.part -b 1G
这会将压缩存档ssh
从具有大目录的计算机传输到本地计算机并将其拆分。
答案2
对于基本的 UNIX 命令,除了分割现有文件之外,我没有其他办法。
但是安装star
和使用 的多卷功能怎么样star
?
这样做的优点是可以检查零件是否按正确的顺序提供。