通过SSH使用rsync命令,是在两台服务器之间快速、安全且支持断点续传地传输大型文件的最实用Linux方法之一。尤其是在迁移数百GB的网站文件、备份归档、媒体库或应用数据时,rsync仅传输发生变更的数据块,相比传统复制方法能带来显著的速度优势。其核心工作原理是:源服务器上的文件通过SSH隧道加密同步至目标服务器;即使连接中断,也可以从断点处继续传输。
在服务器迁移、主机升级、数据中心更换或备份操作中,速度与数据完整性同样重要。将一个大归档文件整体下载再重新上传,不仅浪费时间,一旦出现连接错误,还可能不得不从头再来。rsync正是在此时发挥作用,它能保留文件时间戳、权限、所有者信息以及目录结构。正因如此,Linux系统管理员、DevOps团队和网站托管专家在日常运维中频繁使用它。
在本指南中,我们将通过真实的命令示例,逐步讲解如何通过SSH使用rsync在两台Linux服务器之间传输超大文件。此外,我们还将分享性能调优参数、安全检查、故障场景、传输测试方法以及在上线前需要注意的要点。如果您正计划迁移到新的VPS或托管环境,在操作本指南前,请确保您的源服务器和目标服务器拥有足够的磁盘空间、SSH访问权限以及正确的用户权限。关于基础架构的选择,您可以查看Hostragons VPS 服务器解决方案和Linux托管套餐页面。
什么是rsync,为何在传输大文件时首选它?
rsync 是一款功能强大的命令行工具,用于在本地系统或远程服务器之间同步文件和目录。它最显著的特性是增量传输算法。该算法不会每次都重新发送整个文件,而是仅将发生变更的部分传输到对端。例如,一个80 GB的备份文件中只有2 GB发生了变化,在理想情况下,无需重新传输整个文件,只需传输变更的数据块即可。
而SSH则使传输过程加密。这样一来,rsync命令通过网络发送数据时,文件内容不会以明文形式传输。这一特性对于客户数据、电商订单记录、媒体归档、数据库备份以及私有应用文件尤为重要。在托管领域,数据安全不仅仅局限于SSL证书;服务器之间的传输通道也必须是安全的。在为网站流量使用SSL证书的同时,服务器间的文件传输也应首选通过SSH加密。
与FTP或手动下载上传方式相比,rsync更加灵活。它能保留权限、传输符号链接、在目标端删除源端已不存在的文件、限制带宽,并在实际传输前进行模拟演练。在大文件传输这类高风险操作中,这种控制能力带来了显著优势。
何时应通过SSH使用rsync命令?
通过SSH使用rsync命令,特别适合传输体积庞大、数量众多或频繁变更的文件。对于简单的图片文件夹,手动SFTP或许够用;但当涉及成千上万的文件、复杂的权限设置和大型归档时,rsync就变成了更可靠的选择。
- 当您将网站从旧服务器迁移到新VPS服务器时。
- 当您传输包含数千个媒体文件的目录(如WordPress的uploads文件夹)时。
- 当您将每日、每周或每月的备份复制到另一台服务器时。
- 当您更换数据中心或托管服务商时。
- 当您在生产和备用环境之间同步应用文件时。
- 当您计划进行可能发生连接中断的长时间传输时。
例如,将一个250 GB的媒体文件夹先下载到本地电脑,再上传到新服务器,意味着要进行两次独立的传输。这不仅延长了总耗时,还会使您的家庭或办公网络成为瓶颈。使用rsync可以直接从源服务器传输到目标服务器,从而省去中间环节。
开始前的准备工作
要成功执行rsync操作,光知道命令本身还不够。检查源和目标服务器的状况,能降低操作过程中发生数据丢失或不完整传输的风险。在生产环境中,务必完成以下检查。
1. 验证SSH访问
必须确保能从源服务器通过SSH连接到目标服务器。标准连接测试方法如下:ssh user@target-server-ip。如果SSH运行在非标准端口,则按此格式测试:ssh -p 2222 user@target-server-ip。如果此测试不成功,rsync也无法运行。请检查防火墙、Fail2ban、SSH端口、用户权限以及密码或密钥认证。
2. 检查rsync软件包是否已安装
大多数Linux发行版都预装了rsync;但最好还是检查一下。在Debian和Ubuntu系系统上,可使用rsync --version命令。如果未安装,可通过apt install rsync进行安装。在AlmaLinux、Rocky Linux或CentOS等衍生版上,则使用dnf install rsync或yum install rsync命令。如果您在Hostragons上使用基于Linux的VPS,安装通常只需几秒钟。
3. 计算磁盘空间
如果目标服务器没有足够的可用空间,传输就会中断。可使用du -sh /source/directory命令查看源目录的大小。在目标端,应使用df -h命令检查磁盘状况。实践中,不仅要预留文件大小的空间,还要为临时文件和日志留有余地。例如,若要传输500 GB数据,在目标端规划至少550-600 GB的可用空间会更稳妥。
4. 规划关键服务与变更文件
在实时运行的网站上,文件可能在传输过程中发生变更。特别是用户上传、缓存文件夹和日志文件会持续更新。在进行大文件迁移时,通常先传输主体数据,然后将网站置于维护模式,再运行一次最终的rsync。这样可将停机时间缩短至几分钟。对于WordPress站点,您可以结合WordPress主机迁移指南等支持文档来完善您的操作计划。
基础rsync命令:在两台服务器间传输文件
最常用的基础结构如下:rsync -avz /source/directory/ user@target-ip:/target/directory/。其中-a代表归档模式,会尝试保留权限、时间戳、符号链接等信息。-v提供详细输出。-z则在传输时进行压缩。目录末尾的斜杠是一个重要细节。如果写成/source/directory/,会将目录内的内容复制到目标;如果写成/source/directory,则会在目标下创建该目录本身。
设想一个示例场景:您想将旧服务器上/var/www/site/public_html/文件夹中180 GB的网站文件,迁移到新服务器的/var/www/site/public_html/目录。命令逻辑如下:rsync -avz /var/www/site/public_html/ root@203.0.113.20:/var/www/site/public_html/。此操作会通过SSH将文件从源服务器传输到目标服务器。
如果您不想使用root用户,更安全的做法是在目标服务器上创建一个对相应目录有写入权限的专用用户。例如,您可以使用名为deploy的用户,并据此调整相关文件夹的所有权。在生产环境中,虽然直接使用root操作很方便,但从安全角度出发,建议使用权限受限的用户。
推荐的安全且稳健的rsync参数
在大文件传输中,仅使用基础命令并非总是明智之举。针对连接中断、部分文件残留、误删除或网络缓慢等情况,需要使用额外参数。以下命令是许多真实迁移场景的可靠起点:
rsync -aHAXv --numeric-ids --partial --progress --append-verify -e ssh /source/directory/ user@target-ip:/target/directory/
在此命令中,-a为归档模式,-H保留硬链接信息,-A保留ACL权限,-X保留扩展属性。--numeric-ids基于用户和组的ID而非名称,这在用户名在不同服务器上发生变化时很有用。--partial会保留未传完的文件而不删除。--progress显示传输进度。--append-verify则尤其有助于在续传大文件时验证已追加的部分。
并非每个参数在所有系统上都是必需的。例如,在简单的网站迁移中,使用-aHAX可能就足够了,而在使用特殊文件权限的应用中,保留ACL和扩展属性信息就变得至关重要。因此,先进行传输测试非常重要。
如果使用非标准SSH端口,命令应如何编写?
出于安全考虑,SSH可能运行在22端口之外的其他端口。此时,需要在rsync中指定SSH参数。示例:rsync -avz -e ssh -p 2222 /source/directory/ user@target-ip:/target/directory/。但命令行中-e参数的值必须与其配合使用。正确的用法逻辑是:rsync -avz -e 'ssh -p 2222' /source/directory/ user@target-ip:/target/directory/。
由于在JSON和某些面板中单引号的处理方式可能不同,在终端中直接输入时,请确保引号正确。如果您使用SSH密钥连接,还可以添加-i参数:rsync -avz -e 'ssh -p 2222 -i /root/.ssh/id_rsa' /source/directory/ user@target-ip:/target/directory/。此方法常用于自动化和基于cron的备份任务。
传输前测试:使用--dry-run
在传输大量数据前,最专业的步骤之一就是使用--dry-run。此参数不会真正复制文件;它只显示哪些文件将被传输。这样就能提前发现错误的目录、不正确的目标路径或意外的删除操作。
测试命令示例:rsync -avz --dry-run /var/www/site/ user@target-ip:/var/www/site/。在输出中,您将看到将要传输的文件、将要创建的目录以及操作摘要。如果您打算使用--delete参数,dry-run就更为关键。因为--delete会删除目标端在源端不存在的文件。正确使用时,它能让目标端成为源端的镜像;但若在错误的目录中使用,则可能导致严重的数据丢失。
专业的操作流程通常是:先进行SSH测试,接着检查磁盘空间,然后运行rsync --dry-run,再用一个小目录进行实际测试,最后才启动主体传输。这种方法虽然需要额外花费几分钟,但能避免可能持续数小时的错误传输。
为提升性能调整压缩、带宽和加密设置
rsync的性能不仅仅取决于文件大小。服务器的CPU性能、磁盘类型、网络延迟、带宽和文件数量也很重要。大量小文件的传输速度可能比单个大文件更慢;因为每个文件都需要进行元数据处理。在采用NVMe磁盘的VPS环境中,文件扫描和写入性能会明显更好。因此,如果您计划进行密集型迁移,考虑NVMe VPS服务器选项是明智的。
-z压缩参数对文本文件、日志和某些类型的备份有益。但对于已经压缩过的zip、tar.gz、jpg、mp4或gzip文件,它可能只会消耗CPU而不会带来多少好处。如果您正在两台拥有1 Gbps连接的高性能服务器之间传输大型媒体文件,不使用-z可能获得更好的性能。反之,在低带宽且以文本为主的传输中,-z能显著节省流量。
要限制带宽,可使用--bwlimit。例如,--bwlimit=50000会将速度限制在约50 MB/s。这对于避免占满实时网站的网络流量至关重要。在生产服务器的高峰时段进行全速传输,可能会对访客体验产生负面影响。将迁移计划安排在夜间、设置带宽限制并在操作期间监控系统负载均值,都是良好的实践。
rsync、scp、SFTP与FTP对比

