最稳妥的方案是用 rsync 通过 SSH 通道传输,适合大部分数据迁移场景;如果只是传单个小文件,scp 更简单直接。
先说结论:优先选择 rsync 进行整目录同步,既安全又能保留文件属性,scp 适合临时传单个文件。
- 适合:服务器迁移、定期备份、大目录同步
- 先看:两台机器网络是否互通、SSH 服务是否开启
- 建议:配置 SSH 密钥免密登录,避免传输中途因密码问题中断
命令速用版
下面两条命令是最常用的,根据需求选一条执行即可。
# 使用 scp 复制单个文件或小目录(简单直接)
scp -r /本地/源路径 用户名@目标 IP:/目标/路径# 使用 rsync 同步整个目录(推荐,支持增量和属性保留)
rsync -avz -e ssh /本地/源路径/ 用户名@目标 IP:/目标/路径/为什么会这样
Linux 之间传文件,核心是解决“通道”和“工具”两个问题。SSH 协议提供了加密通道,保证数据在公网或内网传输时不被窃听;scp 和 rsync 都是基于 SSH 工作的命令。
scp 类似于加强版的 cp 命令,操作简单但功能单一,每次都会全量复制。rsync 则更智能,它会对比源和目标的差异,只传输变化的部分(增量同步),并且能更好地保留文件的时间戳、权限等属性,适合大量数据迁移。
分步处理
1. 检查网络与权限
在旧机器上 ping 新机器 IP,确保能通。确认新机器 SSH 服务已启动(默认端口 22),且你有目标路径的写入权限。
2. 选择传输工具
如果数据量小(几百兆以内),scp 足够;如果数据量大或需要保持目录结构一致,务必用 rsync。
3. 执行传输
建议在源路径末尾加斜杠 `/`,这代表同步目录内的内容而不是目录本身。例如:
rsync -avz -e ssh /data/www/ root@192.168.1.5:/data/www/4. 处理权限问题
如果目标文件属主不对,传输完成后可能需要在新机器上执行 chown 修正属主,避免网站或程序因权限不足无法运行。
怎么验证是否生效
传输完成后,不要直接删除旧数据,先在新机器上核对。
1. 检查文件数量
使用 find 命令统计文件数是否一致:
find /目标/路径 -type f | wc -l2. 检查关键文件内容
随机抽取几个大文件,使用 md5sum 计算哈希值对比:
md5sum /旧机器/文件路径
md5sum /新机器/文件路径如果哈希值一致,说明文件完整无误。
常见坑
1. 隐藏文件丢失
有些配置文件夹以点号开头(如 .ssh, .config),普通通配符可能漏掉。rsync 默认会传输隐藏文件,但 cp 命令需要注意参数。
2. 符号链接变文件
如果源目录里有软链接,scp 默认可能会复制链接指向的实际文件内容,而 rsync 加 `-l` 参数可以保留链接本身。根据需求确认是否要保留链接。
3. 根权限滥用
尽量避免全程使用 root 传输。如果必须传系统级配置,传输完后记得检查敏感文件(如 /etc/shadow)的权限是否过于开放,防止安全风险。
4. 磁盘空间不足
传输前务必用 df -h 检查新机器磁盘空间。如果空间不够,rsync 传到一半会报错,导致数据不一致。
原文链接:https://www.zjcp.cc/ask/10682.html
