Linux系统备份与恢复

序言:前面一篇文章简单地介绍了Linux系统备份与恢复的相关概念linux 下载工具,这里接着上一篇介绍两个常用的备份与恢复命令

1 常见的备份命令

在介绍下边的备份恢复命令之前先简单的说明一下:

如果我们只是要实现完全备份linux 备份文件命令,那我们可以直接使用tar命令,将须要备份的重要数据进行打包压缩,然后使用cp命令进行复制来实现备份。再写一个备份脚本,通过定时任务在指定的时间来运行这个脚本就可以实现完全备份。

但是若果是要想实现增量备份,用自己去写备份脚本的形式来做的话都会特别地麻烦,因为须要判定什么是备份的新文件等等一些繁杂的操作。

为了愈发方便地使用增量备份,Linux系统提供了十分便捷的备份恢复工具。下面就介绍两个比较常用的备份恢复命令dump和restore。

1.1 备份命令:dump命令

注意:dump命令在有些centos系统中默认是没有安装的,需要自动进行安装。那么我们可以通过如下命令事先查询一下系统是否早已安装dump命令。

[root@localhost~]# rpm -qa |grep dump

操作结果如图1所示:

图1 查看系统是否早已安装dump命令

如图1所示,在查询结果中,我们只见到有一个tcpdump命令。这个是Linux系统的抓包命令,不是dump命令。所以这儿显示的是系统并没有安装dump命令,需要我们自动进行安装。此时,如果确定系统的yum源可以使用的话,只须要执行以下命令,系统还会手动将dump命令默认安装。

[root@localhost~]# yum -y install dump

操作结果如图2所示:

图2 安装dump命令

安装完dump命令以后,再来看一下dump命令的基本命令格式:

[root@linuxcool~]# dump [选项] 备份以后的文件名 原文件或目录

选项说明:

-level:备份级别。(一共十个备份级别,具体格式为“-0”~“-9”:“-”和具体的级别数字之间没有空格。其中0就是完全备份;1就是第一次增量备份;2就是第二次增量备份。。。最多支持9次增量备份。)

-f 文件名:手工指定备份以后的文件名。

-u:备份成功以后,把备份时间记录在/etc/dumpdates文件中。

-v:显示备份过程中国更多的输出信息。

linux系统备份文件的命令_linux 备份文件命令_备份的linux命令

-j:调用bzlib库压缩备份文件,其实就是把备份文件压缩为.bz2格式。

-W:显示容许被dump的分区的备份等级及备份时间。

我们先来看一下备份分区,首先,可以通过如下命令查看系统分区:

[root@localhost~]# df -h

操作结果如图3所示:

linux 备份文件命令_备份的linux命令_linux系统备份文件的命令

图3 查看系统分区

在这儿呢,因为boot的分区容量最小,备份上去更节约时间,所以就用boot分区来做一个备份的演示。但是在实际的工作当中,一般情况下,boot分区是不需要备份的,因为每一个安装的Linux系统,只要版本是一致的,它的boot分区里的内容就都是一样的。这里仅仅只是为了便捷演示dump命令,节省备份演示时间,而选用boot分区进行备份。

示例:

[root@localhost~]# dump -0uj -f /root/boot.bak.bz2 /boot/

说明:备份命令。先执行一次完全备份,并压缩和更新备份时间

操作结果如图4所示:

linux系统备份文件的命令_备份的linux命令_linux 备份文件命令

图4 完全备份分区

注意:压缩文件的时侯一定要标注压缩格式(即标注压缩文件名称前面的例如“.bz2”的信息),避免事后须要手工解压缩的时侯由于不清楚压缩格式而导致解压过程的冗长。

[root@localhost~]# cat /etc/dumpdates

说明:查看备份时间文件,了解文件是在哪些时间进行备份的,也就是每次执行dump操作的具体时间。

操作结果如图5所示:

图5 查看备份时间文件

注意:上述进行的是一个完全备份,那么要进行增量备份的话,就须要先向原文件中降低新的数据。首先,我们通过如下命令来查看一下备份文件的大小

[root@localhost~]# ll -h

说明:查看备份文件的详尽信息

操作结果如图6所示:

linux 备份文件命令_备份的linux命令_linux系统备份文件的命令

备份的linux命令_linux 备份文件命令_linux系统备份文件的命令

图6 查看完全备份分区文件的详尽信息

可以看见,完全备份后的压缩文件大小为30M,现在我们再来给原文件添加一个新的文件,比如说添加里面显示的安装日志文件install.log。通过如下所示命令,将28K的系统安装日志文件install.log复制到/boot分区中:

[root@localhost~]#cp install.log /boot/

说明:复制日志文件到/boot分区

当然,对于启动分区boot来说,不建议向其中储存过多的内容,避免引起该分区的显存占用过大,导致系统未能启动。

此处只是为了演示的便捷,演示操作完成以后会将添加进去的文件删掉的。

数据新增完成以后,我们再来瞧瞧1级别的增量备份操作:

[root@localhost~]#dump -1uj -f /root/boot.bak1.bz2 /boot/

说明:增量备份/boot分区硬盘安装linux,并压缩。

操作结果如图7所示:

linux 备份文件命令_备份的linux命令_linux系统备份文件的命令

图7 1级别增量备份分区

备份完成以后再来查看一下文件详情:

[root@localhost~]# ll -h

操作结果如图8所示:

linux 备份文件命令_linux系统备份文件的命令_备份的linux命令

图8 查看1级别备份分区详情

可以看见,1级别备份文件boot.bak1.bz2的大小只有19K,并不包含之前的30M的完全备份的数据内容。同样的。再来查看一下备份时间文件

[root@localhost~]# cat /etc/dumpdates

