使用 rsnapshot 进行备份时,“ [...] 我们首先将先前的备份复制到并行目录结构中,创建所有目录并建立到所有文件的硬链接。” . 这一切都很好。
我认为这意味着初始备份将永远保留?“较新”的备份只会(通过硬链接)指向较旧的备份,所以我假设任何给定硬链接指向的实际文件都需要永久保留以免破坏?
这个假设正确吗?
TL;博士:没有。
这取决于您定义“初始备份”的内容。
您首先创建一个备份 ( 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(旧文件的数据少一个链接),“复制”(硬链接)新文件(新文件的新链接。新文件数据有两个指针,和一个用于旧版本数据。
在下一次迭代中,它删除旧版本的最后一个链接(没有链接指向它的数据,被文件系统认为是空闲的,并且在需要时会被覆盖),以及指向新文件数据的三个链接。
如果存在指向数据的链接(无论来自哪个目录),则该数据将保留在驱动器上。只有删除所有链接后,数据才会被覆盖。