应用场景
CPU架构:AMD64
OS版本信息:服务器版1060e、1070e
软件版本:parallel-20240722-1.el9.noarch
背景介绍
parallel命令简介:
parallel 是一个用于处理并行任务的工具,用于在多核或多处理器系统上并行执行任务;
它可以将命令或脚本应用到多个输入上,充分利用多核 CPU 的性能,从而提升执行效率。
问题现象
用户采集数据后需转存至集中存储,每次转移量均为TB级,rsync和cp命令默认为单线程拷贝,无法完全发挥出服务器网络和硬件的性能。
解决方案
方法一:使用rsync+parallel组合的方式实现多线程并发拷贝
1、安装parallel
# 1060e仓库中无parallel安装包,可到pkgs.org搜索下载,或到官网下载源码包编译
[root@localhost ~]# rpm -ivh parallel-20240722-1.el9.noarch.rpm
2、进行多线程拷贝
#此为示例,可根据下方指令参数解释结合实际应用场景进行调整
[root@localhost ~]# find ./1002a -type f | parallel -j 4 rsync -aR --progress {} /mnt
参数说明:
find ./1002a -type f:查找当前目录下1002a目录中的所有文件。
parallel -j 4:使用 4 个线程执行并行操作,可根据CPU核数调整。
rsync -aR:-a 选项表示归档模式(保留所有文件属性),-R 表示相对路径。
--progress:显示拷贝进度。
开始执行后,在新的终端窗口中查看rsync进程,即可看到多个rsync进程
方法二:使用 xargs 与 cp命令组合
[root@localhost ~]# find ./1002a -type f -print0 | xargs -0 -n1 -P4 -I{} cp -v {} /mnt
参数说明:
find ./1002a -type f -print0:查找 1002a 目录中的所有文件,并以 NULL 字符结尾,以确保文件名中包含特殊字符时不会出错。
xargs -0:以 NULL 字符作为输入项分隔符。
-n1:每次传递一个文件给 cp 命令。
-P4:使用 4 个并行线程,可根据CPU核数进行调整。
-I{}:用 {} 替换输入的文件名,此为大写字母i。
开始执行后,查看cp进程即可看到多线程在同时拷贝文件
经测试可知:
(1)rsync+parallel的方式可将文件所在目录1002a拷贝过去,并保持目录结构;xargs+cp命令仅拷贝文件,无法保留目录结构。
(2)多线程并发仅适用于大量小文件的拷贝,并不能拆分单独的大文件进行拷贝。
©统信软件技术有限公司。访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。除此以外,将本网站任何内容或服务进行转载,须备注:该文档出自【faq.uniontech.com】统信软件知识分享平台。否则统信软件将追究相关版权责任。