我不确定是否有可能存在孤立的硬链接。让我解释一下我为什么问这个问题。请耐心听我说。
我的设置
我用它rsync
来将我的文件服务器同步到我的备份服务器。我使用--link-dest
rsync 选项来创建一个祖父-父-子方案(通过使用硬链接,每个备份看起来都像一个完整备份)。示例:http://www.mikerubel.org/computers/rsync_snapshots/
备份服务器将运行带有 SnapRaid 的 Ubuntu。SnapRaid 将配置 1 个奇偶校验驱动器。
SnapRaid 在其主页上声称:
如果故障磁盘太多而无法恢复,则只会丢失故障磁盘上的数据。其他磁盘上的所有数据都是安全的。
就我的情况而言,如果 1 个驱动器发生故障且 SnapRaid 无法恢复系统,那么我的大部分数据应该仍然在剩余的驱动器上。
假设
这就是我开始迷茫的地方。我还不确定如何测试这些假设。如果这些假设是错误的,请告诉我。
#1
理论上,我应该能够从我的 Ubuntu SnapRaid 机器中拔出一个驱动器,将其插入另一台计算机,并读取其内容。
#2
当我插入单个驱动器时,我期望看到所有硬链接。但是,由于我使用的是 SnapRaid,因此 inode 实际上可能位于与硬链接不同的硬盘上。
问题
如果我上述的假设是正确的,那么当我从 SnapRaid 配置中删除驱动器时,可能会出现孤立的硬链接。
这些孤立的硬链接会怎样?
这可能吗?
答案1
据我了解,SnapRaid 存储文件级奇偶校验信息,并且不会干扰较低块级设备。
如果是这样,那应该与硬链接的工作方式完全无关。基本上,如果您丢失了太多文件而无法通过奇偶校验信息恢复,那么您最终将得到无法读取的文件(非常像使用带有坏扇区的单个磁盘)。
回到最初的问题:不,不可能有孤立的硬链接。但是,你可以有指向有效硬链接的硬链接,但难以阅读索引节点
答案2
我认为您可能需要了解 SnapRaid 的工作原理,但硬链接无法跨分区链接,更不用说驱动器了,所以您不会看到来自该源的任何“孤立”。
答案3
硬链接无法跨卷工作。因此,如果卷消失,根据定义,不可能存在孤立的硬链接。硬链接是指向相同数据块的两个目录条目(从技术上讲...指向指向数据块的相同 inode)。由于目录必须与其块位于同一卷上,因此您不能最终得到孤立的硬链接。
幸运的是rsync
,它足够聪明,如果发现自己无法创建硬链接,它就会进行复制。它将使用两倍的磁盘空间,但不会增加网络带宽。事实上,使用你正在使用的“祖父-父亲-儿子方案”,rsync
将使用差异算法来节省网络带宽。
当然,每次文件在卷之间复制时,硬盘 I/O 带宽都会增加,因为必须从一个卷读取并写入另一个卷。如果父文件和子文件(或祖父文件和父亲文件)位于不同的卷上,这可能会产生重大影响。由于每个文件都无法进行硬链接,因此需要复制,因此磁盘 I/O 量将增加一倍或三倍。最糟糕的情况是祖父文件、父亲文件和儿子文件都位于不同的卷上:基本上不会进行硬链接!(备份集内的除外)。