我想将笔记本电脑上的一些目录备份到外部硬盘驱动器。
外部硬盘驱动器中的目标已经有我的笔记本电脑上目录的较旧备份。
我想知道如何更新外部硬盘上的备份?例如,以下命令会按预期工作吗?
rsync -a --delete /path/to/source/dir /path/to/dest/dir
它的工作原理和我一样吗,首先
rm -r /path/to/dest/dir/*
,然后rsync -a /path/to/source/dir /path/to/dest/dir
?- 如何
rsync
通过利用目标上的旧备份(自上次备份以来某些文件可能已更改,但更多文件没有更改),更快地创建新备份而不会出错?利用旧备份的另一个原因是我的外部硬盘驱动器没有足够的空间来保存新备份而不删除任何内容。
谢谢。
答案1
是的,rsync
是一个很好的解决方案,但更好的使用(注意结尾的斜杠):
rsync -a --delete /path/to/source/dir/ /path/to/dest/dir/
去引用man rsync
:
源上的尾部斜杠会更改此行为,以避免在目标上创建额外的目录级别。您可以将源上的尾随 / 视为“复制此目录的内容”而不是“按名称复制目录”[...]
使用--delete
镜像(完全相同的文件),没有镜像,您将获得附加备份(在源中删除的文件保留在副本中)。
的危险在于--delete
,如果您定位到错误的目录,许多文件可能会被删除,因此最好将其使用限制在经过充分测试的脚本中,或者使用-n
/--dry-run
首先检查会发生什么。
答案2
- 如何通过利用目标上的较旧备份(自上次备份以来某些文件可能已更改,但更多文件没有更改),使 rsync 更快地创建新备份而不会出错?
默认情况下,备份rsync
会执行此操作,如果你通过了-a
(并按照@xenoid的答案找到正确的路径)。而且无论如何你都想通过-a
,所以一切都很好。具体原因有点微妙:
Rsync 使用“快速检查”算法(默认情况下)查找需要传输的文件,该算法查找大小或上次修改时间已更改的文件。
如果 rsync 认为不需要传输某个文件,则不会传输该文件。这是有效的,因为-a
暗示了这个选项:
-t, --times preserve modification times
所以最后修改时间将是相同的备份文件上的内容与原始文件上的内容相同。
不犯错误
只是不要rsync
通过修改文件内容然后重置其上次修改时间来伪造:-)。否则该文件将被忽略。
我没听说过这个问题,所以我不担心。rsync
这种方式通常用于基本备份。
我预计您更有可能遇到其他限制。也就是说,如果您在不使用文件系统快照的情况下备份 $HOME,那么您的 Firefox 配置文件可能会在备份运行的同时被修改,并且您将无法在备份中获得一致的工作 Firefox 配置文件。或者您想要恢复已删除/覆盖的文件,但由于您没有保留任何较旧的备份,因此它可能已在备份中被删除/覆盖。