Linux下将共享目录10G-50G大文件拷贝到本地SSD的最快方法
单大文件SMB共享到本地SSD多线程拷贝方案
cp默认走单线程、小块IO,在SMB这类网络挂载场景下无法充分利用带宽和SSD写入性能,以下是可直接落地的工具和方案:
推荐工具
1. aria2(最接近azcopy的多线程实现)
专门针对分块并行传输设计,支持本地路径作为源/目标,是当前场景的最优选择
- 安装命令:
Debian/Ubuntu 系:apt update && apt install aria2
RHEL/CentOS 系:yum install aria2 - 你的场景直接用以下命令:
aria2c -x 16 -s 16 -d /root /smb/share01/<你的大文件名> - 参数说明:
-x 16:最大并行连接数16,可根据SSD性能在8~32区间调整-s 16:将单文件拆分为16个块并行读取写入-d:指定目标存储目录
- 优势:内置文件完整性校验,不会出现拷贝损坏,SMB场景下基本可以跑满带宽或SSD写入上限
2. 调优版rsync(系统自带无需额外安装)
如果环境不允许安装第三方工具,调整rsync参数后也能大幅提升拷贝速度
- 命令示例:
rsync -av --progress --inplace --block-size=1M /smb/share01/<你的大文件名> /root/ - 参数说明:
--inplace:直接写入目标文件,不生成临时中转文件,减少额外IO开销--block-size=1M:调大传输块到1MB,比默认小块的传输效率提升数倍--progress:实时显示拷贝进度和速度
- 优势:系统默认预装,稳定性高,兼容所有Linux发行版
3. 大区块dd命令(熟手极致性能选择)
对单文件场景,调大dd的读写块大小也能获得接近多线程的传输效率
- 命令示例:
dd if=/smb/share01/<你的大文件名> of=/root/<目标文件名> bs=4M status=progress conv=fsync - 参数说明:
bs=4M:设置读写块大小为4MB,可根据存储性能调整为1M/8Mstatus=progress:实时展示拷贝进度conv=fsync:拷贝完成后强制将数据从缓存刷写到磁盘,避免假完成
额外性能优化提示
- 并行数不要盲目调大:普通消费级SSD开超过32线程会引发IO争抢,反而降低速度,建议从8线程开始测试最优值
- 可重新挂载SMB共享时添加
rsize=1048576,wsize=1048576参数,调大SMB协议层的读写块大小,底层优化后拷贝速度会进一步提升 - 拷贝前关闭后台占用IO的进程,避免占用SSD写入带宽
内容的提问来源于stack exchange,提问作者Vidya
相关产品推荐
相关产品推荐

