Linux 如何快速拷大量文件, cp 是单进程的?

2018-11-28 00:21:05 +08:00
 yuedingwangji

RT,最近需要给服务器传一些图片,大概有 200 多 G,文件个数更加是不知道多少了,直接考虑先压缩文件夹在传,但是后来想了一下,图片压缩率太小了,而且这样压缩的时候也很长,到时放到服务器还得解压,感觉反而更慢了, 网上有些说可以在复制的时候用流来压缩,这方法还真没实际测试过,不知道怎么样,最后我还是用古老的 cp 来操作的, 操作的时候,我观察进程的 fd 发现,cp 进程居然每次只有 2 个文件符,一个指向源文件,一个指向目标文件, 这是不是就说明 cp 复制了单进程的,如果是的话,那 cp 复制也太慢了吧, 每次复制一个文件,那我 10 几 w 的文件要复制到什么时候呀,求 v2 大神科普

22773 次点击
所在节点    Linux
59 条回复
mamax
2018-11-28 08:41:10 +08:00
图片是压缩率太大,搞反了
yidinghe
2018-11-28 08:42:08 +08:00
如果有几万甚至几十万小文件,打包再拷贝通常会更快
zhongyiio
2018-11-28 08:42:38 +08:00
rsync -avzP ...,一定要考虑断点续传,就是这里的 P,否则网络一个闪断之类的就傻了
smdbh
2018-11-28 08:47:38 +08:00
挂一晚就好了
tnt666666
2018-11-28 08:52:19 +08:00
瓶颈是 io,不是 cpu
arrow8899
2018-11-28 09:10:38 +08:00
这个跟你的网速或硬盘速度有关系吧,单线程多线程其实影响不大
fcten
2018-11-28 09:15:20 +08:00
随机读取大量小文件本来就很慢,多线程也没用
xiaogui
2018-11-28 09:17:05 +08:00
如果是大量碎小文件的话,推荐打成 tar 包 ,不要压缩,比如每个包 1 G,然后拷贝过去。
aa514758835
2018-11-28 09:38:56 +08:00
手写一个多线程的 cp,我记得之前写过,没几行
pierre1994
2018-11-28 09:42:11 +08:00
线程或进程过多,会有磁盘随机 IO 问题
kernel
2018-11-28 09:52:59 +08:00
@ericgui scp 200G 小文件要复制到明年
liuxu
2018-11-28 10:43:05 +08:00
说真的,大文件邮寄硬盘更快,毕竟你有 100M 电信,最多也就 10M 上传
zhongyiio
2018-11-28 10:58:46 +08:00
@kernel 联通 100m 带宽,上传速度能到 15MB/s,也就十几个小时吧
omph
2018-11-28 11:04:58 +08:00
写个脚本,定量 tar 打包,然后网络流
liwl
2018-11-28 11:08:16 +08:00
瓶颈是带宽...不是 IO
kernel
2018-11-28 11:12:54 +08:00
@zhongyiio scp 和 rsync 不同。每复制一个文件要停一会。感觉是每复制一个文件都要断开新开一次连接。对于大量小文件效率比 rsync 低几十倍。
TotoroSora
2018-11-28 11:13:33 +08:00
不管是硬盘对拷还是网络流,感觉都是先 tar 打包比较好
likuku
2018-11-28 11:16:18 +08:00
#13 @ryd994 tar 的办法,哈哈,想起来当年还不知道 rsync 时,硬盘对拷系统就这么用 tar 和管道来着
liberize
2018-11-28 12:43:08 +08:00
刚用 parsync 传了 800G 的数据到服务器,平均每个文件 10M 吧,瓶颈在上行带宽
stebest
2018-11-28 14:50:14 +08:00
@ryd994
@zhongyiio

@hawhaw
到这里我想问下,如果使用 Samba 协议挂载远程目录到本地磁盘,然后使用 cp 命令和 rsync 命令,哪个快?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/512145

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX