最新消息:

Hanoi Tower(汉诺塔备份策略)在备份中的运用

容灾备份 大步 1049浏览 0评论

备份重用的轮换策略之一就是Hanoi Tower(汉诺塔备份策略),其次,还有GFS(组父子策略),以及一些其他的数学模型。这里分析下汉诺塔备份策略的应用。

 

汉诺塔图

汉诺塔图

(规则:一次只能移动一个盘,且大盘不能再小盘上面。将所有盘按原样,移动到另外一根柱子上。)

增量备份(Incremental backup 或 称为 累积备份)

增量备份的概念与完整备份(Full backup)是相对的。完整备份是指对整个文件系统进行备份,但是这样其实是不切实际的,如果我整个web站点的数据多达上百个G,那么每天一次完整备份是比较耗费资源的。增量备份,指的是在系统进行完第一次完整备份后,经过一段时间的运行,比较系统与备份文件之间的差异,仅备份有差异的文件而已。而第二次增量备份则与第一次增量备份的数据比较,也是仅备份有差异的数据而已。利用增量备份,我们可以只对那些从上次备份之后进行了修改的文件进行备份。这样的话,每次备份的数据量就不会很多,从而提高了备份的速度,也很方便。

用个原理图来说明下增量备份(累积备份)

  •  备份方式:备份更新的数据
  •  还原方式:必须将每次备份的数据全部还原

备份次数

1

2

3

资料更新量

5M

10M

备份方式

完全

增量

增量

备份容量

100M

5M

10M

还原点

优点

缺点

节省备份时间

数据还原费时,麻烦

 

下面引自《鸟哥的Linux私房菜》一书的增量备份(累积备份)例子和图片:

累积备份 (incremental backup) 操作示意图

累积备份 (incremental backup) 操作示意图

 

假如我在星期一做好完整备份,则星期二的增量备份是系统与完整备份间的差异数据;星期三的备份是系统与星期二的差异数据,星期四的备份则是系统与星期三的差异数据。那你要注意的是,星期二的数据是完整备份加第一次增量备份,星期三的数据是完整备份加第一次增量与第二次增量的备份, 星期四的数据则是星期一的完整备份加第一次加第二次加第三次增量备份。由于每次都仅与前一次的数据比较而已,因此备份的数据就会少很多!

 

那如何还原呢?经上面的分析,我们知道增量备份的还原是比较麻烦的!假设你的系统在星期五的时候挂了!那如何还原呢?首先,你必须要还原星期一的完整备份,然后还原星期二的增量备份,再依序还原星期三、星期四的增量备份才算是完全复原!那如果你是经过九次的增量备份,就得要还原第九次的阶段,才是最完整的还原程序!

 

差异备份(Differential backup)

差异备份与增量备份有点相似,也是需要进行第一次的完整备份后才能进行。只是差异备份指的是:每次的备份都与原始的完整备份比较结果。所以系统运行越久,离完整备份时间越长,那么该次的差异备份数据可能就会越大!

 

用个原理图来说明下差异备份(Differential backup)

  •  备份方式:备份完整备份后更新的数据
  •  还原方式:还原最后一次的备份及上次的完整备份数据

备份次数

1

2

3

资料更新量

5M

10M

备份方式

完全

差异

差异

备份容量

100M

5M

15M

还原点

优点

缺点

可节省数据还原的时间

所需磁盘空间比增量备份大

通过上面的描述,我们知道了,区分增量备份(累积备份)与差异备份的关键就是参照点的不同,增量备份是以上一次增量备份为参照点。而差异备份始终是以完整备份为参照点。

我们根据汉诺塔备份策略做备份的时候,要指定一个备份级别,它是0~9之间的一个整数,级别为N的备份会对从上次进行的级别小于N的备份以来修改过的所有文件进行备份。级别为0的备份会把整个文件系统备份到磁盘。

0<——完整备份

1<——自0级备份之后,新增改动的部分

2<——自01级备份之后,新增改动的部分

3<——自0级、1级、2级备份之后,新增改动的部分

之后以此类推,常用在增量备份(累积备份)

(注意:上面的1级的增量备份,也可以看成是差异备份,因为它的参照点是完整备份。)

级别的选择其实是随意的,我们一般选择359级,当然你也可以选择123,都一样。然后,如果以后决定添加另一个备份级别时候,备份级别之间就没有间隔,会比较麻烦,所以我建议备份级别之间最好留下些喘息的空间,给自己留些“后路”。

通过这种汉诺塔算法来使用增量备份备份系统后,要想重新回到文件系统,就要调用不同级别的备份文件来完全恢复。这样做的好处是,能够减少备份时的资源占用,又能节省磁盘空间,恢复起来也比较快。

比如,现在我要完整恢复文件系统,那么我们就先要恢复0级备份文件,接着是安装和恢复增量备份的文件。应该按照创建它们的顺序来恢复增量备份文件。因为各个备份文件间有冗余,所以可能没有必要恢复每一个增量备份的文件。下面是决定恢复哪些备份文件的算法(其实就是汉诺塔算法)

步骤1:恢复最近一次的0级备份文件。

步骤2:恢复在刚才所恢复的备份文件之后创建的备份文件中级别最低的一次备份文件。如果在那个级别中有多次备份,那么应该恢复最近一次的那一次备份。

步骤3:如果这就是上一次备份的文件,那么任务就完成了。

步骤4:否则,返回步骤2中。

我这里举一些例子,用红色字体代表需要恢复的级别:

第一个例子:0 0 0 0 0 0

解析:有六个相同级别的备份,没有比0级别的备份耕地的备份,所以,我们应该选最近的一次的0级备份,也就是最后一个备份。

