对于个人站长来说,当旧的VPS或虚拟机性能不足,需要将网站(尤其是包含数百GB附件、媒体文件或备份)迁移到新的高性能机器时,如何快速、不中断地传输海量数据是一个关键挑战。传统的FTP或SCP传输效率低下且容易断线。
我们将使用行业标准的命令行工具 rsync,通过加密的SSH通道进行传输。rsync 相比其他工具的最大优势在于其断点续传能力、增量同步(首次传输后,后续再次执行只会传输变化的部分)以及保持文件属性的完整性。
准备工作
确保新旧两台机器都安装了 rsync。绝大多数Linux发行版(如CentOS, Ubuntu, Debian)默认安装了SSH服务和rsync。
旧机器(源):IP地址假设为 192.168.1.10
新机器(目标):您正在登录操作的机器
数据路径(旧机器上附件的绝对路径):/var/www/attachments/
检查rsync是否安装
在两台机器上运行:
rsync --version
如果提示找不到命令,请安装(以Debian/Ubuntu为例):
sudo apt update
sudo apt install rsync -y
核心操作:使用rsync进行拉取(Pull)
推荐在新机器(目标服务器)上执行拉取操作。这可以简化连接配置,并且通常在目标机器上运行传输命令更符合迁移流程。
关键rsync参数解析
| 参数 | 含义 | 作用 |
|---|---|---|
| -a | Archive Mode | 归档模式,保持递归、权限、时间戳、用户组等所有文件属性,强烈推荐。 |
| -v | Verbose | 详细输出,显示正在传输的文件。 |
| -P | Progress & Partial | 等同于 –progress –partial。显示传输进度,并允许断点续传(如果传输中断,下次执行时会从上次断开的地方继续)。 |
| -z | Compress | 在SSH传输数据时进行压缩。对于传输文本文件或压缩率高的文件很有帮助,但对于已经高度压缩的媒体文件(如JPG/MP4)效果不明显,但一般不会造成太大的速度损失。 |
传输命令示例
我们从旧机器上将 /var/www/attachments/ 目录的内容,传输到新机器的 /home/data/attachments/ 目录。
注意: 路径末尾的 / 符号非常重要。如果旧机器的路径带斜杠(/var/www/attachments/),则仅传输目录内的内容;如果不带斜杠(/var/www/attachments),则将目录本身也传输过去。
假设您希望将旧机器的附件内容放入新机器的 /home/data/attachments/ 中:
# 在新机器(目标)上执行
sudo rsync -avPz --rsh='ssh -p 22' user_on_old_server@192.168.1.10:/var/www/attachments/ /home/data/attachments/
请替换以下内容:
* user_on_old_server: 您在旧机器上的SSH用户名(通常是root或有sudo权限的用户)。
* 192.168.1.10: 旧机器的IP地址。
* /var/www/attachments/: 旧机器上数据的源路径。
* /home/data/attachments/: 新机器上数据的目标路径。
命令执行后,系统会提示您输入旧机器 user_on_old_server 用户的密码。
监控与重试
由于使用了 -P 参数,rsync 会实时显示传输进度,包括传输速度和剩余时间。如果传输过程中网络中断或SSH会话断开,您只需要重新执行一遍完全相同的命令:
# 重新执行命令,rsync会自动检查已有的文件,只传输剩余或发生变化的部分
sudo rsync -avPz --rsh='ssh -p 22' user_on_old_server@192.168.1.10:/var/www/attachments/ /home/data/attachments/
rsync 的高效校验机制保证了即使是几百GB的数据,重新校验已传输部分也只需要很短的时间,并能快速恢复传输,这是它远快于SCP/FTP的原因。
传输后的验证
传输完成后,验证新旧机器上的文件数量和总大小是否一致。
1. 检查文件总数:
在旧机器上(源):
find /var/www/attachments -type f | wc -l
在新机器上(目标):
find /home/data/attachments -type f | wc -l
2. 检查总大小(忽略差异较小的元数据):
在新机器上:
du -sh /home/data/attachments/
确认两个数值基本一致后,您的几百GB附件数据就安全、快速地迁移完成了。
汤不热吧