数据处理备忘录(rsync、scp)

Rsync vs SCP 核心区别

特性 Rsync SCP
增量传输 ✔️
保留属性 ✔️ 部分
目录对比 ✔️
断点续传 ✔️
过滤排除 ✔️
传输速度 快(增量) 稳定
适用场景 定期同步/备份 单次传输

Rsync 核心优势

  1. 增量传输:仅传输变化部分,节约带宽
  2. 保留属性:保持文件权限、时间戳等元数据
  3. 断点续传:支持中断后继续传输
  4. 目录对比:可预先检测差异文件
  5. 灵活过滤:支持模式匹配排除文件

SCP 核心定位

  1. 简单加密传输:基于 SSH 的零配置安全传输
  2. 单次文件操作:适合临时性、小规模文件传输
  3. 最小依赖:无需安装额外服务,依赖 SSH 即可
  4. 原子性操作:传输过程不可中断,适合关键文件

SCP 与 Rsync 选型矩阵

场景特征 推荐工具 原因
首次全量备份 SCP 简单快速
持续增量同步 Rsync 仅传输差异
大文件传输 Rsync 支持断点续传
紧急日志收集 SCP 无需预装服务
保留软链接 Rsync -a 保留属性
跨国传输 Rsync 压缩+带宽控制
敏感数据 SCP 简单更易审计

企业级安全基准

安全控制项 配置命令 合规要求
传输加密 默认启用 AES-128 PCI DSS 4.0
会话超时 scp -o ConnectTimeout=30 金融行业 <60s
密钥轮换 ssh-keygen -t ed25519 -f key -N '' -V -1w:+4w 等保 2.0
访问日志 scp -o LogLevel=VERBOSE GDPR 审计

rsync

一、基础同步场景

1. 本地目录同步

rsync -avzh /source/dir/ /dest/dir/

参数解析

  • -a:归档模式(保留所有属性)
  • -v:显示详细输出
  • -z:压缩传输
  • -h:友好显示文件大小
    注意:源目录结尾的 / 表示同步目录内容,不加 / 会同步目录本身

2. 跨服务器同步(SSH加密)

rsync -avzhe ssh /local/path user@remote:/remote/path

安全增强

  • 使用 -e ssh 指定 SSH 协议
  • 推荐配置 SSH 密钥认证避免密码传输

3. 远程 → 本地拉取

rsync -avzh user@remote:/remote/path /local/path

典型场景

  • 从生产服务器拉取日志文件
  • 备份远程数据库 dump 文件

二、生产环境高级用法

4. 带宽限制(避免影响业务)

rsync -avzh --bwlimit=5000 /source user@remote:/dest

参数说明

  • --bwlimit=5000:限制带宽为 5000 KB/s
    适用场景
  • 生产环境在线同步,避免占满网络带宽

5. 断点续传

rsync -avzh --partial --progress /source user@remote:/dest

关键参数

  • --partial:保留部分传输的文件
  • --progress:显示实时传输进度
    恢复方式:重新执行相同命令即可继续传输

6. 文件属性保留

rsync -avzh --no-owner --no-group /source user@remote:/dest

参数说明

  • --no-owner:不保留所有者信息
  • --no-group:不保留所属组信息
    适用场景
  • 跨不同权限体系服务器同步时使用

三、过滤与排除策略

7. 排除指定文件类型

rsync -avzh --exclude='*.tmp' --exclude='*.log' /source user@remote:/dest

8. 从文件读取排除列表

rsync -avzh --exclude-from='exclude.list' /source user@remote:/dest

exclude.list 示例

*.swp
.cache/
temp/

9. 包含特定文件(白名单)

rsync -avzh --include='*.jpg' --include='*.png' --exclude='*' /source user@remote:/dest

四、大规模数据迁移

10. 增量同步 + 日志记录

rsync -avzh --delete --log-file=/var/log/rsync.log /source user@remote:/dest

关键参数

  • --delete:删除目标端多余文件
  • --log-file:记录详细操作日志
    审计建议
  • 日志保留周期与业务合规要求对齐

11. 集群间批量同步

cat server.list | xargs -I{} rsync -avzh /source {}:/dest

server.list 格式

user@server1
user@server2
user@server3

五、备份与恢复方案

12. 带时间戳的增量备份

rsync -avzh --link-dest=/backup/previous /source /backup/$(date +%Y%m%d)

原理说明

  • --link-dest:硬链接指向上次备份,节约空间
  • 每次备份生成日期目录
    恢复操作
rsync -avzh /backup/20230815/ /production/

13. MySQL 热备份同步

