我有一个名为servers的大目录,其中包含rsnapshot生成的许多硬链接.这意味着结构或多或少像:
./servers ./servers/daily.0 ./servers/daily.0/file1 ./servers/daily.0/file2 ./servers/daily.0/file3 ./servers/daily.1 ./servers/daily.1/file1 ./servers/daily.1/file2 ./servers/daily.1/file3 ...
使用rsnapshot以节省空间的方式创建快照:如果/servers/daily.0/file1与/servers/daily.1/file1相同,则它们都使用硬链接指向相同的inode,而不仅仅是每个周期复制一个完整的快照./servers/daily.0/file1/servers/daily.0/file1
我试图用硬链接结构复制它,以节省目标驱动器上的空间,使用:
nohup time rsync -avr --remove-source-files --hard-links servers /old_backups
一段时间后,rsync冻结了 – 没有新行添加到nohup.out文件中,并且没有文件似乎从一个驱动器移动到另一个驱动器.删除nohup并没有解决问题.
知道什么是错的吗?
亚当
解决方法
我从经验丰富的经验中得出的答案是:不要这样做.不要尝试复制大量使用硬链接的目录层次结构,例如使用rsnapshot或rsync -link-dest或类似链接创建的链接.除了小数据集之外,它不会起作用.至少,不可靠. (当然,您的里程可能会有所不同;也许您的备份数据集比我的小得多.)
使用rsync –hard-links在目标端重新创建文件的硬链接结构的问题在于发现源端的硬链接很难. rsync必须在内存中构建一个inode映射来查找硬链接,除非你的源文件相对较少,否则这可能会爆炸.在我的情况下,当我了解到这个问题并且正在寻找替代解决方案时,我尝试了cp -a,它也应该保留目标中文件的硬链接结构.它很长一段时间,然后最终死亡(带有段错误,或类似的东西).
我的建议是为您的rsnapshot备份留出整个分区.当它填满时,将另一个分区联机.将硬链接数据集作为整个分区而不是单个文件移动要容易得多.