在rsync运行时使用硬盘安全吗?


27

我计划通过来备份我的大型硬盘rsync,并预计需要几天的时间。在工作时使用原始硬盘(添加文件)是否安全rsync?还是最好不要触摸硬盘直到rsync完成?


1
请注意,“使用”可能就像打开浏览器一样简单。浏览器倾向于在其数据目录中写入大量随机内容。在最坏的情况下,您得到的是不一致的备份,即在还原时,您可能无法还原选项卡,书签可能会丢失(因为数据库已损坏)或类似的数量级。
乔纳斯·谢弗

如果要备份的数据量很大,则可能需要考虑将备份分成较小的部分(子树)。然后,只需将当前正在运行的部分保持为尽可能静态-您可以通过跟踪脚本的进度(带有日志等)来查看正在运行的部分。由于它不是一个大备份,因此某些部分可能与其他备份几乎不同步,但是如果您在实时系统上运行一个大备份,那么无论如何都会发生这种情况。

Answers:


34

正如其他人已经指出的那样,在rsync运行时,可以安全地从源磁盘读取或在目标目录之外使用目标磁盘。在目标目录中进行读取也是安全的,特别是如果目标目录仅由rsync运行填充。

什么不一般的安全是源目录中写而rsync的运行。“写入”是指修改源目录或其任何子目录的内容的任何内容,因此包括文件更新,删除,创建等。

这样做实际上不会 破坏任何内容,但是更改可能会或可能不会真正被rsync拾取并复制到目标位置。这取决于更改的类型,rsync是否已经扫描了该特定目录以及rsync是否已经复制了相关文件或目录。

但是,有一种简单的方法可以解决此问题: 完成后,使用相同的参数再次运行rsync。(除非您有一些时髦的delete参数;否则,请多加注意。)这样做将导致它重新扫描源,并转移在原始运行期间未拾取的任何差异。

第二次运行应传输上次rsync运行期间发生的差异,因此将更快地完成。因此,您可以在第一次运行期间随意使用计算机,但是应避免在第二次运行期间尽可能地对源进行任何更改。如果可以,强烈考虑在开始第二次rsync运行之前以只读方式重新安装源文件系统。(mount -o ro,remount /media/source应该做的事。)


7
一个人甚至可以在第二次奔跑之后进行第三次奔跑:这可能花费更少的时间... ;-)
gerlos

5
@gerlos一种模式似乎正在出现。听起来几乎每个人都可以在每次使用会话结束时继续运行rsync命令,几天之内就可以立即完成。
Monty Harder

5
@gerlos如果您在第二次运行rsync之前重新挂载了只读文件,则没有必要,并且备份将保持一致,同时将您无法写入源文件系统的时间减至最少。
CVn

1
顺便说一句,这就是为什么我要@reboot root find / -print &>/dev/null在系统crontab中添加一个条目来填充缓存的原因。(在我的特定系统上,实际的条目要复杂一些,以解决一些特殊情况。)启动后,它会在启动初期提早使用一些RAM和一些挂钟时间来改善目录树扫描的IME。
CVn

1
@MichaelKjörling:有趣的想法来缓存层次结构。但是,也许应该改为运行updatedb(构建locate的数据库)还是slocate -u(如果存在slocate,则运行)?这样,您仍然可以缓存层次结构,但是还可以建立定位或slocate的数据库,从而允许您使用这些命令快速查找许多文件?
奥利维尔·杜拉克

22

这取决于您使用的备份系统,但是通常,在备份设备时修改设备的内容是个坏主意。但是,您可以阅读其内容。这是安全的操作,即使它会减慢该过程的速度。

对于您的情况,rsync将建立一个文件列表,然后开始备份。因此,备份开始后添加到源硬盘的任何文件都不会被复制。

我要做的是在备份过程中根本不使用任何设备。这是获得快速且一致的备份的更安全的方法。


