暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

基于硬链接实现增量备份

生有可恋 2022-04-07
1522

正常的文件备份有备份速度慢,浪费磁盘空间等缺点。当文件有多份备份时,磁盘占用会膨胀很多倍。

当整个目录内容变化不大时,如何才能实现增量备份,每次只备份变化的部分?

使用硬链接方式做备份即可实现增量备份的效果,不浪费空间。在备份时,将 cp 命令加一个 -l 参数即可实现硬链接方式拷贝。

    #!/bin/bash

    BACKUPTIME=`date +%Y%m%d%H%M%S`

    time cp -rfl /src/  bakup/tgt"$BACKUPTIME"

    使用 du 对备份目录统计数据量时,第一份目录会统计实际磁盘占用,后面的只会显示变化部分占的数据量。

    如果想忽略掉硬链接的影响,对硬链接也统计数据量,需要在 du 后面加一个 -l 参数。

    前面提到了硬链接的优点,比如:

    • 节省磁盘空间

    • 可做增量备份

    • 备份速度快

    硬链接的缺点也很明显,比如:

    • 只支持文件,不支持目录

    • 不能跨文件系统

    • 增加了复杂度,特别是一些工具在处理硬链接时,要仔细阅读说明文档,比如 rsync 处理硬链接和软链接的参数非常多,容易犯迷糊。

    提到硬链接的缺点,我们需要知道硬链接是什么。硬链接是文件的一个别称,文件内容都指向同一个 inode,也就是说它们实际上是一个文件,只是存在不同的目录位置中,可以同名,也可以不同名。

    我们看个例子,下面两个文件都是基于硬链接复制的复本

    这两个文件,除了文件名不同,其它属性:Inode 值,文件大小、权限、udi、gid、atime、ctime、mtime 全都一样。当其中一个文件属性发生变化,比如权限通过 chmod 发生变化,所有的复本都会发生变化。

    也就是说它们实际上是指向的硬盘中的同一个位置,只是文件名和目录位置不一样,其它都一样,文件属性一个变,其它的都会变。

    因为它们指向的是磁盘中的同一个位置,所有硬链接无法跨设备,也就是说如果原目录和目标目录不在一个分区,是不能跨分区或跨文件系统创建硬链接的。这是它的本质决定的,也是它的局限性所在。

    到这里,我们问一个问题。当一个纯文本文件,通过硬链接复制了一份。当对原始文件进行修改时,复本文件内容会发生变化吗?

    这是一个比较复杂的问题,需要做实验来验证。我来公布一下答案。

    如果原始文件的 Inode 没有变,对原始文件进行修改,复本文件内容也会随着一起发生变动。如果原始文件的 Inode 发生变动,则复本文件不会变。

    那到底什么情况下 Inode 会变?对文件内容进行修改会导致 Inode 发生变化 ?

    这个要看是如何修改的。测试发现,如果使用 vim 对文件进行编辑,则 Inode 有可能会变。

    可能与编辑器的工作原理有关,有的编辑器会创建一个临时文件 .~swp 当保存时将临时文件覆盖至原始文件。

    测试发现使用 echo "test" >> src.txt 方式写文件,inode 没有变。

    当然,空文件和有内容的文件的 inode 是不同的,与 vim 和 echo 方式无关。所以当使用硬链接备份文件时,如果在文件的 inode 保持不变的情况下对文件进行修改,可能会导致原文件和备份文件都被污染,使备份失效。

    但一般情况,原始目录中的文件被删,或被覆盖,使用硬链接方式备份是可以抵御这一类破坏的。

    因为硬链接的本质是指向硬盘中的同一位置,所以硬链接方式备份无法抵御磁盘坏道,当硬件损坏,所有备份都会受影响。

    硬链接可以节省磁盘空间,这是优点。只有当所有硬链接全部删除完,文件才会从文件系统中抹除。这个特点可以应对人为逻辑删除,也就是说当有多份硬链接时,文件很难删干净。

    参过 stat 可以查看当前文件还有几份备份

    查硬链接文件,可以根据 Inode 进行查询,Inode 相同的即为同一个文件。find 命令有两个参数可以用来查硬链接的文件。

      find tgtdir -inum <inode>
      find tgtdir -samefile filename

      与硬链接相关的命令有 stat 、cp、find、rsync,其中 rsync 关于硬链接这块较为复杂,可以参考下面的链接【当rsync遇到文件链接...】:

      • https://zhuanlan.zhihu.com/p/365239653



      文章转载自生有可恋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论