
RT,最近需要给服务器传一些图片,大概有 200 多 G,文件个数更加是不知道多少了,直接考虑先压缩文件夹在传,但是后来想了一下,图片压缩率太小了,而且这样压缩的时候也很长,到时放到服务器还得解压,感觉反而更慢了, 网上有些说可以在复制的时候用流来压缩,这方法还真没实际测试过,不知道怎么样,最后我还是用古老的 cp 来操作的, 操作的时候,我观察进程的 fd 发现,cp 进程居然每次只有 2 个文件符,一个指向源文件,一个指向目标文件, 这是不是就说明 cp 复制了单进程的,如果是的话,那 cp 复制也太慢了吧, 每次复制一个文件,那我 10 几 w 的文件要复制到什么时候呀,求 v2 大神科普
1 66450146 Nov 28, 2018 多进程不见得更快,而且在出错的时候恢复现场更麻烦 拷大量文件还是用 rsync 吧 |
2 likuku Nov 28, 2018 移动硬盘全盘加密后直接快递 /人肉到 IDC,直接连服务器上对拷,当然也是要用 rsync,能断点续传,能显示进度 |
3 likuku Nov 28, 2018 传输压缩?你图片若已经是 jpg,gif 之类已经被高度压缩过的图,那么传输压缩没啥卵用。 |
4 Oneneuuu Nov 28, 2018 via Android rsync |
5 wwqgtxx Nov 28, 2018 via iPhone cp 是单线程的不是很正常么,哪个系统自带的复制是多线程的,而且在绝大部分情况下多线程复制反而会更慢 |
6 congeec Nov 28, 2018 tar |
7 flynaj Nov 28, 2018 via Android rsync 后台慢慢来,这个瓶颈应该是你的网络上传速度,按家用带宽 4m 上行,一个小时 1g,最快也要 200 小时。 |
8 yuedingwangji OP 哈哈,我现在就是直接拷到硬盘硬盘,然后到机房那里去复制数据的,但感觉用 cp 真的好慢呀 |
9 xeaglex Nov 28, 2018 那你自己用脚本异步执行 cp 不就好了 |
10 ysc3839 Nov 28, 2018 个人认为复制的瓶颈在于硬盘读写速度。如果你使用多进程复制,会导致硬盘在多个位置读写,速度会比顺序读写慢很多的。 |
11 johnnie502 Nov 28, 2018 先打包,不用压缩,比如用楼上的 tar,这样开销小,传的比较快 |
12 dsnake1984 Nov 28, 2018 我用 cos/oss 花点钱 还是挺爽的 |
13 ryd994 Nov 28, 2018 震惊,Linux 下最好用的复制命令居然不是 cp tar c -C /src/ | tar xv -C /dst/ cp 慢主要是没有缓存还每文件一次 sync。这个 tar 命令实际上是利用 pipe buffer。 另外,rsync 也可以用于本地,不妨试试 |
14 ericgui Nov 28, 2018 scp |
15 clino Nov 28, 2018 上面用 tar 的方法应该是很好的,如果是远程我记得用 ssh 也能用管道 |
16 hawhaw Nov 28, 2018 via Android scp 走的是 ssh 性能会有损失,建议服务器直接 nc 开个口子接收数据再传给 tar 解压缩,客户端上用 tar 打包再扔给 nc 发给服务器( nc 开的那个口) |
18 crystone Nov 28, 2018 文件多就打包传啊,有没有压缩无所谓。如 ls 所言的 |
19 luckyc Nov 28, 2018 曾经花了一天时间从公司把 400G JPG,pdf 等资源用 rsync 上传到服务器上的路过. 挂机放那里不管他呗. |
20 liangzi Nov 28, 2018 via Android rsync or Syncthing |
21 mamax Nov 28, 2018 图片是压缩率太大,搞反了 |
22 yidinghe Nov 28, 2018 via Android 如果有几万甚至几十万小文件,打包再拷贝通常会更快 |
23 rsync -avzP ...,一定要考虑断点续传,就是这里的 P,否则网络一个闪断之类的就傻了 |
24 smdbh Nov 28, 2018 挂一晚就好了 |
25 tnt666666 Nov 28, 2018 via Android 瓶颈是 io,不是 cpu |
26 arrow8899 Nov 28, 2018 这个跟你的网速或硬盘速度有关系吧,单线程多线程其实影响不大 |
27 fcten Nov 28, 2018 随机读取大量小文件本来就很慢,多线程也没用 |
28 xiaogui Nov 28, 2018 如果是大量碎小文件的话,推荐打成 tar 包 ,不要压缩,比如每个包 1 G,然后拷贝过去。 |
29 aa514758835 Nov 28, 2018 手写一个多线程的 cp,我记得之前写过,没几行 |
30 pierre1994 Nov 28, 2018 线程或进程过多,会有磁盘随机 IO 问题 |
32 liuxu Nov 28, 2018 说真的,大文件邮寄硬盘更快,毕竟你有 100M 电信,最多也就 10M 上传 |
34 omph Nov 28, 2018 写个脚本,定量 tar 打包,然后网络流 |
35 liwl Nov 28, 2018 瓶颈是带宽...不是 IO |
36 kernel Nov 28, 2018 @zhongyiio scp 和 rsync 不同。每复制一个文件要停一会。感觉是每复制一个文件都要断开新开一次连接。对于大量小文件效率比 rsync 低几十倍。 |
37 TotoroSora Nov 28, 2018 不管是硬盘对拷还是网络流,感觉都是先 tar 打包比较好 |
39 liberize Nov 28, 2018 刚用 parsync 传了 800G 的数据到服务器,平均每个文件 10M 吧,瓶颈在上行带宽 |
40 stebest Nov 28, 2018 |
41 Rekkles Nov 28, 2018 懒人的我通常都是打包 开个 80 端口 然后 wget |
42 msg7086 Nov 28, 2018 打包传用 tar,目录直传用 rsync。cp 是复制,但不是给你复制那么多文件用的。 cp 是一个底层命令,也就是要做到「最简单」,「最不容易出问题」,要是做成多线程的话非让人打死不可。 @stebest 要速度的话,rsync 几乎总是最快的。 |
43 Gathaly Nov 28, 2018 tar | scp |
44 ryd994 Nov 28, 2018 via Android @Gathaly 都 tar 了还 scp 干嘛 tar cz -C /src/ | ssh user@host tar xzv -C /dst/ 还带压缩哦 然后你会发现这么蛋疼还是 rsync 靠谱,毕竟能断点续传 |
45 wanderpoet Nov 28, 2018 via iPhone @ryd994 #13 学习了 |
46 qmake Nov 28, 2018 via Android 远程机器建一个稍微大一点的 lv 然后 dd 过去 如果要看进度的话 用 pv |
47 tanpengsccd Nov 28, 2018 via iPhone 学习了。 |
48 mYYnSmiTEQWcCwAr Nov 28, 2018 大量小文件推荐用 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. |
49 enjoyCoding Nov 28, 2018 via iPhone 可不可以拆成多个文件夹 多个窗口 cp ? |
50 timothyye Nov 28, 2018 via Android 今天正好服务器搬家,rsync 又快又棒 |
51 ymj123 Nov 28, 2018 via Android 单纯论速度 scp 比 rsync 快的,我实验过很多次。当然楼上说 rsync 有断点续传功能,那挺好。还有 scp 不能拷贝软链接,rsync 可以。你这个就 tar 打包,然后 scp 慢慢传吧。 |
52 figo Nov 29, 2018 老实点吧,作为过来人告诉你最稳定的办法就是先 tar 然后在 scp。 |
53 WilliamHL Nov 29, 2018 via iPhone rsync 真的很好用 |
54 scholar Nov 29, 2018 via Android 看看 phzip2 的介绍,这个压缩了可以调用多线程。我们计算数据都是 Gb 来的,用它压缩比 tar 压缩成 tar.gz 等都快,压缩率也高很多!但不确定你这小文件众多的情况 |
55 ps1aniuge Nov 29, 2018 rsync 需要安装,若是 win,winscp 最简单。支持多线程。 在选项===》传输===》后台里设定。 具体多少线程,根据 **基本跑满服务器带宽,不怎么波动** 为准。 |
56 noqwerty Nov 29, 2018 via Android 上次备份服务器用的是 rsync -avzhP --progress |
57 aa514758835 Nov 29, 2018 手写多线程 cp,代码不多的 |
58 realpg PRO rsync,或者 tar 直接把流通过 tcp 传输 |
59 lostsummer Sep 9, 2019 内网环境下,磁盘 IO 是瓶颈,单磁盘服务器多进程 /线程无意义,还可能是负分,rsync 是最佳选择。 |