在复制大量零碎文件的时候,并不需要压缩后再复制,可以直接复制。
但在复制的时候,可能会遇到"验证完整性"卡住或"复制文件"卡住不动甚至卡死的情况。
当我将自己电脑里的「照片备份到移动硬盘」就出现了"复制速度降为0"的情况,于是就开始网上找解决方法。最后被我找到了fastcopy这个工具,试下来发现这是在windows上使用下来最好用的复制工具。但是大部分文章只做了介绍,没人写具体的使用方式,导致网上很多人吐槽说难用不好用。
我复制了几个「文件夹」后发现了问题,发现原来不是工具"不好用",只是大部分人"不会用",所以写这篇使用教程出来。另外,fastcopy适合windows上使用;如果在mac或者linux上复制大量小文件,还是老老实实用rsync命令行方式吧。
先说一个数据存储的前提------也就是长期存储数据的时硬盘该如何选择:
如果数据需要长期保存,
移动硬盘一定是"机械硬盘"(HDD),
因为"固态硬盘"(SSD)在长期不通电的情况下会丢失数据
一、复制大量小文件时出现的情况
拷贝大量小文件的时候刚开始正常,之后速度降为0,资源管理器可能会无响应。
如图所示:

由于"验证完整性"而出现速度降为0,产生这种情况的原因在文章末尾,感兴趣的可以到文末了解一下原理。
二、解决方式:
下载fastcopy
github上下载fastcopy入口
【使用方式】
1、设置
主要设置是在菜单栏里的"选项"里(选项--->常规设置),
在常规设置里有两个需要设置的点:
IO设置--->设置「缓存」
同时运行--->设置「同时运行数」
1> 设置缓存:

注意:
缓存初始值为256M,如果这里不改,就会产生比win自带的复制还难用,这也就是为什么大部分觉得很难用的原因。
这里需要设置成1024的倍数,也就是设置缓存为几个G。
可以参考我的设置方式:
-
电脑物理内存8G--->设置4608(也就是4.5G缓存):
内存使用率可以达到95%左右,硬盘使用率可以达到100%

-
电脑物理内存32G--->设置24576(也就是24G缓存)
执行过程中内存占用94%,硬盘使用率可以达到100%
-
不用担心执行时的内存占用量高,因为在文件操作完成后内存会自动释放的。
2> 设置同时运行数:

注意:
最大同时运行数,最好是CPU的线程倍数
设置好之后,点击"应用"并"确定"。
2、使用fastcopy
开始使用:
1> 设置路径-"来源","目标"
2> 设置操作方式
差分复制(大小/日期),
复制(覆盖)
移动(覆盖)
3> 点击执行
图示如下:

注意:
可以点开右侧的"差分复制(大小/日期)",查看一下都可以进行哪些操作。
对应的是文件的复制,覆盖,移动等操作。
3、使用结果
实测30G的「照片文件」需要20分钟(大量小文件);
实测100G的「游戏文件」需要25分钟(少量大文件);
USB口连接移动硬盘(机械硬盘)传输速率100M/s,硬盘读写100%;
4、fastcopy优于windows自带的复制功能具有的"特色":
fastcopy支持断点续传,传输中断后可从断点继续,避免重复操作;
遇到错误文件时,可选择跳过并记录日志而非中断整个任务,提升了效率和可靠性;
也不会产生windows中途中断而导致文件丢失的情况,这个是很重要的。
三、底层原理
1、拷贝照片这种"大量小文件"时,为什么会卡住?
1> 文件操作需要内存缓存文件信息
复制/移动文件属于IO密集型操作,内存硬盘使用率很高,
内存是交换数据的,缓存是为了缓冲CPU和内存之间的速度
内存占用随文件数量增加,文件数量越多内存占用越大
2> windows自带的复制功能默认的缓存机制无法调整
通常仅有几M导致读写操作必须频繁交替,
尤其在处理大量小文件时磁头频繁寻道,速度大幅下降,在效率上存在瓶颈。
3>大量小文件由于默认的缓存已满导致"验证完整性"停滞发生:
在windows复制大文件或大的文件夹时,每个文件开始前需要验证其完整性。
验证完整性的耗时通常是小到忽略不计,但是对于超级多的小文件,其验证时间与文件拷贝时间相比,验证时间甚至比拷贝需要更多的时间。
2、类似工具:
fastcopy:自定义缓存
teracopy:优化内存管理和错误处理
【写在最后】
很多工具不是「不好用」,只是大部分人不了解其机制从而导致了「不会用」。
希望本篇文章对你有帮助!