用归档文件来提升移动硬盘的小文件写入性能,可行吗?

从固态盘向移动机械硬盘里拷贝几万个小文件,写入非常缓慢,如果用“把大量的零碎文件打包成一个大文件”的方式来变相拷贝,是不是能加快速度呢?常用的归档格式ISO、ZIP、TAR,哪一个更适合这种用途呢?


测试它来了

测试对象选择MS Office的程序文件夹

源磁盘是一块忆联的NVMe固态硬盘,目标磁盘是一块创见的移动机械硬盘

方式 用时 平均速度
FastCopy向HDD复制 1:46 28.1MiB/s
资源管理器向HDD复制 1:11 41.9MiB/s
Bandizip向HDD打包zip 00:40 74.5MiB/s
Bandizip向HDD打包tar 00:39 76.4MiB/s
Bandizip向HDD打包iso 00:37 80.5MiB/s
Bandizip向内存盘打包zip
(CPU打包速度对照组)
00:12 248MiB/s

可以看到,在文件平均体积几百KiB的尺度,用直接向HDD打包的方法复制是能够接近它的写入速度上限的,CPU的打包速度、NVMe SSD的读取速度并不构成瓶颈。

三种归档格式的打包速度差别也很小。iso和tar属于“只读”型的归档,打包稍微快那么一点点,但不能直接修改包内文件;zip打包略微慢一点点,归档后可以修改包内的文件,但要重写整个文件。说起来移动硬盘只是一个交换文件的媒介,修改包内文件其实不是多迫切的需求……

1 个赞

快肯定是直接移动快,前提是不适用系统自带的方式移动,可以试试fastcopy之类的软件

要打包的话,推荐tar格式,支持符号链接和硬链接

我有个想法,打包的时间算不算在内?

你不如插一块 USB3 的 U 盘来加速呢。。windows 支持 ready boost,如果不行的话,用 linux 的 bcache 肯定可以,或者 linux 加大内存也能起到 cache 的作用。

可以。

小文件打包后移动, 是可以提升磁盘性能的, 尤其是机械硬盘的性能.

你可以不用高压缩率, 选择"存储(不压缩)"就行. 我个人认为zip就行. 这个格式系统本身就支持. 打包移动后, 也不用解压. 用的时候像打开文件夹一样使用.

用zip不压缩只打包的话,应该会快一些

Windows打包为iso镜像,使用时不压缩和解压缩,直接挂载为虚拟光驱。Linux直接新建一个文件并挂载为分区

小文件如果不编辑读写的话,肯定是打包起来方便快速啊。

当初用过GHOST来迁移文件

我自己迁移大量小文件是打包(zip,压缩级别不压缩),因为大量小文件迁移的时候不仅需要迁移数据本身,同时也需要修改文件系统内的文件索引,而创建/修改索引的操作通常导致一部分写入次数的放大(复制一个文件还要去创建对应的文件夹层级、元数据…)。体感上,虽然有打包/解包的时间,但是相对于直接复制,还是能快很多的。

如果偶尔有几个小文件要变化,
整个zip都需要重新覆盖了。。。。

可以是可以,但是移动硬盘如果连接不稳定的话……可能你中途还要停下来重新连接,然后检查是否造成了软/硬损坏,毕竟是在写文件……
我的话通常是先打包后复制

谁要有时间做一个 “标准磁盘读写速度下移动单位体积的文件所用时间与各打包方式的关系” 的图就好了 :joy:

磁盘速度测试软件 : 支持不同尺寸文件的读写速度测试.

最后还是我自己来做测试了……看主贴更新 :joy:

看来是我的iso打包方案获得了微小的胜利?我怀疑如果初始化一个稀疏文件,挂载文件后拷贝文件到iso速度会更快。
另外不知道有没有类似ghost的目录备份方案。

直接往移动硬盘打包,相当于打包和拷贝都一勺炖了

1 个赞

不一定吧。边打包边往机械盘里写的是连续的文件,写连续文件肯定要比直接写零碎文件快,现在的问题是打包的速度能不能超过机械盘写入零碎小文件的速度,应该跟打包算法的效率和CPU性能有关

在 linux 下迁移整个 /home 时,我试过直接 cp 命令把整个 \home 目录从同一个硬盘的其中一个分区复制到另一分区,速度慢到让人怀疑;使用 tar 打包,前后打包的时间加起来也极快。虽然没有计时,但对比很明显。

此外,使用 rsync 来删除大量小文件、联网传输、同步更改过的文件也很快。

不过在 windows 下,也有声音说释放 tar 速度很慢。