我正在迁移到一台新服务器,除了 html/php 文件外,还有一个包含大约 90,000 个文件(总大小为 24GB)的目录需要移动。
当我进行测试迁移时,我使用 tar 创建了一个 tarball,然后在新主机上使用 wget,然后提取 tar 文件,但尽管它工作正常,但总共花了大约 3 个小时才完成。当我在实际迁移中执行此操作以确保没有新文件进入或文件被更改等时,这将导致 3 小时的停机时间。
我现在正在计划实际的迁移,并试图找到更快的方法来完成此操作,并想知道使用 rsync - 我只在本地使用过 rsync,而且只用于少量文件,因此对 90k 个项目运行 rsync 是否比上述方法更快?
只要实际过程完成得更快,我就不会太担心 CPU、内存或网络使用情况,因为这将在系统更安静的非工作时间完成。
答案1
您必须进行测试才能找到答案。有很多变量,例如存储系统的速度。
考虑在旧系统正常运行时恢复 tar 存档或备份。然后在停机期间使用 rsync 复制剩余的更改。它仍然需要检查许多文件修改时间,这需要时间,但 I/O 和网络传输要少得多。
这个增量复制就是 rsync 擅长的,一次性做完可能不比其他工具快。
答案2
Rsync 可让您在不关闭服务器的情况下同步文件。例如,您可以在生产过程中进行同步,然后关闭服务器,再次同步以确保同时获得所有更改,然后打开新服务器。第二次同步将是增量同步,并且将花费整个同步过程的一小部分时间,从而最大限度地减少停机时间。
答案3
rsync 将仅复制差异 - 仅从源服务器到目标服务器的更改。如果您已经在新服务器上复制了数据,则 rsync 将仅复制 tar 和实际状态之间已更改的内容。
答案4
如果您想使用 tar 而不是 rsync 执行此操作,您可以并行化您的任务:
来源 :
tar ... | nc host port
目的地 :
nc -l -p port | tar ...
它至少可以减少你的时间