![tar 可以并行归档文件吗?](https://linux22.com/image/90173/tar%20%E5%8F%AF%E4%BB%A5%E5%B9%B6%E8%A1%8C%E5%BD%92%E6%A1%A3%E6%96%87%E4%BB%B6%E5%90%97%EF%BC%9F.png)
我正在尝试通过 Amazon S3 在多台计算机之间移动大型目录的部分内容(约 40 GiB 和约 800 万个文件),并且由于需要保留符号链接,我对目录进行压缩,然后上传生成的文件,而不是直接同步到 S3。
大多数文件已经压缩,因此我没有使用 gzip 或 bzip 压缩存档。我的命令是这样的
tar --create --exclude='*.large-files' --exclude='unimportant-directory-with-many-files' --file /tmp/archive.tar /directory/to/archive
在运行这个程序时,我注意到tar
在八核机器上似乎只使用了一个核心。根据该核心的挂钩、低平均负载 (~1) 以及我看到的统计数据,我的印象iostat
是该操作实际上是 cpu 绑定的,而不是磁盘绑定的,正如我所期望的那样。由于它很慢(约 90 分钟),我有兴趣尝试并行化 tar 以利用额外的核心。
关于此主题的其他问题重点在压缩或者创建多个档案(由于目录结构的原因,这在我的情况下并不容易)。似乎大多数人都忘记了您甚至可以在不压缩的情况下创建 tarball。
答案1
由于tar
存档的性质是按顺序存储输出中的文件,因此除非创建多个存档,否则无法并行化该过程。
请注意,操作的瓶颈可能是硬盘。因此,即使您确实将任务拆分为两个或多个进程,它也不会运行得更快,除非它们在不同的驱动器上运行。