我运行 Ubuntu Linux 并使用通过 rsync 复制内容的备份脚本:
rsync -rc /home/user/source /media/nas/destination
或者
rsync -r /home/user/source /media/nas/destination
但是,每天大约需要 2.5 小时(我每天都运行这个程序)才能完成。1Gbit 局域网上大约有 76 Gb 的数据。所以,基本上,rsync 不会跳过目标中的现有文件,它只是一遍又一遍地复制所有内容。
我假设问题出在 NAS(d-link 321)上,而且它是一个不支持 unix 权限系统的 samba 共享 - 对吧?这样 rsync 就无法区分旧文件和新文件 - 对吧?我尝试使用 -c 参数进行 rsync(根据校验和跳过,而不是 mod-time 和大小),但仍然没有成功,仍然需要 2.5 小时。
有人能建议一种同步大约 70-80 Gb 数据的方法吗,这种方法不需要每次都进行“愚蠢”的复制?
谢谢:)
更新
好吧,没运气。我删除了目标目录,然后运行了两次:
rsync -r --times /home/user/source /media/nas/destination
两次仍然花费了 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
这是有效的:
//192.168.10.199/Volume_2 /media/Volume_2 cifs
username=sam,password=some_password,uid=developer,gid=developer,_netdev 0 0
Rsync 现在保存时间并且只需要 3 分钟!
答案1
你为什么不尝试一下:
rsync -a /home/user/source /media/nas/destination
-a
是专门用于存档的便捷选项。它对我来说一直都很有用。
手册页的内容如下:
-a, --archive archive mode; same as -rlptgoD (no -H)
答案2
您需要在命令行中添加-t
(或--times
) rsync
,这样rsync
将保留目标位置的文件修改时间。这将允许后续rsync
运行跳过所有具有相同大小和修改时间的文件。此外,不要理会该-c
选项,除非您确定目标位置由于某种原因没有(或无法)保持准确的文件修改时间。
答案3
您很可能想要使用该-u
标志,它告诉 rsync 不要发送目标中存在的文件,并且在目标中具有较新的修改时间或在两个地方具有相同的修改时间和大小。
答案4
有时,当 NAS 的文件具有不同的时间格式时,添加-u
或会很有用--update
,其效果为skip files that are newer on the receiver
。