乐趣区

服务器之间迁移大文件

Last-Modified: 2019 年 6 月 3 日 15:01:20

背景

最近公司有一台服务器从 ucloud 迁移到 华为云, 一坨 MongoDB 数据库需要迁移.

为什么使用 rsync:

  • 大文件传输就不要想着 ftp 了: 服务器 A -> 本地 -> 服务器 B
  • scp 传输超大文件, 万一遇到网络断开就得哭了

小提示:

  • 记得在源服务器那边买个临时带宽包, 以免浪费时间

传输前准备

# 打包压缩的文件
zip -r archive.zip ./*

# 可选: 将压缩包拆分成 1G 一个的小文件
# -d 使用数字后缀, 而不是字母后缀
split -b 1G -d archive.zip archive_split

# split 对应的合并命令
cat archive_split* > new_archive.zip

rsync 传输

rsync 文档

# 传输文件
# -P,----partial     断点续传 (保留那些因故没有完全传输的文件,以便加快随后的再次传输)
# -e                 以 ssh 方式进行数据传输, ssh -p2222 指定连接 2222 端口
# --progress         显示传输进度
# --bwlimit            限速, 字节 / 秒
# -r,--recursive     对子目录以递归模式处理
# -c, --checksum     打开校验开关,强制对文件传输进行校验。# --delete             删除那些 DST 中 SRC 没有的文件。# -z, --compress     对备份的文件在传输时进行压缩处理。# --exclude=PATTERN 指定排除不需要传输的文件模式。# --include=PATTERN 指定不排除而需要传输的文件模式。# -v, --verbose 详细模式输出。# -q, --quiet 精简输出模式。# -a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于 -rlptgoD

rsync -P -e "ssh -p2222" --progress --bwlimit=1024 root@xx.xx.xx.xx:/data/transfer/archive.zip /data/archive.zip

解释一下上面执行命令的参数:

  • -P 支持断点续传, 网络传输中网络断开是很可能发生的
  • -e "ssh -p2222" 指定 ssh 传输方式, SRC 的 ssh 端口非默认的 22 端口
  • --progress 显示进度, 方便肉眼观察

由于传输的是 zip 压缩包, 因此未加上 -z 参数.

退出移动版