操作结果如图9所示:

图9 查看备份时间文件信息

如图9所示,可以看见很明显的备份级别分辨。

此时,如果你须要隔一段时间就进行一次增量备份,就可以写一个脚本,通过定时任务来实现上述的备份操作。

最后再来瞧瞧选项“W”的功能:

[root@localhost~]# dump -W

说明:查询整个分区的备份时间及备份级别的详尽信息

操作结果如图10所示:

图10 查询整个分区的备份时间及备份级别的详尽信息

可以看见,根分区和home分区显示的是从来没有备份过,而boot分区则显示的是最后一次进行备份的备份级别和备份时间。

以上就是使用dump命令来备份分区的基本操作。接下来须要了解的是假如想要备份文件或则目录,我们应当要如何操作:

[root@localhost~]# dump -0j -f /root/etc.dump.bz2 /etc/

说明:完全备份/etc/目录。

操作结果如图11所示:

linux 备份文件命令_linux系统备份文件的命令_备份的linux命令

图11 备份目录

注意:如果是备份目录,则只能使用0级别进行完全备份,而不再支持增量备份。也就是说,dump只有在备份分区的时侯才可以执行增量备份,否则如图12所示,系统将会报错:

图12 1级别增量备份目录报错

1.2 恢复命令:restore命令

[root@linuxcool~]# restore [模式选项] [选项]

模式选项说明:restore命令常用的模式有以下四种,且在使用的时侯这四个模式只能择其二,不能混用。

-C:比较备份数据和实际数据的变化。

-i:进入交互模式,手工选择须要恢复的文件。

-t:查看模式,用于查看备份文件中拥有什么数据。

-r:还原模式,用于数据还原。

选项说明:

-f:指定备份文件的文件名

示例:

(1)比较备份数据和实际数据的变化

首先须要模拟一下原数据损毁或遗失的场景,例如破坏boot分区中的数据或文件。先通过如下命令查看一下boot分区中有什么文件:

[root@localhost~]# ll /boot

操作结果如图13所示:

linux 备份文件命令_备份的linux命令_linux系统备份文件的命令

图13 查看boot分区中的文件

然后通过如下命令来模拟破坏其中的个别文件,例如镜像文件vmlinuz-2.6.32-642.el6.x86_64:

[root@localhost~]#mv /boot/vmlinuz-2.6.32-642.el6.x86_64/boot/vmlinuz-2.6.32-642.el6.x86_64.bak

说明:把/boot目录中的内核镜像文件改个名子。

注意:在做演示的时侯一定要记得演示完成以后要记得将该文件名再修改过来,否则会导致系统死机之后未能启动。

再来演示一下“-C”模式能够比较出现有文件与备份文件之间存在不同(即是否还能发觉现有文件发生了变化)。

[root@localhost~]#restore -C -f /root/boot.bak.bz2

操作结果如图14所示:

图14 -C模式功能演示

可以看见,系统提示我在上面更改过的镜像文件找不到了,存在一个比较错误。这就是“-C”模式的功能。

这个时侯,我们可以通过备份恢复来将boot分区恢复,也可以直接像刚刚那样再把文件名称更改过来。在这儿,我先直接把文件名更改过来linux 备份文件命令,避免前面忘了恢复造成系统死机后未能启动了,等演示完了所有模式以后再来演示恢复功能,

同样的,我们也可以顺便瞧瞧文件名更改正确之后再度使用“-C”进行比较会是个哪些疗效:

[root@localhost~]#mv /boot/vmlinuz-2.6.32-642.el6.x86_64.bak/boot/vmlinuz-2.6.32-642.el6.x86_64
[root@localhost~]#restore -C -f /root/boot.bak.bz2

操作结果如图15所示:

linux系统备份文件的命令_备份的linux命令_linux 备份文件命令

图15 -C模式功能演示2

可以看见,现在系统不会再提示有比较错误了。

(2)查看模式

[root@localhost~]#restore -t -f boot.bak.bz2

操作结果如图16所示:

linux系统备份文件的命令_备份的linux命令_linux 备份文件命令

图16 查看备份文件中拥有什么数据信息

(3)还原模式

下面先演示一下如何还原boot.bak.bz2分区备份:

首先通过如下命令创建一个目录,然后步入该目录中进行恢复操作,避免恢复的过程中文件解压的四处都是。

[root@localhost~]#mkdir bootbak
[root@localhost~]#cd bootbak/

先还原完全备份的数据:

[root@localhostbootbak]# restore -r -f /root/boot.bak.bz2

说明:恢复的同时会进行解压缩。

操作结果如图17所示:

图17 恢复完全备份数据

可以看见,/boot分区的数据文件全部解压到当前目录下了。再恢复增量备份数据:

[root@localhostbootbak]# restore -r -f /root/boot.bak1.bz2

操作结果如图18所示:

图18 恢复增量备份数据

可以看见,拷贝到/boot分区的系统日志文件也被解压到当前目录下了。

再来瞧瞧如何还原目录备份,例如现今要还原上面备份的/etc/目录的备份etc.dump.bz2。为了简单一点,我们就在刚才恢复备份分区时创建的目录中恢复/etc/目录的备份:

首先把该文件中刚才恢复的分区备份数据都删除,再来恢复我们的目录备份:

[root@localhostbootbak]# rm -rf *
[root@localhostbootbak]# restore -r -f /root/etc.dump.bz2

操作结果如图19所示:

linux系统备份文件的命令_linux 备份文件命令_备份的linux命令

图19 恢复目录备份

最后,要记得把上面进行演示的时侯拷贝到boot分区中的系统日志文件删掉。但是,切记,一定不要删错了文件,误删了boot分区的原有的文件!

Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复