绿联NAS往极空间NAS备份分享
前言
需求很简单,将绿联 NAS 内的东西都备份到极空间内,我先尝试了将硬盘取下来放到极空间,挂载不上
然后就是通过 webdav/ftp/smb 等协议来备份,但是最后我开始尝试用 rsync,这样同步二者的时间戳可以保留,然后我更相信这个命令一点
经过之前的教训,我不相信绿联以及极空间任何 UI 上提供的功能
用 rsync 来完成 绿联 NAS 到极空间的备份,中途我在极空间用 FTP 从绿联备份了一些文件,用 rsync 应该能继续备份
就是中途用 FTP,感觉慢得不行,特别到了一些小文件的时候,感觉 rsync 要快很多
准备工作
绿联和极空间都需要开启 ssh
极空间是 ubuntu,绿联是 debian,绿联连清华源都没设置
绿联 apt install neofetch 需要执行 apt –fix-broken install
然后极空间默认更换了清华的源
极空间相关信息
ssh 登录后
1 | Welcome to ZOS (GNU/Linux 6.8.1-z4pro+-generic x86_64) |
然后输入 sudo passwd 可以设置极空间 root 密码
随后可以
1 | ➜ ~ ssh -p 10000 root@192.168.31.64 |
apt 版本和源
1 | root@Z4ProPlus-MEDO:~# apt -v |
neofetch
1 | root@Z4ProPlus-MEDO:~# neofetch |
1 | root@Z4ProPlus-MEDO:~# uname -a |
1 | root@Z4ProPlus-MEDO:~# hostnamectl |
1 | root@Z4ProPlus-MEDO:~# cat /etc/os-release |
绿联 NAS 相关信息
绿联 ssh 登录后
1 | ➜ ~ ssh nightmare@192.168.31.70 |
1 | nightmare@DXP2800-JECT:~$ neofetch |
1 | nightmare@DXP2800-JECT:~$ cat /etc/os-release |
1 | nightmare@DXP2800-JECT:~$ lsb_release -a |
1 | nightmare@DXP2800-JECT:~$ uname -a |
绿联 sudo passwd 设置 root 密码,然后执行 su 仍然进不到 root
开始尝试
找到极空间的磁盘路径
/data_s001/data/udata/real/${phone}
在极空间上执行
1 | rsync -avhP nightmare@192.168.31.70:/home/nightmare/ /data_s001/data/udata/real/${phone}/rsync_test |
尝试将绿联的文件往本地拉
总是跑不通,home/nightmare/ 文件夹是存在的
1 | ug_start_server, check access user: 1000, group: 10 |
但是极空间是可以设置 root 密码的
最后方案
在绿联上
1 | screen -S backup |
用 screen 命令是为了断开 ssh 还能继续拷贝
TODO
ssh-copy-id nightmare@192.168.31.70 作用?
rsync 备份核心命令(绿联 → 极空间)
一些 QA
推送:
rsync -avhP -e “ssh -p 10000” /home/nightmare/ root@192.168.31.64:/data_s001/data/udata/real/${phone}/rsync_test/
含义:
-a 等价 -rlptgoD,保留权限/时间戳/符号链接等
-v 显示传输文件
-h 人类可读大小
-P 显示进度并支持断点续传(含 –partial –progress)
加删除同步(镜像,谨慎):
rsync -avhP –delete -e “ssh -p 10000” /home/nightmare/ root@192.168.31.64:/data_s001/data/udata/real/${phone}/rsync_test/
后台(screen):
screen -S backup
rsync -avhP -e “ssh -p 10000” /home/nightmare/ root@192.168.31.64:/data_s001/data/udata/real/${phone}/rsync_test/
Ctrl+A D 分离
screen -r backup 重新进入
后台(nohup 日志):
nohup rsync -avhP -e “ssh -p 10000” /home/nightmare/ root@192.168.31.64:/data_s001/data/udata/real/${phone}/rsync_test/ > /home/nightmare/rsync_$(date +%Y%m%d_%H%M%S).log 2>&1 &
时间戳保证
-a 已包含 -t,完成后用 stat 对比:
stat /home/nightmare/某文件
stat /data_s001/data/udata/real/${phone}/rsync_test/某文件
Modify 行一致即成功。
若看到 failed to set times 说明目标权限或挂载阻止设置时间。
差异判定机制
默认判定:文件大小 + 修改时间
两者都相同直接跳过,不读取文件内容。
需要内容级别核对时临时用 –checksum(-c)。
一次性内容校验
首次全量同步完成后执行(不写入,仅验证,慢):
rsync -avhP -e “ssh -p 10000” –dry-run -ic /home/nightmare/ root@192.168.31.64:/data_s001/data/udata/real/${phone}/rsync_test/
如果没有出现以 >f 开头的文件行,表示内容一致。
之后日常继续用不带 -c 的命令(快):
rsync -avhP -e “ssh -p 10000” /home/nightmare/ root@192.168.31.64:/data_s001/data/udata/real/${phone}/rsync_test/
快速差异演练(不做内容哈希)
rsync -avhP -e “ssh -p 10000” –dry-run -i /home/nightmare/ root@192.168.31.64:/data_s001/data/udata/real/${phone}/rsync_test/
-i 与 -c 解释
-i 输出变化标志:
f.st…… 文件大小和时间变
f+++++++++ 新文件
f..t…… 仅时间不同
-c 基于内容校验和决定是否需要同步,需读取两端所有文件,慢。
组合 –dry-run -ic 用于严格一次性内容验证。
已传文件列表格式化
仅列出真正传输的文件(时间 + 标志 + 名字):
rsync -aP -e “ssh -p 10000” -i –out-format=’%t %i %n’ /home/nightmare/ root@192.168.31.64:/data_s001/data/udata/real/${phone}/rsync_test/
写日志:
rsync -aP -e “ssh -p 10000” -i –out-format=’%t %i %n’ –log-file=/home/nightmare/rsync_transfer.log /home/nightmare/ root@192.168.31.64:/data_s001/data/udata/real/${phone}/rsync_test/
排除示例
排除缓存与无意义文件:
rsync -avhP -e “ssh -p 10000” –exclude ‘.cache/‘ –exclude ‘.DS_Store’ /home/nightmare/ root@192.168.31.64:/data_s001/data/udata/real/${phone}/rsync_test/
后台脚本
/home/nightmare/push_backup.sh:
#!/usr/bin/env bash
rsync -avhP -e “ssh -p 10000” /home/nightmare/ root@192.168.31.64:/data_s001/data/udata/real/${phone}/rsync_test/
后台版本 /home/nightmare/push_backup_bg.sh:
#!/usr/bin/env bash
LOG=”/home/nightmare/rsync_$(date +%Y%m%d_%H%M%S).log”
echo “Log => $LOG”
nohup rsync -avhP -e “ssh -p 10000” /home/nightmare/ root@192.168.31.64:/data_s001/data/udata/real/${phone}/rsync_test/ > “$LOG” 2>&1 &
echo “PID=$!”
校验抽样
stat /home/nightmare/Release.zip
stat /data_s001/data/udata/real/${phone}/rsync_test/Release.zip
何时使用 –delete
需要让目标与源完全一致(删除目标多余文件)时再加:
rsync -avhP –delete -e “ssh -p 10000” /home/nightmare/ root@192.168.31.64:/data_s001/data/udata/real/${phone}/rsync_test/
先用 –dry-run 演练:
rsync -avhP –dry-run –delete -i -e “ssh -p 10000” /home/nightmare/ root@192.168.31.64:/data_s001/data/udata/real/${phone}/rsync_test/
典型流程总结
1 初次同步:
rsync -avhP -e “ssh -p 10000” /home/nightmare/ root@192.168.31.64:/data_s001/data/udata/real/${phone}/rsync_test/
2 一次性内容验证:
rsync -avhP –dry-run -ic -e “ssh -p 10000” /home/nightmare/ root@192.168.31.64:/data_s001/data/udata/real/${phone}/rsync_test/
3 日常增量:
rsync -avhP -e “ssh -p 10000” /home/nightmare/ root@192.168.31.64:/data_s001/data/udata/real/${phone}/rsync_test/
4 定期快速检查:
rsync -avhP –dry-run -i -e “ssh -p 10000” /home/nightmare/ root@192.168.31.64:/data_s001/data/udata/real/${phone}/rsync_test/
5 需要镜像:
rsync -avhP –delete -e “ssh -p 10000” /home/nightmare/ root@192.168.31.64:/data_s001/data/udata/real/${phone}/rsync_test/
sent 424.68G bytes received 63.57K bytes 136.93M bytes/sec
total size is 1.95T speedup is 4.59
rsync -avhP -e “ssh -p 10000” /home/nightmare/ root@192.168.31.64:/data_s001/data/udata/real/${phone}/rsync_test/
rsync -avhP -e “ssh -p 10000” /Volumes/4T-雷克沙/2T海康威视 /tmp/zfsv3/sata15/17628626769/data/2T-海康威视
rsync -avhP /tmp/zfsv3/sata12/17628626769/data/ /tmp/zfsv3/sata15/17628626769/data/
NAS 上装 Code-server
rsync -avhP -e “ssh -p 10000” root@192.168.31.64:/tmp/zfsv3/sata11/17628626769/data/ /home/nightmare/
rsync -avhP -e “ssh -p 10000” root@192.168.31.64:/data_s001/data/udata/real/${phone}/rsync_test/ /home/nightmare/
绿联NAS往极空间NAS备份分享