14
我通常让它运行,然后进行第二次运行,rsync这会在几秒钟内完成,因为只会复制在运行过程中更改的文件。一切都将在缓存中,因此在此期间避免进行修改变得更容易。
马丁·尤丁

15

rsync操作过程中从源区域读取数据是安全的,但是如果您进行任何更新,则rsync创建/更新的副本可能会不一致:

  1. 如果您更新了rsync已经扫描过的文件,则在以后运行之前它将看不到更新。如果更新文件尚未扫描,则目标位置将遵守更改。如果更新既已扫描又未扫描的文件,则最终将在目标位置混合使用旧版本和新版本。

  2. 如果您将文件添加到已经扫描过的目录中,则这次将丢失目标副本中的文件。如果从已扫描的目录中删除文件,则此文件将保留在目标副本中。根据您调用方式rsync的不同,整个树可能会在开始时进行扫描,也可能在同步过程发生时进行增量扫描。

  3. 在某些情况下rsync会看到不一致并警告您。如果您从已经被扫描但本身没有被扫描的目录中删除文件或子目录,则会收到有关该对象丢失的错误消息。在类似情况下,有时(如果大小和/或时间戳已更改)也可能会在扫描过程中警告文件更改。

对于某些备份来说,这种不一致可能不是一个大问题,但是对于大多数备份而言,这是一个大问题,因此建议您不要尝试同步活动变化的源。

如果使用LVM划分存储系统,则可以使用临时快照进行时间点备份。这要求您在卷组上有足够的空间来创建快照卷,该快照卷必须足以容纳需要快照期间将发生的所有更改。查看LVM文档(或许多在线示例之一:搜索“ LVM快照备份”或类似内容)以了解更多详细信息。

即使没有LVM,某些文件系统本身也支持快照-因此您可能也希望研究该选项。

如果您要备份大型活动卷而不需要长时间停机并且不能使用快照,那么运行“实时”扫描以完成操作然后停止访问该卷并运行另一个rsync进程可能就足够了,这可能会花费更少的时间(如果更改很少,它将只扫描目录树,然后扫描一些更新的文件)。这样,您应该避免更改的持续时间可以大大缩短。


我最喜欢您的答案,因为您会详细介绍如果修改文件会发生什么。您不仅要提供替代方案,还要解决其可能导致的不一致(缺少更新,有关文件丢失的警告等)。就我而言,使用rsync播种一个长备份,然后在几天后刷新它并不重要,这听起来也像OP的情况一样。听起来他/她不是第一次需要企业级备份,而只是想在此期间使用计算机。我说只是第二次运行rsync来捕获更新的文件。
ibennetch '17

11
  • rsync时,源HDD可以读取任何内容。

  • 源HDD可以写入与rsync内容无关的任何内容。

  • 目标HDD在rsync期间可以读取任何内容。

  • 目标HDD可以在rsync的条件下写入任何内容,以便为同步内容保留足够的空间。

当然,在任何情况下,都会降低性能。


0

当前所有的答案都在讨论数据安全性,即一致性和假设硬件是否完善。

要考虑的另一件事是硬件安全本身。如果您有未备份的硬盘驱动器,可能即将发生故障(您可能还不知道),并且正在进行初始全面备份,请不要使用它。如果数据很关键,甚至不要挂载它。您可以使用诸如dd将磁盘克隆为块设备之类的工具。您不希望磁盘头寻找什么,并可能在尝试进行备份时写入。Plus dd对于初始备份应该更快,因为它只是按顺序复制位(如果驱动器不是很满,我想rsync在初始情况下也会胜出)。

对于后续的增量备份,rsync是一个不错的选择,我同意其他答案的100%。


1
如果媒体是边缘的,甚至可能是边缘的,dd不是最佳选择。使用ddrescue代替;它可以更好地处理部分故障。但这不是原始问题的考虑因素。
CVn

@MichaelKjörling这是一个好点。
Zak
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.