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 条回复
Rekkles
2018-11-28 14:59:40 +08:00
懒人的我通常都是打包 开个 80 端口 然后 wget
msg7086
2018-11-28 15:19:38 +08:00
打包传用 tar,目录直传用 rsync。cp 是复制,但不是给你复制那么多文件用的。
cp 是一个底层命令,也就是要做到「最简单」,「最不容易出问题」,要是做成多线程的话非让人打死不可。

@stebest 要速度的话,rsync 几乎总是最快的。
Gathaly
2018-11-28 17:14:26 +08:00
tar | scp
ryd994
2018-11-28 19:43:09 +08:00
@Gathaly 都 tar 了还 scp 干嘛
tar cz -C /src/ | ssh user@host tar xzv -C /dst/
还带压缩哦

然后你会发现这么蛋疼还是 rsync 靠谱,毕竟能断点续传
wanderpoet
2018-11-28 19:47:17 +08:00
@ryd994 #13 学习了
qmake
2018-11-28 19:54:28 +08:00
远程机器建一个稍微大一点的 lv 然后 dd 过去 如果要看进度的话 用 pv
tanpengsccd
2018-11-28 21:32:17 +08:00
学习了。
cy97cool
2018-11-28 23:23:20 +08:00
大量小文件推荐用 seaweedfs
https://github.com/chrislusf/seaweedfs
to store billions of files! to serve the files fast!
SeaweedFS implements an object store with O(1) disk seek, and an optional Filer with POSIX interface.
enjoyCoding
2018-11-28 23:34:40 +08:00
可不可以拆成多个文件夹 多个窗口 cp ?
timothyye
2018-11-28 23:35:39 +08:00
今天正好服务器搬家,rsync 又快又棒
ymj123
2018-11-28 23:56:56 +08:00
单纯论速度 scp 比 rsync 快的,我实验过很多次。当然楼上说 rsync 有断点续传功能,那挺好。还有 scp 不能拷贝软链接,rsync 可以。你这个就 tar 打包,然后 scp 慢慢传吧。
figo
2018-11-29 00:43:51 +08:00
老实点吧,作为过来人告诉你最稳定的办法就是先 tar 然后在 scp。
WilliamHL
2018-11-29 00:47:30 +08:00
rsync 真的很好用
scholar
2018-11-29 00:55:57 +08:00
看看 phzip2 的介绍,这个压缩了可以调用多线程。我们计算数据都是 Gb 来的,用它压缩比 tar 压缩成 tar.gz 等都快,压缩率也高很多!但不确定你这小文件众多的情况
ps1aniuge
2018-11-29 01:56:07 +08:00
rsync 需要安装,若是 win,winscp 最简单。支持多线程。
在选项===》传输===》后台里设定。
具体多少线程,根据 **基本跑满服务器带宽,不怎么波动** 为准。
noqwerty
2018-11-29 02:39:52 +08:00
上次备份服务器用的是 rsync -avzhP --progress
aa514758835
2018-11-29 08:40:55 +08:00
手写多线程 cp,代码不多的
realpg
2018-11-29 15:05:49 +08:00
rsync,或者 tar 直接把流通过 tcp 传输
lostsummer
2019-09-09 13:15:00 +08:00
内网环境下,磁盘 IO 是瓶颈,单磁盘服务器多进程 /线程无意义,还可能是负分,rsync 是最佳选择。

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

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

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

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

© 2021 V2EX