Skip to content

三种拷贝命令性能对比:50GB 场景下大文件 vs 海量小文件

本文对比 cp -atar 管道、rsync -av 三种方式在 50GB 总数据量下,处理少量大文件海量小文件时的性能差异与优势。

所有命令均将 /data/a/ 下所有文件(含隐藏文件)完整拷贝至 /data/b/


命令示例

bash
# 1. cp -a
cp -a /data/a/. /data/b/

# 2. tar 管道
tar -C /data/a -cf - . | tar -C /data/b -xpf -

# 3. rsync -av
rsync -av /data/a/ /data/b/

性能与速度对比(50GB 总数据量)

少量大文件(例如 5 个文件,每个 10GB)

命令耗时特点
cp -a基准最快直接内核拷贝,顺序 I/O 效率最高,内存开销极低
tar 管道慢 5–10%打包→管道→解包增加额外 CPU 开销,但仍是顺序读写,差距不大
rsync -av慢 10–20%首次拷贝需分块校验与计算 checksum,略慢;后续增量同步优势明显

结论:大文件场景下,cp -a 速度最佳,rsync 首次稍慢但适合重复同步。


海量小文件(例如 50 万个文件,平均 100KB)

命令耗时特点
cp -a每个文件都要单独 open/close、更新元数据,频繁系统调用成为瓶颈
tar 管道快 30–50%一次性读取目录树并打包为流,减少元数据操作次数,管道直接解包
rsync -av中等首次拷贝比 tar 慢(需对比每个文件),但增量同步时可跳过未改文件

结论:小文件海量时,tar 管道由于合并了元数据操作,速度显著优于 cprsync 首次略慢,但若目录有大量未变化文件则后续极快。


各自优势

命令优势
cp -a简单、无需依赖;大文件场景速度最快;适合一次性本地全量拷贝
tar 管道小文件场景性能最优;不依赖额外工具;可通过 SSH 无缝转为远程传输(ssh host tar ... | tar ...
rsync -av增量传输(节省时间与带宽);支持排除规则、断点续传、进度显示;本地/远程通用

使用建议

  • 一次性拷贝,且为大文件cp -a
  • 一次性拷贝,海量小文件tar 管道
  • 重复同步或需远程传输rsync -av

三种方式均能完整保留文件属性(权限、时间戳等)及隐藏文件。

/src/technology/dateblog/2026/03/20260325-%E4%B8%89%E7%A7%8D%E6%8B%B7%E8%B4%9D%E5%91%BD%E4%BB%A4%E6%80%A7%E8%83%BD%E5%AF%B9%E6%AF%94%EF%BC%9A50gb-%E5%9C%BA%E6%99%AF%E4%B8%8B%E5%A4%A7%E6%96%87%E4%BB%B6-vs-%E6%B5%B7%E9%87%8F%E5%B0%8F%E6%96%87%E4%BB%B6.html