![使用硬链接备份 rsync——您可以将硬链接文件移动到不同的文件夹吗?](https://linux22.com/image/194894/%E4%BD%BF%E7%94%A8%E7%A1%AC%E9%93%BE%E6%8E%A5%E5%A4%87%E4%BB%BD%20rsync%E2%80%94%E2%80%94%E6%82%A8%E5%8F%AF%E4%BB%A5%E5%B0%86%E7%A1%AC%E9%93%BE%E6%8E%A5%E6%96%87%E4%BB%B6%E7%A7%BB%E5%8A%A8%E5%88%B0%E4%B8%8D%E5%90%8C%E7%9A%84%E6%96%87%E4%BB%B6%E5%A4%B9%E5%90%97%EF%BC%9F%20.png)
我使用 rsync 对文件夹 /hi 进行增量备份,并且使用 --link-dest=[some.server]/hi。假设我的 /hi/there 文件夹中有 1000 张照片,它通过 rsync 备份在我的服务器上。
现在我将这些照片从 /hi/there 移至 /hi/here。我可以让 rsync 为这 1000 张照片生成硬链接,还是 rsync 总是为这些照片制作新副本,因为它们已更改(尽管只是移动到不同的文件夹)。
在我看来,结合像 fslint 这样的东西,我们可以让 rsync 识别出 1000 个文件是相同的,只是在不同的目录中,并创建硬链接而不是副本。
答案1
当移动大量数据时(在备份中不存储两个副本所节省的空间必须超过用于存储一组额外元数据的备份空间),我做了几次是
- 对于 中的每个文件
/hi/there
,在 中 创建一个同名的硬链接/hi/here
- 进行备份
- 删除文件/硬链接(当您创建硬链接时,文件的旧链接和新链接实际上没有区别)
/hi/there
以前的备份(当然)仅包含每个文件的一个副本,中间备份会将新名称链接到相同的副本(在备份中),并且将来的备份将不知道该文件曾经具有其他名称,并且只会将新副本链接到现有副本。
如果您的备份上没有空间用于额外副本,则没有什么可以阻止您执行步骤 1 和步骤 3,并且在步骤 2 之间有足够的时间,这可以是定期计划的备份。
如果您不希望备份包含该额外副本,可以在进行新备份时将其删除。
答案2
如果您使用--link-dest
, 引用/hi/there
,将在文件中rsync
创建硬链接。hi/here
您可以通过运行来验证这一点ls -l
,该命令将显示硬链接的数量。如果文件是唯一的,您只会看到数字 1。
https://superuser.com/a/12975
另一种验证方法是查看ionode
文件的唯一编号并在两个文件夹之间进行比较,如下所述:
https://superuser.com/a/12974
您甚至可以通过比较文件夹来验证这一点,但我发现比较单个文件更容易:
如何通过 inode 区分两个文件夹
我对增量 rsync 备份也有同样的问题,并且我能够验证硬链接是否已正确创建,而无需使用额外的空间。