为什么“tar -cSf file.tar源代码”内存不足?

我试图通过制作一个tar包来备份66GB到NAS,但是“tar -cSf …”在技嘉62之后退出时出现“内存耗尽”错误。我的Linux机器有一个千兆字节的RAM和一个千兆字节交换空间。

(编辑)我再次尝试了tar放弃的地方,tar很快又放弃了,所以看起来可能会遇到处理特殊文件的麻烦。

这些数据出乎意料地难以备份。 rsync的速度比tar慢4倍,因为NAS不是很快,而且由于'peer reset'而退出。 'cp'在cifs共享上无法正常工作,因为它无法创build特殊文件。 有没有更好的办法?

-S正在检查稀疏文件(那些不是所有文件盘区实际上是在磁盘上物理分配的文件)。 这可能会耗尽内存。 尝试运行它没有-S(压缩它,如果你真的想要),看看是否能解决这个问题。

 tar cf foo.tar * 

要么

 tar czf foo.tar.gz * 

我不知道为什么,但我可以build议你尝试类似的东西

 tar -L 32212254720 -f piece1.tar -f piece2.tar -f piece3.tar <path> 

这将每30 GB创build一个文件。 如果您达到120 GB的标记,则需要添加第四个文件(-f piece4.tar)

如果这仍然失败,你可以尝试更小的部分,并写一个脚本来生成命令行(因为命令行80 -f参数将是一个痛苦写:-))

尝试传递–hard-dereference选项。 这将禁用硬链接跟踪,这要求内存与正在备份的inode数量成比例。 尝试备份问题文件时,尝试对tar进程进行临时分析也可能很有趣。