通过与 rsh 或 ssh 结合使用,还可以把文件同步到远程主机:$ tar cfp - ./etc |(ssh user@host -- tar xfp -)。按照这种方式使用 ssh 和 tar 是在远程主机上创建本地文件备份的好方法。但是,还有更高效的信息同步方法。
使用 rsync 进行智能化同步
前面介绍的文件同步方法的主要问题是,它们会复制每个文件(和相关联的目录结构)。如果您打算创建信息的新拷贝,这就没关系;但是,如果要同步两个目录中的信息,这种方法的效率很低。
假设一个目录中有 10,000 个文件,它们占用 100GB 的空间。如果修改了一个 10MB 的文件,在使用 cp 或 tar 进行同步时,就必须重新复制所有 100GB 文件。对于备份,复制如此大量的信息是很过分的。我们希望尽可能快速有效地完成备份。显然,如果知道哪些文件修改过了,就可以只复制这些文件,但是不总是能够知道这一信息。
tar 的 --newer 选项的作用是有限的,因为必须知道上一次修改的准确时间。rsync 工具能够解决这个问题。它会比较目录结构和各个文件,判断源目录和目标目录之间的差异。在查明哪些文件和目录已经修改了之后,它只把这些文件和目录复制到目标位置。另外,rsync 对各个文件使用相似的算法,只复制文件中修改过的部分。
按照最简单的形式,可以使用 rsync 把一个目录同步到一个新目录,例如:$ rsync -r a b。这会创建新目录 b,其中包含目录 a 中目录结构的拷贝。-r 选项让 rsync 递归遍历目录并复制整个目录结构。但是,如果目标目录已经存在,就会在目标目录 b 中创建一个新目录 a,其中包含文件的拷贝。这会有一些糟糕的副作用。例如,如果要把多个目录复制到备份目录,就会像清单 2 这样做。
清单 2. 把多个目录复制到备份目录
标签: