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

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

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

21558 次点击
所在节点    Linux
59 条回复
66450146
2018-11-28 00:24:57 +08:00
多进程不见得更快,而且在出错的时候恢复现场更麻烦

拷大量文件还是用 rsync 吧
likuku
2018-11-28 00:53:40 +08:00
移动硬盘全盘加密后直接快递 /人肉到 IDC,直接连服务器上对拷,当然也是要用 rsync,能断点续传,能显示进度
likuku
2018-11-28 00:55:24 +08:00
传输压缩?你图片若已经是 jpg,gif 之类已经被高度压缩过的图,那么传输压缩没啥卵用。
JasonYo
2018-11-28 00:59:12 +08:00
rsync
wwqgtxx
2018-11-28 01:02:59 +08:00
cp 是单线程的不是很正常么,哪个系统自带的复制是多线程的,而且在绝大部分情况下多线程复制反而会更慢
congeec
2018-11-28 01:11:55 +08:00
tar
flynaj
2018-11-28 01:26:23 +08:00
rsync 后台慢慢来,这个瓶颈应该是你的网络上传速度,按家用带宽 4m 上行,一个小时 1g,最快也要 200 小时。
yuedingwangji
2018-11-28 01:52:49 +08:00
哈哈,我现在就是直接拷到硬盘硬盘,然后到机房那里去复制数据的,但感觉用 cp 真的好慢呀
xeaglex
2018-11-28 01:58:27 +08:00
那你自己用脚本异步执行 cp 不就好了
ysc3839
2018-11-28 01:59:54 +08:00
个人认为复制的瓶颈在于硬盘读写速度。如果你使用多进程复制,会导致硬盘在多个位置读写,速度会比顺序读写慢很多的。
johnnie502
2018-11-28 02:38:56 +08:00
先打包,不用压缩,比如用楼上的 tar,这样开销小,传的比较快
dsnake1984
2018-11-28 03:03:56 +08:00
我用 cos/oss 花点钱 还是挺爽的
ryd994
2018-11-28 04:44:25 +08:00
震惊,Linux 下最好用的复制命令居然不是 cp
tar c -C /src/ | tar xv -C /dst/
cp 慢主要是没有缓存还每文件一次 sync。这个 tar 命令实际上是利用 pipe buffer。
另外,rsync 也可以用于本地,不妨试试
ericgui
2018-11-28 05:28:38 +08:00
scp
clino
2018-11-28 07:38:01 +08:00
上面用 tar 的方法应该是很好的,如果是远程我记得用 ssh 也能用管道
hawhaw
2018-11-28 07:46:06 +08:00
scp 走的是 ssh 性能会有损失,建议服务器直接 nc 开个口子接收数据再传给 tar 解压缩,客户端上用 tar 打包再扔给 nc 发给服务器( nc 开的那个口)
congeec
2018-11-28 08:04:52 +08:00
@hawhaw 这种方案必须保证链接够稳定,不会断掉。还是 rsync 通用
crystone
2018-11-28 08:12:54 +08:00
文件多就打包传啊,有没有压缩无所谓。如 ls 所言的
l4ever
2018-11-28 08:26:25 +08:00
曾经花了一天时间从公司把 400G JPG,pdf 等资源用 rsync 上传到服务器上的路过.
挂机放那里不管他呗.
liangzi
2018-11-28 08:34:44 +08:00
rsync or Syncthing

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

https://www.v2ex.com/t/512145

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

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

© 2021 V2EX