osh*_*nen 17 tar memory compression out-of-memory
我有 500 万个文件,占用了大约 1TB 的存储空间。我需要将这些文件传输给第三方。
做到这一点的最佳方法是什么?我曾尝试使用 .tar.gz 减小大小,但即使我的计算机有 8GB 内存,我也会收到“系统内存不足”错误。
是蜗牛邮件文件的最佳解决方案吗?
Cel*_*ada 27
评论中提供的其他信息表明 OP 正在使用 GUI 方法来创建.tar.gz文件。
GUI 软件通常比等效的命令行等效软件包含更多的膨胀,或者为了某些“额外”功能(例如进度条)而执行额外的不必要任务。如果 GUI 软件试图收集内存中所有文件名的列表,我不会感到惊讶。没有必要为了创建档案而这样做。专用工具tar和gzip被defintely设计工作流与输入和输出,这意味着它们可以处理输入和输出比内存要大很多。
如果您避免使用 GUI 程序,您很可能可以使用完全正常的日常tar调用来生成此存档,如下所示:
tar czf foo.tar.gz foo
Run Code Online (Sandbox Code Playgroud)
foo包含所有 500 万个文件的目录在哪里。
这个问题的其他答案为您提供了一些额外的替代tar命令,如果您想将结果分成多个部分等,请尝试使用这些命令...
pol*_*mon 15
“500 万”个文件,总共 1TB?那么您的文件必须非常小。我只是尝试rsync:
rsync -alPEmivvz /source/dir remote.host.tld:/base/dir
Run Code Online (Sandbox Code Playgroud)
如果您没有那个 - 或者您的用例不允许使用rsync,我至少会检查是否7z适用于您的数据。可能不是,但我认为它仍然值得一试:
7z a archive.7z /source/dir
Run Code Online (Sandbox Code Playgroud)
或者,如果您对7z至少尝试制作.tar.xz存档感到不舒服:
tar cJv archive.tar.xz /source/dir
Run Code Online (Sandbox Code Playgroud)
(应该注意的是,旧版本的tar不创建.tar.xz档案,而是.tar.lzma在使用J开关时创建档案。即使是旧版本的tar,也不J完全支持该标志。)
由于您使用 GUI 程序来创建这些文件,我假设您使用命令行界面感觉有点不舒服。
为了方便从命令行界面创建、管理和提取档案,有一个名为atool. 它几乎适用于我见过的所有常见发行版,并且几乎适用于我偶然发现的每个档案,除非那些非常晦涩的档案。
检查您的发行版是否atool在其存储库中,或者在工作场所环境中要求您的管理员安装它。
atool 安装一堆符号链接到自己,所以打包和解包变得轻而易举:
apack archive.tar.xz <files and/or directories>
Run Code Online (Sandbox Code Playgroud)
创建存档。
aunpack archive.7z
Run Code Online (Sandbox Code Playgroud)
展开存档。
als archive.rar
Run Code Online (Sandbox Code Playgroud)
列出文件内容。
创建什么样的档案atool,通过命令行中档案的文件扩展名来识别。
除非您可以比 25:1 压缩做得更好,否则您不太可能在发送蜗牛邮件之前从压缩中获得任何好处,除非您有一些可以与第三方交换的硬件磁带格式。
最大的常见存储是蓝光,大约可以获得 40Gb。您需要对数据进行 25 比 1 压缩才能使其适合该数据。如果您的第三方只有 DVD,您需要 125:1(大约)。
如果您无法匹配这些压缩数字,请使用普通光盘,将其复制并通过邮件发送给第三方。在那种情况下,运送比 1Tb 驱动器还小的需要压缩的东西简直是疯了。
您只需将其与使用ssh -C(标准压缩)或最好rsync与压缩进行比较即可通过网络复制文件,无需预先压缩和 tar。1Tb 在网上移动并非不可能,但需要一段时间。