mysqldump -uroot -p db | rsync -avzhe ssh --files-from=- /tmp user@backup:/db_backup

六、性能优化技巧

14. 并行传输加速

rsync -avzh --progress --stats --recursive --partial --files-from=file.list /src user@remote:/dest

组合优化

  • 搭配 parallel 实现多文件并行
  • 使用 --stats 显示传输统计信息

15. 快速对比差异

rsync -avzn --dry-run /source user@remote:/dest

参数组合

  • -n / --dry-run:模拟运行
  • -z:压缩对比
    输出解读
  • > 表示需要上传的文件
  • *deleting 表示目标端多余文件

七、安全增强方案

16. SSH 隧道加密

rsync -avzh -e 'ssh -p 2222 -i /path/to/key' /source user@remote:/dest

安全要点

  • 使用非默认 SSH 端口
  • 禁用密码认证,采用密钥登录

17. 传输完整性校验

rsync -avzh --checksum /source user@remote:/dest

参数说明

  • --checksum:基于文件内容校验,而非修改时间和大小
    适用场景
  • 需要严格保证数据一致性的金融交易日志同步

八、企业级监控指标

监控项 检查命令 告警阈值
传输速度 `grep 'sent' /var/log/rsync.log awk '{print $7}'`
文件数 `grep 'Number of files' /var/log/rsync.log awk '{print $NF}'`
错误数 `grep 'error' /var/log/rsync.log wc -l`

九、灾难恢复演练

  1. 模拟数据丢失