第二个例子:0 5 5 5 5

解析:这里面0级别最低,且只有一个0级别备份,所以先恢复0级别备份。然后下面就只有5级别备份,我们按照上面的算法,我们要恢复最近的一次5级别备份,就可以完整恢复文件系统。

第三个例子:0 3 2 5 4 5

解析:首先,我们要恢复0级别的。接着是恢复比0级别高,而又比其他级别(这里是345三个级别)低的级别,那么久只有2级别了。继续,找到2级别以后的级别(这里的3级别就可以不用管了,因为它在2级别之前),且比2级别高,又比4,5级别低的级别,那么就是4级别了。最后。就是恢复最近的5级别备份了,所以是最后一个5级别。这样就完整恢复了。

第四个例子:0 9 9 5 9 9 3 9 9 5 9 9

解析:首先,恢复0级别备份。然后是找到0级别一个最低的一个级别,那么就是3级别。接着,找到3级别以后最低级别,就是5级别。最后,找到5级别以后最低的级别,只剩下两个9级别了,但是最后一个9级别是最新的最近的,所以,我们恢复它就可以了。这样完成了完整恢复。

第五个例子:0 3 5 9 3 5 9

解析:首先,恢复0级别备份。然后,找到0级别以后最低的一次备份,这里就有两个3级别备份,那么,我们只要恢复最近最新的一次3级别就可以了。接着,找到3级别备份之后的最低级的备份,这里就是5级别。最后是5级别以后最低级的备份,这里距只剩下一个9级别备份,恢复即可。这样就完整的恢复了。

大家可能通过这几个增量备份恢复的实际例子,发现增量备份的一个好处就是,除0级备份文件外,你只要使用不超过4个备份文件就可以恢复整个文件系统。

增量备份使用汉诺塔备份策略,即周期性循环的方式进行,推算出一个星期或者一个月内每一天的备份的情况,通过计划任务执行。下面以16天为周期,且用五个磁盘来演示Hanoi Tower(汉诺塔备份策略)在增量备份的使用过程:

   日期

备份等级

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

0

F

F

1(也可看做差异备份)

 

 

 

 

A

 

 

 

 

3(增量备份)

 

B

 

 

B

 

5(增量备份)

C

 

C

 

 

C

 

C

9(增量备份)

D

D

D

D

 

D

D

D

D

解析:这里为了养成好习惯,我们采用01359做外标记备份级别,当然,你也可以用01234这几个级别来对应它们。

在计划任务中设定5个计划任务:

任务一就是0级备份,就是一次完整备份,设定为每隔15做一次0级别完整备份。

任务二就是9级备份,设定为每隔一天执行一次。

任务三就是5级备份,设定为每隔三天执行一次。

任务四就是3级备份,设定为每隔七天执行一次。

任务五就是1级备份,设定为每隔十五天执行一次,虽然间隔和任务一样,但是日期是不同的,它们错开了。

这样就是16天一个周期。第17天又是个周期的开始。顺序就是:09593959195939590

假设我们要恢复任意一天的数据,根据上面的表格,下面以红色的数字代表要恢复的备份文件:

恢复第一天的数据,  执行:0

恢复第二天的数据,  执行:09

恢复第三天的数据,  执行:095

恢复第四天的数据,  执行:0959

恢复第五天的数据,  执行:09593

恢复第六天的数据,  执行:095939

恢复第七天的数据,  执行:0959395

恢复第八条的数据,  执行:09593959

恢复第九天的数据,  执行:095939591

恢复第十天的数据,  执行:0959395919

恢复第十一天的数据,执行:09593959195

恢复第十二天的数据,执行:095939591959

恢复第是三天的数据,执行:0959395919593

恢复第十四天的数据,执行:09593959195939

恢复第十五天的数据,执行:095939591959395

恢复第十六天的数据,执行:0959395919593959  这是使用备份文件最多的一天,需四个   

恢复第十七天的数据,执行:09593959195939590

通过上面这个详细的例子,我们又在此印证了上面的一个增量(差异)备份的好处:

0级备份文件外,你只要使用不超过4个备份文件就可以恢复整个文件系统。

通过上面的分析,汉诺塔备份策略的三个好处:

1. 由于增量备份的文件较小,可以节省备份的时间和系统资源,如硬盘的使用

2. 假设某天系统发生了异常导致数据流失,只要拿出部分级别的备份文件,就可以完整恢复当天的数据。且除0级备份文件之外,只需要不超过4个增量备份文件就可以了。

3. 如果不使用汉诺塔算法来给他们标定序号(即每个等级的备份的间隔,每一天进行哪个等级的备份),会导致还原数据时候,需要拿出所有的增量备份文件,比如星期一做个完整的备份,后面接连七八天都做增量备份,那么,我恢复第九天的数据,我就要拿出九天的所有增量备份数据才行,恢复的话更麻烦了。

大家会问这样为什么这样呢?

    我个人认为是因为汉诺塔备份,利用了不同等级备份间的有冗余的特性,这样就不需拿出所有的增量备份文件来恢复数据。比如:拿刚刚那个16天的例子来说,第三天的5级备份里面就包括了第二天的9级备份;第五天的3级备份包括了第二天9级备份,第三天5级备份以及第四天的9级备份;而第九天的1级备份,更是包含了第二天到底8天内的所有增加的数据。所有,这样就有了数据的冗余,也就不必在重复的拿出那些已经被包含的增量备份数据了,省去了纯增量的麻烦。

转载请注明:大步's Blog » Hanoi Tower(汉诺塔备份策略)在备份中的运用

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
SiteMap