使用 rsnapshot 进行备份时,“ [...] 我们首先将以前的备份复制到并行目录结构中,创建所有目录并为所有文件建立硬链接。” . 这一切都很好。
我假设这意味着初始备份将永远保留?“较新”的备份只会(通过硬链接)指向较旧的备份,所以我假设任何给定的硬链接指向的实际文件需要永远保留才能不破坏东西?
这个假设对吗?
使用 rsnapshot 进行备份时,“ [...] 我们首先将以前的备份复制到并行目录结构中,创建所有目录并为所有文件建立硬链接。” . 这一切都很好。
我假设这意味着初始备份将永远保留?“较新”的备份只会(通过硬链接)指向较旧的备份,所以我假设任何给定的硬链接指向的实际文件需要永远保留才能不破坏东西?
这个假设对吗?
不,这是不正确的。如果你有多个指向一个文件的硬链接,那么最初创建文件的那个并不重要,只有当指向文件的最后一个链接被删除时,文件才会被删除(参见rsnapshot 使用的硬链接和符号链接) 在 rsnapshot 的情况下,这意味着每个备份目录都是独立的,您可以删除所有其他备份目录(包括初始目录)并且仍然拥有完整的数据集。
根据您配置 rsnapshot 的方式,它最终会删除原始备份集。
TL;DR:不。
这取决于您定义“初始备份”的内容。
您首先创建一个备份 (
hourly.0
),其中包含今天的所有文件。在下一次迭代中,它将文件(
cp -L
,只是复制数据的链接) “复制”到hourly.1
文件夹。如果所有文件都与以前相同,则 rsync 不会写入任何内容,因此您有一个文件数据块(让我们使用
myfile.jpg
)和两个指向驱动器上同一文件的链接(hourly.0/myfile.jpg
和)。hourly.1/myfile.jpg
在没有更改的下一次迭代中,您仍然拥有相同的数据,只是
hourly.2/myfile.jpg
指向该数据的另一个指针 ( )。如果您已将其设置为保留 3 个备份,则它将删除hourly.2
、移动hourly.1
到hourly.2
、移动hourly.0
到hourly.1
、从“复制”(创建硬链接)hourly.1
到创建hourly.0
,然后再次运行 rsync。如果文件更改,rsync 将“删除”文件(实际上只是链接)
hourly.0/myfile.jpg
(数据保留在驱动器上,因为仍有两个链接指向它)。然后 Rsync 将使用新的myfile.jpg
.所以现在你有一个数据块和一个新文件的链接,一个数据块有两个旧版本文件的链接。
在下一次迭代中,它删除
hourly.2
(旧文件数据少一个链接),“复制”(硬链接)新文件(新文件的新链接。新文件数据有两个指针,和一个用于旧版本数据。在下一次迭代中,它会删除旧版本的最后一个链接(没有链接指向它的数据,文件系统认为它是免费的,并且在需要时会被覆盖),以及指向新文件数据的三个链接。
如果有指向数据的链接(无论来自哪个目录),该数据将保留在驱动器上。只有删除所有链接后,数据才会被覆盖。