文件传输有多种方法;但每种方法的优缺点各不相同。下表总结了在大文件和服务器迁移场景中,哪种工具在何时更为合适。
| 方法 | 安全性 | 断点续传 | 大文件性能 | 最适用场景 |
|---|---|---|---|---|
| rsync + SSH | 高 | 强 | 非常好 | 服务器迁移、备份、同步 |
| scp | 高 | 有限 | 中等 | 快速复制少量文件 |
| SFTP | 高 | 取决于客户端 | 中等 | 手动文件管理 |
| FTP | 低 | 取决于客户端 | 不稳定 | 安全性不关键时的遗留系统 |
从表格中可以看出,rsync在重复同步和大数据传输方面尤为突出。scp简单易用,但在智能识别文件变更方面不如rsync强大。而FTP若不加加密使用,不符合现代安全标准。在托管面板中使用FTP访问可能很方便;但在服务器间的关键迁移中,应首选基于SSH的方法。
实时网站迁移的示例工作流程
将网站从旧服务器迁移到新服务器时,目标不仅仅是复制文件。DNS、数据库、SSL、PHP版本、文件权限和邮件配置也必须检查。以下是针对包含大文件的网站的低停机迁移示例流程。
- 在新服务器上准备好Web服务、PHP、数据库和所需模块。
- 在迁移前,将域名的DNS TTL值调低,例如300秒。关于域名管理,您可以参考域名查询与域名管理页面。
- 在网站仍在线时启动首次rsync传输。此阶段会传输大部分主体数据。
- 备份数据库并将其导入新服务器。
- 将网站短暂置于维护模式。
- 运行第二次rsync命令,同步最后发生变更的文件。
- 再次获取最新数据库或采用增量同步策略。
- 在新服务器上检查文件权限、网站能否正常打开以及日志。
- 安装或续期SSL证书。为此,SSL证书安装内容可能对您有帮助。
- 将DNS记录指向新IP地址。
这种方法中,最耗时的文件主体传输是在网站运行期间完成的。停机仅发生在最终同步和DNS切换期间。对于拥有大型媒体库的WordPress站点,这种方法能将数小时的停机时间缩短至几分钟。
校验数据完整性
传输完成后,仅仅命令执行完毕还不够。必须检查文件数量、大小和关键文件。简单的检查方法是使用du -sh命令对比源端和目标端的目录大小。但由于文件系统数据块差异,数值可能不会完全一致。更详细的检查可以再次使用相同参数运行rsync。如果没有新文件需要传输,输出信息会非常少。
要进行校验和验证,可使用rsync -avc --dry-run /source/directory/ user@target-ip:/target/directory/。这里的-c参数会通过校验和来比较文件,而不仅仅依赖时间戳和大小。由于这可能在处理海量数据时造成CPU和磁盘负载,请谨慎使用。对于关键归档、数据库转储文件或客户文档,这种额外验证能带来信心。
如果您迁移了网站,还需在应用层面进行检查。应检查首页、管理后台、图片上传、支付页面、联系表单和错误日志。对于电商网站,仅迁移文件是不够的;支付集成和定时任务也必须在新服务器上进行测试。
常见错误及解决方案
权限拒绝(Permission denied)错误
此错误通常由SSH用户权限、目标目录写入权限或密钥认证问题引起。首先尝试使用同一用户建立普通的SSH连接。如果连接成功,再测试能否在目标目录创建文件。如有必要,使用chown将目标文件夹的所有权赋予相关用户,或规划基于sudo的策略。
设备无剩余空间(No space left on device)错误
当目标磁盘空间不足时,传输会停止。使用df -h检查磁盘分区。有时主磁盘未满,但/tmp或目标挂载点已满。在进行大文件传输时,可清理日志文件、旧备份和缓存文件夹。永久解决方案可能需要扩容磁盘或升级到更高容量的VPS套餐。
连接重置(Connection reset)或管道损坏(Broken pipe)错误
在长时间传输中可能发生网络中断。如果您使用了--partial和--append-verify,只需重新运行命令即可从断点处继续。此外,SSH keepalive设置也能提供帮助。在客户端设置如ServerAliveInterval 60的配置,可减少连接空闲断开的情况。
传输速度极慢
速度慢可能源于文件数量过多、磁盘I/O限制、压缩负载或网络容量。如果存在大量小文件,在某些情况下先创建tar归档可能会更快;但这会削弱rsync基于文件的增量优势。对于已压缩的大文件,尝试去掉-z参数进行测试。此外,使用iotop、htop和iftop等工具来确定瓶颈是出在CPU、磁盘还是网络。
安全最佳实践
在服务器间传输文件时,安全不容忽视。尤其是root访问权限、SSH密钥和备份文件,都应被视为敏感信息。首先,建议使用SSH密钥代替密码登录。密钥文件的权限应严格设置,私钥不应共享,并尽可能使用密码短语进行保护。
为迁移操作创建一个临时用户,并仅授予其对必要目录的访问权限,这是一个好方法。操作完成后,可以移除该用户的权限或禁用该账户。将SSH访问限制在特定IP地址,也能减少攻击面。防火墙规则、Fail2ban和保持OpenSSH版本更新,都应包含在基本检查清单中。
如果传输的是数据库转储文件、客户文档或包含个人数据的归档,在传输完成后,应清理源端和目标端不必要的临时文件。此外,在Web根目录下遗留.sql、.zip或.tar等备份文件会带来严重的安全风险。这些文件应尽可能存放在无法通过Web访问的目录中,或在操作完成后删除。
使用rsync进行自动备份
rsync不仅适用于一次性迁移,也可用于定期备份。例如,可以设置一个cron任务,每晚将特定文件夹发送到备份服务器。在此场景中,可通过SSH密钥建立免密码但安全的连接,rsync仅传输变更的文件,并可应用带宽限制。
逻辑示例:rsync -a --delete --bwlimit=30000 /var/www/site/ backup@backup-ip:/backup/site/。此命令可将目标目录与源端同步。但由于--delete参数的存在,使用时务必小心。源端意外删除的文件,在目标端也会被删除。因此,在关键备份策略中,应优先选择快照、每日归档文件夹或支持版本控制的解决方案。
在托管运维中,3-2-1备份规则是一个很好的参考:数据至少有3份副本,存储在2种不同介质上,其中1份存放在异地。rsync能轻松实现该策略中服务器间副本的部分。要构建更全面的基础架构,您可以通过备份解决方案和企业托管服务内容来强化您的计划。
最终检查清单
在启动超大文件传输前,执行以下简要清单能降低出错风险。此清单尤其应在生产环境中作为标准流程执行。
- 源和目标服务器是否都已安装rsync?
- 是否已使用正确的用户和端口测试过SSH连接?
- 目标服务器是否有足够的磁盘空间?
- 首次操作是否已通过--dry-run检查?
- 是否为实时站点规划了维护模式和最终同步?
- 如果使用--delete,目标路径是否已严格确认?
- 传输后是否计划进行文件大小、权限和应用测试?
- 临时备份和转储文件是否会安全清理?
这些检查看似简单,但在实际工作中,最常见的问题往往源于错误的目标目录、缺失的权限、不足的磁盘空间和缺乏规划的DNS切换。一个计划周详的rsync流程,既能缩短迁移时间,也能提高回滚的成功率。
常见问题
通过SSH使用rsync命令时,如果连接中断,传输会从头开始吗?
不会,如果使用了正确的参数,就不会从头开始。--partial和--append-verify选项有助于保留未传完的大文件,并在重新运行命令时从断点处继续传输。不过,在关键迁移中,重新运行命令前,最好检查一下目标磁盘空间和未完成文件的状态。
能用rsync直接传输数据库吗?
rsync传输的是文件;直接复制正在运行的数据库文件并不稳妥。对于MySQL或MariaDB,应使用mysqldump或物理备份工具,然后将生成的备份文件通过rsync传输到目标服务器。在实时系统中,为确保数据一致性,应规划维护模式或复制策略。
使用rsync必须在两台服务器上都有root权限吗?
root权限并非必需。只要拥有对目标目录的写入权限的用户即可。但如果需要保留文件所有权、系统目录、ACL或特殊权限,则可能需要更高的权限。从安全角度出发,尽可能使用权限受限的用户进行操作是更正确的做法。
--delete参数安全吗?
正确使用--delete时,它对于将目标目录与源端完全同步非常有用;但如果在错误的目标目录中使用,则可能导致文件丢失。因此,包含--delete的命令务必先用--dry-run进行测试,并仔细核对源路径和目标路径。
在大文件传输中,rsync和scp哪个更好?
对于一次性少量文件复制,scp可能够用;但在处理大文件、海量文件以及重复同步任务时,rsync通常更胜一筹。因为它能识别变更数据、续传中断的任务、限制带宽并提供模拟运行模式。
总结与后续步骤
通过SSH使用rsync命令在两台服务器之间传输超大文件,是一种快速、安全且易于管理的方法。配合正确的参数,它能抵御连接中断,仅传输变更文件以节省时间,并减少实时网站迁移过程中的停机时间。为获得最佳效果,请先进行SSH和磁盘检查,使用--dry-run进行测试,然后按计划执行主体传输。
如果您正计划切换到新服务器、需要大容量存储或更高性能的托管基础架构,可以查看Hostragons的解决方案;根据您的需求,通过VPS、主机、域名和SSL选项,能让您的迁移过程更加安全。要实现无故障的过渡,请从小规模测试开始,进行评估,并按计划执行最终同步。