情况如下:
需要通过网络在 2 个远程服务器之间从单个目录复制大约 1000 万个小文件(每个 1k - 50k)。尝试使用 FTP 和 SCP,但失败了,因为所有文件都在单个目录中,并且不知何故冻结了传输。
问题是无法使用 TAR,因为在源服务器上 SSH 不可用,只有在目标服务器上我才有完全控制权。
每天的文件数量都会增加 10-40k,因此进行最终复制变得越来越困难,任何建议都将非常感谢。
谢谢,R。
编辑:澄清一下情况:源服务器(所有文件所在的位置)是一台普通的共享托管服务器,可以访问 PHP/Mysql 等(不过 PHP 可以执行常见的 Linux 命令)。我想要传输文件的目标服务器是 VPS 实例上的完全 root 访问权限(SSH 等)。
现在,我可以 tar/zip 等文件,但不知道要花多长时间才能存档我拥有的所有 10/20 百万个文件(小文件)。如果我通过 PHP 执行此操作,在某个时候会出现超时,或者我可以在后台模式下发送 shell exec 并运行,或者其他什么?
另一个选择是以某种方式从目标服务器提取文件,数量很少或?任何建议都将不胜感激,因为我已经感到沮丧了。非常感谢已经做出的回复。
答案1
您说:“每天的文件数量都在增加。”如果您可以阻止它,请使用以下命令从 FTP 服务器递归提取所有文件wget
:
wget -m ftp://username:[email protected]
如果在完全迁移到新服务器之前无法停止添加新文件,请使用curlftpfs
(在新服务器上)将 FTP 主机挂载为本地目录。然后,使用cp
和-u
标志r
。您可以在操作中断后在多个会话中使用它(-u
处理此事)。
挂载 FTP 主机后,您还可以使用rsync
。
答案2
根据文件的命名方式,您可以尝试使用 tar/zip 块,然后尝试 SCP 或 FTP。您没有指定文件类型,但如果它们是日志或其他文本,那么您应该获得合理的压缩。使用通配符存档以 a、foo、bar123 等开头的所有文件。
例如:
tar -czvf chunk01.tar.gz a*
tar -czvf chunk02.tar.gz b*
tar -czvf chunk03.tar.gz c*
tar -czvf chunk03.tar.gz d*
tar -czvf chunk03.tar.gz e*
...