我有500万个文件,它们占用了大约1TB的存储空间。我需要将这些文件传输给第三方。
最好的方法是什么?我曾尝试使用.tar.gz减小大小,但是即使我的计算机具有8GB RAM,我也会收到“系统内存不足”错误。
是将文件蜗牛发送过来的最佳解决方案吗?
tar
应该只是存档文件增量,因为它列出了他们,从来没有建立在内存中的列表。但同样,请显示您正在使用的确切命令。另外,所有文件都在同一目录中还是目录结构很深?
我有500万个文件,它们占用了大约1TB的存储空间。我需要将这些文件传输给第三方。
最好的方法是什么?我曾尝试使用.tar.gz减小大小,但是即使我的计算机具有8GB RAM,我也会收到“系统内存不足”错误。
是将文件蜗牛发送过来的最佳解决方案吗?
tar
应该只是存档文件增量,因为它列出了他们,从来没有建立在内存中的列表。但同样,请显示您正在使用的确切命令。另外,所有文件都在同一目录中还是目录结构很深?
Answers:
注释中提供的其他信息表明OP正在使用GUI方法来创建.tar.gz
文件。
GUI软件通常比等效的命令行软件包含更多的膨胀,或者由于某些“额外”功能(例如进度条)而执行其他不必要的任务。如果GUI软件尝试收集内存中所有文件名的列表,这不会令我感到惊讶。无需执行此操作即可创建档案。专用工具tar
和gzip
明确设计用于处理流输入和输出,这意味着它们可以处理比内存大得多的输入和输出。
如果您避免使用GUI程序,则很可能可以使用完全正常的日常tar
调用来生成此存档,如下所示:
tar czf foo.tar.gz foo
这里foo
是包含所有的500万个文件的目录。
该问题的其他答案为您提供了两个其他替代tar
命令,以供您尝试将结果分成多份等时使用...
“五百万”文件,总共1TB?然后,您的文件必须很小。我只是尝试rsync
:
rsync -alPEmivvz /source/dir remote.host.tld:/base/dir
如果您没有使用它-或您的用例不允许使用rsync
,那么我至少会检查是否7z
可以处理您的数据。可能没有,但我认为仍然值得尝试:
7z a archive.7z /source/dir
或者,如果您不满意7z
,至少尝试进行.tar.xz
存档:
tar cJv archive.tar.xz /source/dir
(应注意,较旧的版本tar
不会创建.tar.xz
档案,但.tar.lzma
在使用J
开关时会创建档案。即使较旧的版本tar
,也J
完全不支持该标记。)
由于您使用的是GUI程序来创建这些文件,因此我假设您对使用命令行界面感到不舒服。
为了方便从命令行界面创建,管理和提取档案,有一个名为的小实用程序atool
。我所见过的几乎所有常见发行版都可以使用它,并且几乎可以找到我偶然发现的每个存档,除非那些毫无希望的晦涩难解的存档。
atool
在工作环境中时,请检查发行版中是否包含发行版,或要求管理员安装发行版。
atool
将一堆符号链接安装到自身,因此打包和拆包变得轻而易举:
apack archive.tar.xz <files and/or directories>
创建一个档案。
aunpack archive.7z
扩展档案。
als archive.rar
列出文件内容。
创建哪种归档文件,atool
可以通过命令行中归档文件的扩展名来识别。
rsync
是,如果(当)连接断开,则rsync
可以在中断的地方进行连接。
除非您做得比25:1的压缩效果好,否则除非在蜗牛硬件上可以交换第三方的某种硬件磁带格式,否则不可能在蜗牛邮件发送之前对其进行压缩。
最大的通用存储是蓝光,大约可以为您提供40Gb。您需要对数据进行25到1的压缩,以使其适应于此。如果您的第三方只有DVD,则需要125:1(大约)。
如果您无法匹配这些压缩数字,请仅使用普通光盘,然后将其复制并蜗牛发送给第三方。在那种情况下,运送比需要压缩的1Tb驱动器小的东西是疯狂的。
您只需将其与使用ssh -C
(标准压缩)或最好rsync
使用压缩来通过网络复制文件进行比较,而无需预先压缩和压缩。1Tb并非不可能通过网络移动,但要花一些时间。
您考虑过洪流吗?对等网络传输可能是您的最佳选择:
您没有告诉您使用的是哪个操作系统,但是在谈论tar.gz压缩时,我假设您正在使用某些类似GNU / Linux的操作系统。为此,我建议传输。这是一个在Mac和Linux上运行的开源torrent软件。我之所以喜欢它,是因为开发人员致力于使其成为支持的每个GUI客户端的本机:没有跨平台语言。
您可以将此方法与压缩结合使用,但是您将失去对传输的部分进行优先级排序的能力。
7z是我的选择。它允许自动拆分档案,并支持多线程压缩。xz
不,尽管帮助消息中有说明,但不是。尝试:
7za a -v100m -m0=lzma2 -mx=9 -ms=on -mmt=$THREADS archive.7z directory/
输出分为100MB块(通过-v
开关更改)。
唯一真正的缺点是7z不会保留Unix元数据(例如,权限和所有者)。如果需要,请通过管道将其tar
输入7za
(请参阅man 7za
示例)。
The only real downside
但是有个缺点!
split
在.tar.gz文件上使用并保留元数据时,我不太明白使用7z进行拆分的意义。
tar
方法的特定文件时,这是一大进步。
我右键单击该文件夹,然后单击“创建档案”,然后选择.tar.gz选项。目录结构很深,超过500,000个目录
是的,祝你好运。而且GUI工具将尝试在相同的卷上执行此操作,这意味着a)您需要另外1Tb的可用空间,并且b)读取一个文件并将其附加到归档文件的头部跳动对于驱动器来说不会太健康。
我看到两种可能性:
1)从您的计算机到第三方的rsync。一个或另一个将需要一个不经常更改的全局IP地址。rsync 的巨大优势是,如果您由于任何原因而被打断,它都可以从中断处恢复。复制1Tb tarball是成功还是失败
2)购买一个1TB的外部驱动器,将其复制到其中,然后将驱动器交付。高延迟,但到达时确实带宽不错。各种在线备份服务对此进行了初始备份。
那个怎么样:
find /path | tar -T - -czf - | ssh remotehost "cd /target/dir/; tar xzf -"
find
搜索列出目录树tar -T -
从标准输入中读取列表-czf -
创建一个存档并写入stdout,z
对流进行gzipssh remotehost
使用登录到remotehost ssh
cd /target/dir/
转到目标目录tar xzf -
从标准输入中提取输入流借助fexsend,您可以将任意数量和大小的文件即时发送给任何收件人,请参阅:
http://fex.rus.uni-stuttgart.de:8080/usecases/downunder.html
当然,您需要一台F * EX服务器,但它是免费的:
.tar.gz
或复制生成的压缩文件时遇到问题吗?无论哪种方式,都有些奇怪,因为这两个操作都不会因为文件很大而消耗更多的内存。也就是说,两个操作都应该是流式的。请提供有关确切命令失败的更多信息。