基础命令:cp
(最常用)
适用场景:本地快速复制单个文件或中小型目录。
优势:系统内置,无需安装;操作简单。
常用参数:
-r
:递归复制目录(必需)-v
:显示复制进度(verbose)-p
:保留文件属性(权限、时间戳)-u
:仅复制源文件中更新的部分(增量复制)
示例:
# 递归复制目录(仅更新修改过的文件) cp -rupv /data/ /backup/
效率提示:
- 复制大量小文件时,先用
tar
打包再复制(见下文)比直接cp -r
更快。 - 避免复制软链接指向的原文件:添加
-P
参数(默认会复制原文件)。
高效工具:rsync
(远程/本地均适用)
适用场景:大型目录、增量备份、网络传输(如远程服务器同步)。
优势:增量复制(仅传输变化部分)、断点续传、压缩传输、保留文件属性。
安装:sudo apt install rsync
(Debian/Ubuntu)或 sudo yum install rsync
(CentOS/RHEL)
核心参数:
-a
:归档模式(保留权限等属性,递归复制)-z
:压缩传输(节省带宽)--progress
:显示实时进度--delete
:同步删除目标端多余文件
示例:
# 本地复制(增量同步目录) rsync -az --progress /source/ /destination/ # 远程复制(通过SSH) rsync -azP user@remote:/path/to/source/ /local/destination/
进阶技巧:
- 限速传输:
--bwlimit=5000
(单位KB/s,避免带宽占满) - 排除文件:
--exclude="*.tmp"
- 后台运行:搭配
nohup
或screen
防止中断
处理海量小文件:tar
+ 管道
适用场景:复制数百万个小文件(如日志、代码库),速度比 cp
快数倍。
原理:通过管道边打包边解压,减少磁盘I/O操作。
示例:
# 本地复制目录(保留属性) tar -cf - /source/ | (cd /destination/ && tar -xf -) # 远程复制(通过SSH) tar -czf - /source/ | ssh user@remote "tar -xzf - -C /destination/"
优势:
- 避免频繁磁盘寻址,大幅提升小文件复制效率。
- 支持压缩(
-z
使用gzip /-j
使用bzip2)节省传输时间。
块级复制:dd
(磁盘/分区克隆)
适用场景:整块磁盘或分区的高精度复制(如备份系统盘)。
注意:操作不当会导致数据丢失!务必确认目标路径。
示例:
# 复制整个磁盘(sda到sdb) dd if=/dev/sda of=/dev/sdb bs=4M status=progress # 生成磁盘镜像文件 dd if=/dev/sda of=disk.img bs=4M conv=noerror,sync
参数解析:
bs=4M
:设置块大小(提升大文件效率)status=progress
:显示进度(较新版本支持)conv=noerror,sync
:忽略错误并填充空块
实时监控复制进度
-
pv
工具(管道查看器)
安装:sudo apt install pv
示例:# 监控文件复制进度 pv source.iso > /backup/source.iso # 结合tar监控目录复制 tar -cf - /data/ | pv | (cd /backup/ && tar -xf -)
-
rsync --progress
如前述示例,实时显示每个文件传输进度。
性能优化与避坑指南
-
选择合适工具
- 小文件 →
tar
管道 - 大文件/远程同步 →
rsync
- 磁盘克隆 →
dd
- 小文件 →
-
避免覆盖风险
使用-i
参数(如cp -i
)或rsync --backup
防止误覆盖重要文件。 -
处理特殊文件
- 复制软链接:
cp -P
或rsync -l
(不跟踪原文件) - 保留SELinux属性:
rsync -aZ
或cp --preserve=context
- 复制软链接:
-
提升速度技巧
- 关闭日志:对目标文件系统使用
mount -o noatime
- 增加缓冲区:
dd
或tar
中调大bs
值(如bs=128M
)
- 关闭日志:对目标文件系统使用
总结建议
场景 | 推荐命令 | 关键优势 |
---|---|---|
日常文件/目录复制 | cp -rpv |
简单快速 |
大型目录/远程同步 | rsync -azP |
增量备份、断点续传 |
海量小文件 | tar + 管道 |
减少I/O,速度提升显著 |
磁盘/分区克隆 | dd |
块级精确复制 |
重要提示:
- 操作前用
lsblk
或df -h
确认路径,避免覆盖错误目标。- 生产环境务必先测试!可使用
--dry-run
参数(如rsync -anv
)模拟运行。
通过结合场景选择工具,Linux复制操作可快至原来的2-5倍,对于TB级数据,建议先用小样本测试,再调整参数(如 rsync
的 --bwlimit
或 dd
的 bs
值)平衡速度与系统负载。
引用说明:
- GNU Coreutils 手册(
cp
、dd
命令)https://www.gnu.org/software/coreutils/ - Rsync 官方文档 https://rsync.samba.org/documentation.html
- Linux 内核文档(文件系统优化)https://www.kernel.org/doc/html/latest/
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/6685.html