最近在做服务器迁移,文件好几个T。。。。只能单向访问,服务器。怎么办!!!
之前一直是使用rsync 服务器和服务器之间的双向同步、备份(这是推的)。现在服务器要迁移,只能单向访问,突然发现rsyns也可以实现文件拉取。
rsync [选项] 远程用户@远程主机:远程文件路径 本地目标路径
示例:
1. 从远程服务器拉取单个文件
rsync -avz --exclude='*.tmp' user@remote_host:/remote/path /local/path
rsync -avz root@remote_host:/path/to/remote/file.txt /local/destination/
-a
:归档模式(保留权限、时间戳等)-v
:显示详细过程-z
:压缩传输remote_host(可以在/etc/hosts 下配置,这样就不用输ip了)
2. 拉取整个目录
rsync -avz user@remote_host:/data/img/ /local/destination/
3. 拉取时排除某些文件
rsync -avz --exclude='*.tmp' user@remote_host:/remote/path /local/path
4.限速传输(避免占用带宽)
rsync -avz --bwlimit=1000 user@remote_host:/remote/path /local/path
--bwlimit=1000
:限速 1000 KB/s
建议先通过 --dry-run
选项测试命令:
rsync -avzn user@remote_host:/remote/path /local/path
-n
:模拟运行,不实际传输文件
注意事项:
- 权限问题:确保本地目标路径有写入权限。
- 首次连接:如果是 SSH 方式,首次连接需验证远程主机指纹。
- 路径格式:Windows 本地路径使用
C:/path
或/cygdrive/c/path
(Cygwin环境)。 - 密码输入:如果未配置 SSH 免密登录,执行命令后会提示输入密码。
5.高级用法:
5.1 断点续传partial
-
rsync -avz --partial --progress user@remote_host:/path/to/large_file /local/destination/
avz
:归档模式 + 压缩传输 + 显示详细信息--progress
:显示传输进度(可选)- 如果传输中断,
--partial
会保留已传输的部分文件(默认保存在目标目录,文件名后加.partial
)。 - 重新运行相同命令时,
rsync
会检查.partial
文件并继续传输剩余部分。 - 传输完成后,
.partial
后缀会自动移除。
5.2 append
选项
作用:在已存在的文件末尾追加数据(适用于已传输部分未被修改的情况)。
适用场景:日志文件等只增不改的文件。不适用于二进制文件(如压缩包、镜像),因为追加操作会破坏文件结构。
rsync -avz --append --progress user@remote_host:/path/to/logfile.log /local/destination/
注意:当源文件自上次中断后未发生更改时才有效(否则可能导致数据不一致)。
rsync -avz --partial --timeout=30 --retries=3 --progress user@remote_host:/remote/path /local/
5.3.使用 &
让 rsync 在后台运行
直接在命令末尾加上
&
,让rsync
在后台执行rsync -avz --progress user@remote_host:/remote/path /local/path/ &
优点:简单快捷。
- 缺点:如果终端关闭,任务可能会被终止(取决于 shell 配置)。
查看后台任务 jobs -l # 查看当前会话的后台任务
5.4使用 nohup
防止任务被终止
nohup
可以让任务在终端关闭后继续运行:nohup rsync -avz --progress user@remote_host:/remote/path /local/path/ > rsync.log 2>&1 &
> rsync.log
:将标准输出重定向到rsync.log
。2>&1
:将错误输出也重定向到同一文件。&
:让任务在后台运行。查看运行状态
tail -f rsync.log # 实时查看日志 ps aux | grep rsync # 检查进程是否在运行终止任务
pkill -f "rsync -avz" # 按命令终止 kill [PID] # 按进程 ID 终止
6.最佳实践
- 大文件传输:优先用
--partial
。 - 日志类文件:用
--append
。 - 网络不稳定环境:结合
--timeout=30
(超时设置)和--retries=3
(重试次数): - nohup 后台传输
nohup rsync -avz --partial --progress user@remote_host:/path/to/large_file /local/destination/ > rsync.log 2>&1 &
ok