rm -rf /production/data/*
  1. 从备份恢复
rsync -avzh --delete /backup/latest/ /production/data/
  1. 验证一致性
diff -qr /backup/latest/ /production/data/

十、排错指南

常见错误处理

  1. 权限拒绝
rsync: mkstemp "/dest/file" failed: Permission denied (13)

解决方案

  • 目标目录添加写权限 chmod o+w /dest
  • 使用 --chmod 参数指定权限
  1. 连接超时
ssh: connect to host remote port 22: Connection timed out

处理步骤

  1. 检查网络连通性 telnet remote 22
  2. 确认防火墙规则
  3. 检查 SSH 服务状态

scp

一、基础传输场景

1. 本地 → 远程

scp -P 2222 /path/to/file user@remote:/target/dir/

参数说明

  • -P:指定非默认 SSH 端口(默认 22)
  • 保留文件基础属性(权限、时间戳)

2. 远程 → 本地

scp user@remote:/var/log/app.log /local/backup/

典型场景

  • 紧急拉取故障服务器的日志文件
  • 获取配置文件副本进行审计

3. 远程 → 远程

scp -3 user1@src:/source/file user2@dest:/target/

跳板机模式

  • -3 通过本地中转传输
  • 避免暴露内部服务器 IP

二、生产环境高级用法

4. 递归传输目录

scp -r /data/images user@remote:/backup/

注意事项

  • rsync 不同,无法增量同步
  • 大量小文件时效率较低

5. 限速传输(避免带宽占满)

scp -l 8192 largefile.iso user@remote:/data/

参数解析

  • -l 8192:限制带宽为 8192 Kbit/s (即 1MB/s)
  • 计算公式:带宽(Kbit) = 期望速度(MB/s) × 8192

6. 保持文件属性

scp -p /etc/nginx/nginx.conf user@remote:/tmp/

保留属性

  • 修改时间(mtime)
  • 访问时间(atime)
  • 文件模式(权限)

三、安全增强策略

7. SSH 证书认证

scp -i ~/.ssh/id_rsa_app app.log user@remote:/logs/

最佳实践

  • 使用专用密钥而非密码
  • 密钥权限设置为 600

8. 防篡改校验(二次验证)

scp backup.tar.gz user@remote:/data/ && \
ssh user@remote "sha256sum /data/backup.tar.gz" | \
diff <(sha256sum backup.tar.gz) -

完整性验证流程

  1. 传输文件
  2. 远程计算哈希值
  3. 本地对比哈希

四、性能优化技巧

9. 压缩传输(适合文本文件)

scp -C /var/log/access.log user@remote:/logs/

参数效果

  • -C 启用 gzip 压缩
  • 文本文件可压缩 70% 以上
  • 二进制文件效果有限

10. IPv6 强制优先

scp -6 dataset.zip user@remote:/storage/

网络优化

  • -6 强制使用 IPv6 协议
  • 适用于 IPv6 专用骨干网环境

11. 并行加速传输

split -b 100M largefile.zip largefile_part_ && \
ls largefile_part_* | xargs -P 4 -I{} scp {} user@remote:/merge/

操作步骤

  1. 拆分大文件为多部分
  2. 并行传输(示例中为 4 线程)
  3. 远程服务器合并:cat largefile_part_* > largefile.zip

五、企业级灾备方案

12. 数据库热备传输

mysqldump -uroot -p db | gzip | \
ssh user@backup "cat > /backup/db_$(date +%F).sql.gz"

技术组合

  • 管道直接传输,不落盘
  • 日期时间戳命名
  • 压缩减少传输量

13. 加密磁带备份

tar cvf - /data | gpg -c | \
scp - user@remote:/backup/$(hostname)_$(date +%s).tar.gpg

安全要点

  • gpg -c 使用对称加密
  • 时间戳命名避免覆盖
  • - 表示从标准输入读取

六、监控与排错

14. 传输进度监控

scp -v largefile.img user@remote:/storage/ 2>&1 | \
awk '/Transferred/ {print "进度:", $3"/"$5, "速度:", $7}'

输出示例

进度: 512MB/2.0GB 速度: 45MB/s

15. 连接问题诊断

scp -vvv file user@remote:/tmp/ 2> debug.log

关键日志信息

  • 认证过程:debug1: SSH2_MSG_SERVICE_ACCEPT received
  • 密码尝试:debug3: send packet: type 50
  • 错误原因:Permission denied (publickey)

七、灾难恢复案例

场景:核心数据库服务器宕机,需快速恢复

# 从备份服务器拉取数据
scp -o ConnectTimeout=20 user@backup:/db/latest.sql.gz /tmp/

# 紧急恢复
gzip -d /tmp/latest.sql.gz
mysql -uroot -p < /tmp/latest.sql

# 验证数据
mysql -e "SELECT MAX(create_time) FROM orders;" db

八、排错指南

常见错误处理

  1. 连接拒绝
ssh: connect to host remote port 22: Connection refused

解决方案

  • 检查目标 SSH 服务状态:systemctl status sshd
  • 验证防火墙规则:iptables -L -n
  1. 权限问题
scp: /target/file: Permission denied

处理步骤

  1. 确认目标目录可写:ssh user@remote "ls -ld /target"

  2. 使用临时目录中转:scp file user@remote:/tmp/

  3. 主机密钥变更

@@@@@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @@@@@

修复方法

ssh-keygen -R remote_host# 删除旧指纹

一、企业级混合云架构

1. 跨云存储网关同步

# 阿里云 OSS -> AWS S3 增量同步
rsync -avzh --rsync-path="aws s3 sync - s3://bucket" \
/oss_mount_point/ user@aws_gateway:/s3_mount_point/

技术要点

  • 使用存储网关挂载云存储为本地目录
  • --rsync-path 自定义远程命令实现协议转换
  • 结合 aws s3 sync 保持云原生元数据

2. K8s 持久卷迁移

# 在线迁移 PVC 数据(零停机)
kubectl exec -it pod_name -- rsync -avzh --progress \
/var/data/ nfs_backup:/pv_backup/$(date +%s)

关键策略

  • 在 Pod 内直接执行 rsync 减少网络跃点
  • 时间戳命名防止覆盖
  • 需配置 ServiceAccount 权限

二、金融级安全合规

3. 传输链双重加密

# 使用 GPG + SSH 双重加密
tar czf - /sensitive_data | \
gpg --encrypt --recipient audit@company.com | \
scp -C -c aes256-gcm@openssh.com - user@remote:/vault/$(date +%F).tar.gz.gpg

合规要求

  • GPG 非对称加密满足 GDPR
  • AES-GCM 算法符合 FIPS 140-2
  • 审计公钥定期轮换

4. 传输过程全审计

# 使用 SCP 记录完整操作日志
scp -o LogLevel=DEBUG3 -o "ProxyCommand=tee -a /var/log/secure_transfer.log" \
financial.db user@remote:/audit/

日志分析

  • 记录文件哈希、传输时间、用户 IP
  • 使用 ELK 实现实时异常检测

三、超大规模优化

5. EB 级数据湖同步

# 使用 rsync 分片并行
parallel -j 32 --eta rsync -avz --files-from={} /source/ user@remote:/dest/ ::: file_lists/*

优化方案

  • 将文件列表拆分为 32 个分片
  • 每个分片独立传输
  • 动态进度监控 (--eta)

6. 内存加速传输

# 利用 /dev/shm 减少 IO 等待
rsync -avzh --temp-dir=/dev/shm /source user@remote:/dest

适用场景

  • 高频更新小文件同步
  • 内存需为数据大小的 2 倍

四、CI/CD 集成

7. 构建产物分发

# 多架构镜像同步到仓库
find ./build -name "*.tar.gz" | \
awk -F/ '{print $NF}' | \
xargs -P 8 -I{} rsync -avz --timeout=60 \
./build/{} repo_mirrors[1-4]:/docker_images/

流程控制

  • 提取文件名避免目录结构差异
  • 8 并行分发加速
  • 超时自动重试

8. 安全补丁热更新

# 灰度发布补丁文件
cat server.list | \
awk 'NR % 10 == 0 {print}' | \# 选取 10% 节点
xargs -I{} scp -o StrictHostKeyChecking=no \
patch.tar.gz {}:/tmp/ && \
ssh {} "tar xzf /tmp/patch.tar.gz -C /app"

滚动更新

  • 分批次选择节点
  • 避免 SSH 主机密钥确认阻塞
  • 原子性操作减少服务中断

五、传输协议创新

9. QUIC 协议加速

# 使用 quiche 实现 HTTP/3 传输
rsync -avzh --rsync-path="/usr/local/bin/quiche-client" \
/source/ https://remote:443/dest/

性能优势

  • 多路复用降低延迟
  • 0-RTT 快速重连
  • 适应移动网络环境

10. 区块链校验存证

# 文件传输 + 区块链存证
file_hash=$(sha256sum data.zip | cut -d' ' -f1)
scp data.zip user@remote:/storage/ && \
curl -X POST https://blockchain-api/record \
-d "hash=$file_hash&action=transfer"

不可篡改证明

  • 传输完成触发智能合约
  • 哈希值上链存证
  • 合规审计追溯

六、传输质量保障

性能基准测试

场景 工具 参数 吞吐量 适用性
10万小文件 rsync -avz --inplace 3200 files/s 频繁同步
100GB大文件 scp -C -c aes128-gcm 1.2 GB/s 单次传输
跨国传输 rsync --bwlimit=50M 稳定 50Mbps 拥塞网络
混合云 rclone --s3-upload-cutoff=1G 680 MB/s 云原生存储

传输健康检查

# 端到端校验脚本
transmit_check() {
local src=$1 dest=$2
local src_hash=$(find $src -type f -exec sha256sum {} + | sha256sum)
scp -r $src $dest || return 1
local dest_hash=$(ssh ${dest%:*} "find ${dest#*:} -type f -exec sha256sum {} + | sha256sum")
[ "$src_hash" = "$dest_hash" ]
}

七、故障自愈设计

11. 断点智能续传

# 自动识别部分文件并续传
rsync -avzh --partial --append \
--timeout=300 --retries=5 \
--super --no-compress \
/source user@remote:/dest

参数组合

  • --append 追加到部分文件
  • --super 强制保留部分文件
  • 超时重试机制

12. 传输质量监控

# 实时带宽与完整性监控
scp -v largefile.img user@remote:/data/ 2>&1 | \
awk '
BEGIN { total=0 }
/Transferred/ { 
print "Progress: " $3 "/" $5 " Speed: " $7 
total += $3
}
END { 
if (total < ($5 * 0.95)) 
system("alert.sh --level=critical Transmit incomplete")
}'

八、传输安全架构

零信任策略实现

# 基于 JWT 的临时传输凭证
TOKEN=$(curl https://vault/token?role=transfer)
rsync -avzh --rsh="ssh -o ProxyCommand='ncat --jwt $TOKEN relay.service'" \
/data relay:/storage/

安全组件

  • 每次传输生成短期 JWT
  • 专用中继服务验证令牌
  • 传输路径不暴露内部 IP

九、前沿技术融合

13. AI 预测传输路径

# 基于 LSTM 预测最优路由
rsync -avzh --rsh="ssh -o ProxyCommand='ai-router --model=network_lstm'" \
/source user@remote:/dest

AI 优势

  • 动态规避网络拥塞节点
  • 预测丢包率选择最佳协议
  • 自学习传输模式优化

14. 量子加密传输

# 后量子算法混合加密
scp -o Ciphers=kyber768-dilithium5 \
-o HostKeyAlgorithms=ssh-quantum \
top_secret.db user@remote:/vault/

抗量子特性

  • Kyber 768 密钥封装
  • Dilithium 5 数字签名
  • 抵御 Shor 算法攻击

十、企业级传输 SOP

变更管理流程

  1. 预传输检查清单
  1. 传输中监控项
  • 带宽占用率 ≤ 70%
  • 单连接错误数 < 5
  • 传输进度斜率监控
  1. 事后验证步骤
# 差异对比与报警
diff -qr /source /mnt/remote_dest || \
slack-alert "传输数据不一致"
posted @   Mugetsukun  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示