使用rsync同步备份NAS中的文件到其他NSA服务器
rsync简介
rsync
是一个快速、通用且极其强大的文件复制工具,主要用于 Unix-like 系统(包括 Linux、macOS)。它也可以在 Windows 上通过 Cygwin、WSL 或本地移植版本使用。 rsync
不仅可以进行本地复制,还可以通过网络(通常使用 SSH)进行远程复制。
rsync 的主要优点:
- 增量传输(Delta Transfer):
rsync
最显著的特点是它的增量传输算法。它只复制源文件和目标文件之间不同的部分,而不是复制整个文件。这使得rsync
在同步大型文件或目录时非常高效,尤其是在网络带宽有限的情况下。 - 速度快: 由于只传输差异部分,
rsync
通常比其他复制工具(如scp
)快得多,尤其是在进行重复同步时。 - 灵活:
rsync
提供了大量的选项,可以对复制过程进行精细控制。例如,你可以:- 保留文件权限、所有者、组、时间戳等属性。
- 排除/包含特定文件或目录。
- 限制带宽使用。
- 删除目标目录中存在但源目录中不存在的文件(同步删除)。
- 创建备份(保留已删除或修改文件的旧版本)。
- 使用 SSH 进行加密传输。
- 可靠:
rsync
经过了广泛的测试,非常稳定。它还支持断点续传,可以在传输中断后继续。 - 用途广泛:
rsync
不仅可以用于备份,还可以用于:- 网站镜像。
- 文件同步。
- 软件部署。
- 系统迁移。
rsync 的基本语法:
1 | rsync [options] source destination |
options
:rsync
的选项(例如-a
、-v
、-z
、--delete
等)。source
: 源文件或目录。destination
: 目标文件或目录。
常用选项:
-a
:归档模式,等效于-rlptgoD
,保留文件的各种属性。-v
:详细模式,显示传输的文件名。-z
:压缩传输的数据。-h
:以人类可读的格式显示数字(例如,1K、234M、2G)。--progress
:显示传输进度。--delete
:删除目标目录中存在但源目录中不存在的文件(谨慎使用!)。-e ssh
:使用 SSH 进行加密传输。--exclude=PATTERN
:排除匹配PATTERN
的文件或目录。--include=PATTERN
:包含匹配PATTERN
的文件或目录(通常与--exclude='*'
一起使用)。--bwlimit=RATE
:限制带宽使用(速率单位为 KB/s)。--partial
: 保留部分传输文件, 用于断点续传。--dry-run
或-n
:模拟运行,不实际传输文件。
本地复制示例:
1 | rsync -avzh --progress /path/to/source/ /path/to/destination/ |
远程复制示例 (使用 SSH):
1 | rsync -avz --progress -e ssh user@remote_host:/path/to/source/ /path/to/destination/ |
2. 使用 rsync 备份数据到另一 NAS 服务器实现步骤
假设:
- 源 NAS 的 IP 地址是
192.168.1.10
,用户名是admin
。 - 目标 NAS 的 IP 地址是
192.168.1.20
,用户名是backupuser
。 - 要备份的源目录是
/volume1/data
。 - 目标目录是
/volume1/backups/data_backup
。 - 你已经在源 NAS 或目标 NAS 上(或任何可以访问这两个 NAS 的机器上)安装了
rsync
。 - 你已经配置好了 SSH 免密登录.
步骤:
-
(强烈建议)设置 SSH 免密码登录:
为了避免每次运行
rsync
都需要输入密码,建议设置 SSH 密钥认证。这样可以实现自动化备份,而无需人工干预。- 在要运行
rsync
命令的机器上(例如,你的源 NAS)生成 SSH 密钥对:1
2ssh-keygen -t rsa -b 4096 # 生成 4096 位 RSA 密钥对
# 一路回车,使用默认设置即可。 - 将公钥复制到目标 NAS:如果
1
2ssh-copy-id backupuser@192.168.1.20
# 输入目标 NAS 上 backupuser 的密码ssh-copy-id
命令不存在, 可以手动复制
1
cat ~/.ssh/id_rsa.pub | ssh backupuser@192.168.1.20 'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys'
- 测试免密码登录:如果能直接登录到目标 NAS,而无需输入密码,则说明配置成功。
1
ssh backupuser@192.168.1.20
- 在要运行
-
测试
rsync
命令 (使用--dry-run
):在实际运行
rsync
之前,强烈建议使用--dry-run
(或-n
)选项进行测试,以确保命令按预期工作,并且不会意外删除文件。1
2
3rsync -avzhn --progress -e ssh \
admin@192.168.1.10:/volume1/data/ \
backupuser@192.168.1.20:/volume1/backups/data_backup/仔细检查输出,看看哪些文件将被传输(或删除,如果你使用了
--delete
)。 -
运行
rsync
命令 (进行实际备份):一旦你确信
--dry-run
的输出是正确的,就可以去掉-n
选项,进行实际的备份:1
2
3rsync -avz --progress -e ssh \
admin@192.168.1.10:/volume1/data/ \
backupuser@192.168.1.20:/volume1/backups/data_backup/
或者, 保留删除的文件 (推荐)
1
2
3rsync -avz --progress --delete -e ssh \
admin@192.168.1.10:/volume1/data/ \
backupuser@192.168.1.20:/volume1/backups/data_backup/
- 检查备份
在目标NAS检查备份文件是否存在, 数据是否完整
3. 编写备份脚本
为了方便起见,可以将 rsync
命令放入一个脚本中,并使用 cron
定时运行。
1 |
|
使用脚本:
- 保存脚本: 将上述脚本保存为一个文件,例如
backup.sh
。 - 赋予执行权限:
1
chmod +x backup.sh
- 测试脚本: 手动运行脚本,确保它能正常工作:
1
./backup.sh
- 设置定时任务 (使用
cron
):- 运行
crontab -e
命令来编辑crontab
文件。 - 添加一行来指定何时运行你的脚本。 例如,每天凌晨 2 点运行:
1
0 2 * * * /path/to/your/backup.sh
- 保存并关闭
crontab
文件。
- 运行
安装第三方库
1 | sudo apt update |
其他
- rdiff-backup:
- Bacula:
- Amanda:
- Duplicity:
- BorgBackup (Borg):
- Restic: