网站文件迁移是网站迁移中最耗时也最容易出错的环节。无论是更换服务器还是搬迁机房,文件量大、中断频繁、权限错乱都是常见痛点。rsync增量同步恰好能解决这些问题:它只传输差异部分,支持断点续传,还能保留文件属性和权限。本文直接进入实战,按照“判断-操作-排查”的顺序,帮你用rsync完成一次可靠的文件迁移。
迁移前必须做的三项准备
动手之前,先确认三件事:源服务器和目标服务器的SSH访问权限、rsync是否已安装、以及需要迁移的目录范围。rsync通过SSH传输,所以两端都要能通过密钥或密码登录。如果源服务器是Windows,建议先安装Cygwin或使用WSL,但更常见的是Linux对Linux。
检查rsync是否安装:
rsync --version
如果未安装,Debian/Ubuntu使用apt install rsync,CentOS/RHEL使用yum install rsync。目标服务器同样需要安装。另外,确定要迁移的目录,通常是网站根目录(如/var/www/html),但也要考虑配置文件、日志和缓存目录是否需要迁移。
基础同步命令:第一次全量传输
第一次同步是全量传输,之后才是增量。基本命令格式:
rsync -avz --progress /源目录/ 用户名@目标IP:/目标目录/
参数说明:
-a:归档模式,保留权限、时间戳、软链接等属性-v:显示详细输出-z:传输时压缩,节省带宽--progress:显示传输进度
注意源目录末尾的斜杠:/var/www/html/表示同步目录内的内容,而不带斜杠会同步目录本身。第一次全量传输可能耗时较长,建议在流量低谷执行。
增量同步:只传差异部分
第一次全量完成后,后续同步只需执行相同命令,rsync会自动对比文件大小和时间戳,只传输变化的部分。这就是增量同步,也是rsync的核心优势。
rsync -avz --progress /源目录/ 用户名@目标IP:/目标目录/
再次执行时,rsync会跳过未变化的文件,大幅缩短时间。但要注意,如果源文件的时间戳或大小被修改,即使内容相同,也会被重新传输。如果希望基于内容校验,可以加上-c参数,但会增加计算开销。
排除不需要迁移的目录
网站目录中往往包含缓存、日志、临时文件等不需要迁移的内容。使用--exclude参数排除它们,可以节省时间和带宽。
rsync -avz --progress --exclude='cache/' --exclude='tmp/' /源目录/ 用户名@目标IP:/目标目录/
也可以将排除规则写入文件,用--exclude-from引用:
rsync -avz --progress --exclude-from='exclude-list.txt' /源目录/ 用户名@目标IP:/目标目录/
常见的排除项包括:wp-content/cache/、*.log、.git/等。但要注意,如果目标服务器已有这些目录,排除后不会删除它们,需要手动处理。
保证数据一致性:校验与删除
rsync默认基于大小和时间戳判断差异,但极端情况下可能漏掉内容变化。如果对一致性要求高,可以加-c参数强制校验内容:
rsync -avzc --progress /源目录/ 用户名@目标IP:/目标目录/
另外,如果源服务器上删除了某些文件,目标服务器不会自动删除。如需镜像同步,加上--delete参数:
rsync -avz --delete /源目录/ 用户名@目标IP:/目标目录/
但--delete有风险,务必确认排除规则正确,否则可能误删目标服务器上的重要文件。建议第一次使用时先不加--delete,手动对比后再决定。
断点续传与带宽限制
大文件传输中断后,rsync支持断点续传。使用--partial参数保留部分传输的文件:
rsync -avz --partial /源目录/ 用户名@目标IP:/目标目录/
配合--progress,中断后重新执行,会从断点继续。如果担心占用过多带宽,可以用--bwlimit限制传输速率(单位KB/s):
rsync -avz --bwlimit=1000 /源目录/ 用户名@目标IP:/目标目录/
这在高负载服务器上尤其有用,避免影响线上服务。
常见误区与失败条件
误区一:忽略斜杠。路径末尾的斜杠决定同步的是目录本身还是内容,搞错会导致文件层级错乱。误区二:忘记排除缓存,导致大量无用文件传输。误区三:直接在生产环境使用--delete,造成数据丢失。
失败条件包括:SSH端口非22时未指定-e 'ssh -p 端口';目标服务器磁盘空间不足;文件权限不一致导致网站无法读取。建议迁移后使用diff -r或再次执行rsync(不输出变化)来验证一致性。
迁移后的验证与切换
同步完成后,需要验证文件完整性。可以检查关键文件是否存在、权限是否正确。如果目标服务器上运行着旧版本,建议先停掉服务,再执行最后一次增量同步,确保数据一致后切换DNS。
关于性能,rsync的增量特性减少了传输量,但最终网站加载速度还取决于服务器配置和优化。MDN的Web性能指南提到,响应时间和交互流畅度直接影响用户留存,所以迁移后应测试页面加载速度。
如果涉及数据库迁移,需要额外处理,可参考数据库导出导入的完整步骤。如果是虚拟主机迁移到云服务器,可参考虚拟主机迁移云服务器指南。迁移完成后,别忘了重新部署SSL证书,详见SSL证书重新部署指南。
参考资料
延伸阅读
