rsync 到 NAS 每次都会复制所有内容

Sta*_*ann 6 linux backup

我运行 Ubuntu Linux 并使用备份脚本使用 rsync 复制内容:

rsync -rc /home/user/source /media/nas/destination
Run Code Online (Sandbox Code Playgroud)

或者

rsync -r /home/user/source /media/nas/destination
Run Code Online (Sandbox Code Playgroud)

但是 - 每天大约需要 2.5 小时(我每天都运行它)来完成它。1Gbit 局域网上大约有 76 Gb 的数据。所以 - 基本上 - rsync 只是不会跳过目标中的现有文件 - 它只是一遍又一遍地复制所有内容。

我认为问题出在 NAS (d-link 321) 并且它是一个不支持 unix 权限系统的 samba 共享 - 对吧?所以这样 rsync 无法区分旧文件和新文件 - 对吗?我已经尝试使用 -c 参数进行 rsync(根据校验和跳过,而不是 mod-time 和大小),但仍然没有骰子,仍然需要 2.5 小时。

任何人都可以建议同步 appx 70-80 Gb 数据的方式,而不是每次都“愚蠢”地复制所有内容?

谢谢:)

更新

好。没运气。我已经删除了目标目录并运行了两次:

rsync -r --times /home/user/source /media/nas/destination
Run Code Online (Sandbox Code Playgroud)

两次仍然需要2.5小时。所以它将所有内容复制两次。

嗯。我更深入地研究了这个问题。看起来 rsync 不保留时间。我已经对来自源和目标的某些文件运行了 stat 命令 - 并且访问、修改、更改时间不会保留在目标上。我不知道为什么会发生这种情况......还有其他建议吗?Ps 我对 Linux 比较陌生 - sio 它可能是非常愚蠢和愚蠢的东西:)

更新 2 已解决:我意识到问题源于我错误地安装共享。我一直像这样安装它们(在 /etc/fstab 中):

//192.168.10.199/Volume_1 /media/Volume_1 cifs   guest,rw,iocharset=utf8,file_mode=0777,dir_mode=0777 0 0
Run Code Online (Sandbox Code Playgroud)

这是有效的:

//192.168.10.199/Volume_2 /media/Volume_2 cifs    
username=sam,password=some_password,uid=developer,gid=developer,_netdev 0 0
Run Code Online (Sandbox Code Playgroud)

Rsync 现在保留时间,只需要 3 分钟!

Ste*_*day 8

您需要在命令行中添加-t(或--times) rsync,这样rsync才能在目的地保留文件修改时间。这将允许后续rsync运行跳过具有相同大小和修改时间的所有文件。另外,不要为这个-c选项烦恼,除非你确定你的目的地由于某种原因没有(或不能)保持准确的文件修改时间。


jus*_*ert 7

您很可能希望使用该-u标志,它告诉 rsync 不要发送目标中存在的文件,并且在目标中具有较新的修改时间或在两个位置具有相同的修改时间和大小的文件。


dto*_*lis 5

你为什么不试试:

rsync -a /home/user/source /media/nas/destination

-a是专门用于存档的便利选项。它一直对我有用。

这是手册页所说的:

-a, --archive archive mode; same as -rlptgoD (no -H)

  • 如果 NAS 不允许适当地分配权限、所有者或组,`-a` 可能会导致问题。 (4认同)