Rsync -avzHP 跟随硬链接而不是将它们复制为硬链接

woe*_*ndl 16 linux backup ext3 rsync rsnapshot

我使用 rsnapshot 为我的“工作”共享创建每小时/每天/每周/每月的备份。现在我正在尝试使用 rsync 将整个备份目录复制到外部驱动器上。

我在屏幕会话中使用了这个命令/参数(是的,rsync-exclude.txt 位于我运行命令的目录中)

rsync -avzHP --exclude-from 'rsync-exclude.txt' /share/backup/ /share/eSATADisk1/backup/;
Run Code Online (Sandbox Code Playgroud)

整个东西在QNAP TS-439上运行,内部驱动器是一个格式化为EXT4的单盘(无RAID),外部驱动器是格式化为EXT3。

发生的情况是:Rsync 跟随每个硬链接并且 复制实际文件,而不是在外部驱动器上重新创建更新的硬链接。我没有立即意识到这一点,因此外部驱动器最终被相同文件的 xxx 副本丢弃。

我想要实现的是:将 rsnapshot 生成的整个文件结构复制到外部驱动器,保留硬链接以节省空间。注意:这不一定是使用 rsync 完成的。

感谢您的想法和时间。我很感激你的帮助,很重要。

更新:我了解到,rsnapshot 不使用符号链接,它使用硬链接,所以我现在使用 -H 选项,它应该根据Rsnapshot 保留硬链接结构到多个目的地(或维护硬链接结构),但它仍然不起作用......我在这里错过了什么?

更新 2:我在这里找到了关于这个主题的另一个意见/声明:rsync with --hard-links freezes Steven Monday 建议不要尝试 rsync 包含硬链接的大文件结构,因为它会占用大量内存,这对 rsync 来说是一项艰巨的任务。所以可能更好的解决方案是制作我要备份的数据结构的 .img。你怎么认为?

Ste*_*day 12

rsync命令的-H(或--hard-links)选项,从理论上讲,你正在尝试什么来完成,这是,在短暂的:创建文件系统的副本保留了原始的硬链接结构。正如我在对另一个类似问题的回答中提到的那样,一旦您的源文件系统增长超过硬链接复杂性的某个阈值,此选项注定会失败。

该阈值的精确位置可能取决于您的 RAM 和硬链接的总数(可能还有许多其他因素),但我发现尝试精确定义它是没有意义的。什么真正重要的是,该阈值是所有太容易在现实世界的情况下穿过,你不会知道你已经越过它,直到有一天,你尝试运行rsync -aH或者cp -a说斗争,并最终失败.

我的建议是:将重度硬链接的文件系统复制为一个单元,而不是文件。也就是说,将整个文件系统分区复制为一个大 blob。有许多工具可以做到这一点,但最普遍的是dd.

使用库存固件,您的 QNAP NAS 应该dd内置,以及fdisk. 使用fdisk,在目标驱动器上创建一个至少与源分区一样大的分区。然后,用于dd在新创建的目标分区上创建源分区的精确副本。

dd复制过程中,您必须确保源文件系统中没有任何变化,以免最终在目标上得到损坏的副本。一种方法是umount在开始复制过程之前访问源;另一种方法是以只读模式挂载源。