外观
rsync 任务:本地与远程同步
完成后,OMV 会按你设定的时间,把一个共享文件夹的内容同步到本机另一块盘上的共享文件夹,或者通过 SSH、rsync 守护进程同步到另一台机器;结果会写进日志,也可以发邮件。这是 OMV 核心自带的功能,不需要装插件。
先弄清楚:rsync 是同步,不是版本化备份
rsync 让目标和源保持一致。它只管复制,不管历史:
- 默认不删除目标里多出来的文件,所以目标会慢慢堆积已经在源里删掉的旧文件。
- 源里的文件被误改、被勒索软件加密后,下一次同步会把坏版本复制过去,覆盖目标里的好版本。
- 勾选「删除」后,源里删掉的文件,目标里也会被删掉。
需要「回到上周的版本」,请用有历史的工具:BorgBackup、restic、rsnapshot,或者在目标一侧再加一层 Btrfs 快照。策略层面的取舍见备份策略。
任务的三种组合
入口是 服务 → Rsync → 任务(Services → Rsync → Tasks)。创建任务时先选类型(Type)和模式(Mode):
| 类型 | 模式 | 源 | 目标 | 典型用途 |
|---|---|---|---|---|
| 本地 | 无 | 源共享文件夹 | 目标共享文件夹 | 把数据同步到本机另一块盘 |
| 远程 | 推送(Push) | 源共享文件夹 | 目标服务器,填写远程地址 | 把数据推到另一台机器 |
| 远程 | 拉取(Pull) | 源服务器,填写远程地址 | 目标共享文件夹 | 把另一台机器的数据拉回本机 |
远程地址有三种写法,界面里字段的提示文字里也有:
| 写法 | 含义 |
|---|---|
用户@主机:路径 | 通过 SSH 传输,数据在网络上加密 |
用户@主机::模块 或 rsync://用户@主机:端口/模块 | 连到对方的 rsync 守护进程(模块),传输不加密,只适合可信内网。对方怎么开见rsync 服务端 |
创建一个本地同步任务
前提:源和目标两个共享文件夹已经存在,并且目标在另一块物理盘上。放在同一块盘上的「备份」挡不住盘坏。
- 打开
服务 → Rsync → 任务,点 创建(Create)。 - 确认 已启动(Enabled)勾选,类型 选 本地(Local)。
- 选好 源共享文件夹(Source shared folder)和 目标共享文件夹(Destination shared folder)。
- 在 执行的时间(Time of execution)下面设定时间。分、小时、月内第几天、月、周内第几天都是多选列表,
*表示每一个。默认值是你打开表单的时刻,即每天这个时间运行,请改成夜里。 - 勾选 命令输出用 Email 发送(Send command output via email),前提是已经配置好邮件通知。
- 先勾选 试运行(Trial run),保存。
- 点页面顶部黄色提示条上的 应用(Apply),任务才会真正生成。
- 选中任务,点工具栏的 运行(Run),看任务对话框里的输出,确认列出的文件符合预期。
- 回到任务里取消 试运行,保存并再次应用。
如果页面顶部还有黄色提示条(有未应用的更改),运行会提示配置已修改,先应用再运行。
选项对照
表单里的选项最终会变成 rsync 命令行参数:
| 界面(官方中文) | rsync 参数 | 默认 | 说明 |
|---|---|---|---|
| 试运行(Trial run) | --dry-run | 关 | 只显示会做什么,不做改动 |
| 抑制非错误信息(Suppress non-error messages) | --quiet | 关 | 少输出 |
| 打包模式(Archive mode) | --archive | 开 | 包含下面五项 |
| 递归到目录 / 保存权限 / 保存修改时间 / 保存用户组 / 保存拥有者 | --recursive 等 | 开 | 打包模式的组成部分 |
| 压缩(Compress) | --compress | 关 | 跨公网时有用,局域网通常没必要 |
| 保存 ACLs(Preserve ACLs) | --acls | 关 | 目标文件系统要支持 ACL |
| 保留扩展属性(Preserve extended attributes) | --xattrs | 关 | 同上 |
| 保留传输了一部分的文件(Keep partially transferred files) | --partial | 关 | 大文件中断后可续传 |
| 删除(Delete) | --delete | 关 | 见下面的警示 |
| 扩展选项(Extra options) | 原样追加 | 空 | 参考 rsync 手册,写错会让任务失败 |
「删除」选项会在目标上删文件
- 影响范围:勾选 删除(Delete)后,接收一侧(本地任务和推送任务里是目标,拉取任务里是本机的目标共享文件夹)上存在、而发送一侧没有的文件会被删除。rsync 没有回收站,删了就是删了。
- 常见翻车场景:源和目标选反了;源目录是空的或只剩一部分(盘没挂上、有人清空了目录);源里的文件被误删或被勒索软件加密后同步了一次;在扩展选项里写了
--delete-excluded或--remove-source-files,后者甚至会删源文件。 - 前置条件:任务脚本在源或目标文件系统没有挂载时会直接退出并报错,所以盘掉线不会被当成空目录;但挂载着的空目录不受保护。目标一侧最好另有一份快照或第二份备份。
- 怎么回退:删掉的文件无法从 rsync 找回,只能从目标一侧的快照或另一份备份恢复。所以平时保持 删除 关闭;确实需要镜像时,先用 试运行 看输出里的
deleting行,确认无误再取消试运行。
远程任务:通过 SSH 同步到另一台机器
通过 SSH 必须用公钥验证。任务里的验证(Authentication)选 密码(Password)只对 rsync 守护进程有效,界面提示它不用于 SSH 这类远程 shell。
打开
系统 → 证书 → SSH(System → Certificates → SSH),点 创建(Create)生成一对密钥,类型保持默认即可。任务脚本是非交互的,私钥不能设口令。在同一页选中这对密钥,点 安装(Install),在弹出的「安装公钥到远程机器」对话框里填远程机器的主机名、端口、用户名和密码,点 复制(Copy)。远程机器需要暂时允许密码登录。也可以自己把公钥追加到远程用户的
~/.ssh/authorized_keys。先在 OMV 上手动登录一次远程机器,让 root 记住它的主机密钥。 官方文档说明,没有记录主机密钥时任务不会运行。在 OMV 的 shell 以 root 身份执行:
shssh <远程用户>@<远程主机>看到「Are you sure you want to continue connecting」时输入
yes,然后exit退出。是否能登录成功不重要,目的是写入known_hosts。创建任务:类型 选 远程,模式 选 推送,源共享文件夹 选本机的共享文件夹,目标服务器(Destination server)填
用户@主机:路径,验证 选 公钥(Public key),SSH 证书(SSH certificate)选刚才的密钥,SSH 端口(SSH port)按对方设置填写。同样先 试运行,再 应用 后运行。
远程目录要提前建好,远程用户要对它有写权限。
计划、日志和邮件
- OMV 把任务写进
/etc/cron.d/openmediavault-rsync,每个任务对应/var/lib/openmediavault/cron.d/下的一个脚本,以 root 身份运行。这些文件由 OMV 生成,每次应用都会重写,不要手改。 - 上一次运行还没结束时,新的运行会直接退出,不会叠加。
- 输出写入
/var/log/rsync.log,在诊断 → 系统日志(Diagnostics → System Logs)的下拉列表里选 Rsync - 任务。日志按周轮转,保留 4 份。 - 同一时间点不要堆太多任务。备份、SMART 长测、Btrfs scrub、SnapRAID 同步错开安排,见计划任务。
检查结果
试运行输出的文件列表符合预期,没有意外的
deleting行。取消试运行后手动运行一次,输出末尾出现
The synchronisation has completed successfully.。在 OMV 的 shell 里用只读命令对比源和目标(路径用
存储器 → 共享文件夹(Storage → Shared Folders)里的绝对路径):shdiff -rq <源目录> <目标目录>没有输出表示两边一致。目标里多出的文件会以
Only in开头列出。往源里放一个测试文件,等下一次计划运行后确认它出现在目标里;收到了邮件。
从目标里复制一个文件回来并打开,确认内容完整。这一步才是在验证备份。
常见问题
运行时提示 Source storage device not mounted 或 Destination storage device not mounted。 源或目标所在的文件系统没有挂载,先到 存储器 → 文件系统(Storage → File Systems)检查。
点「运行」提示配置已更改。 点黄色提示条上的 应用,再运行。
报 Permission denied 或 Operation not permitted。 本地任务以 root 运行,一般不是权限问题;检查目标是不是 NTFS、exFAT 这类不支持 Linux 权限和属主的文件系统。如果共享文件夹就在文件系统根上,rsync 复制 aquota.user、aquota.group 时也可能报这个错,可以在扩展选项里写 --exclude='aquota.user' --exclude='aquota.group'。
远程任务提示 Host key verification failed。 还没有让 root 记住远程主机密钥,按上面第 3 步操作。
远程任务一直要密码。 公钥没装到远程用户、私钥设了口令,或者远程 SSH 禁用了公钥登录。
想同时同步多个目录。 一个任务只有一个源和一个目标,每个目录建一个任务。
参考资料
- OMV 官方文档:RSync。
- rsync 手册:rsync(1),界面里的「扩展选项」链接到它。
- 相关:插上 USB 硬盘自动备份、异地与云端备份。