目录
13.9 Linux rsync命令:支持本地备份和远程备份
不知道大家有没有丢失过重要的数据呢?
丢失数据的理由是多种多样的,有人是因为重装系统时,没有把加密文件的密钥导出,重装系统后密钥丢失,导致所有的加密数据不能解密;也有人是因为在火车上笔记本电脑被别人调包,从而导致硬盘中的重要数据丢失;还有人是因为在系统中误执行了 rm -rf
命令,导致整个根目录被人为清空。但由此带来的后果是一样严重的。
保护重要数据的最有效的方法就是“不要把鸡蛋都放在一只篮子里”,这就是数据备份最主要的作用。
13.1 Linux备份的重要性
在前面的章节中,我们已经学习了很多有关 Linux 系统的安全防范策略(例如用户管理、权限管理等),但安全永远是相对的,而不是绝对的。系统硬件的损坏,黑客的无孔不入,都是系统安全的大敌。在这种情况下,如果我们要保证系统安全和应用安全,备份是必不可少的一个步骤。
虽然 Linux 系统难免会因内部环境、底层硬件、外来黑客等因素的影响出现问题,但作为一名系统管理人员,自身的职责并不是要保证系统永远不出问题(事实上也是不可能做到的),而是要在系统出现故障或者崩溃时,能以最快的速度,用最短时间恢复系统的运行,保证数据的安全,从而将故障带来的损失降到最低。
要实现这样的目标,就要求系统管理人员对系统和业务应用有一个合理的备份恢复策略,完美的备份策略可以保证业务的 0 宕机时间和数据的完全恢复。有人说,既然数据备份非常重要,那我把重要数据在硬盘中保存一份,在移动硬盘中也保存一份,再刻录一张光盘,这样数据应该非常安全了吧?
对个人用户来讲,这样保存数据已经足够了;但是对企业用户来讲,还是有安全隐患的,因为这些数据还是放在同一个地方的。还记得美国的“9·11”事件吗?像美国纽约世贸中心那样的庞然大物也轰然倒塌。当然,相比这样的灾难来讲,数据的损失已经是微不足道的了,不过这仍然说明异地备份的重要性。所以,我们在备份数据的时候,不仅要把数据保存在多个存储介质中,还要考虑把重要数据异地保存。
至于在 Linux 系统中,有哪些数据应该被视为重要数据,又该如何备份?读者可带着这些疑问,继续阅读后续文章。
13.2 Linux中的哪些数据需要备份?
经常使用 Windows 系统的小伙伴应该听说过 ghost 软件,它可以实现将整个系统完全复制到另一个硬盘上。当系统出现问题,通过备份硬盘,在短时间内即可将系统中的所有数据完全恢复。
ghost 是一种硬盘镜像技术,可以将系统盘中的所有数据镜像到另一个备份硬盘上。
虽然在 Linux 系统中也有类似 ghost 的工具(dd 命令就可以实现整盘备份),不过这种备份花费的时间比较长,占用的硬盘空间较大,不太适合经常进行。
事实上,全盘备份 Linux 系统并不是一个好的策略,我们仅需要备份系统中的所有重要文件数据即可,不但备份过程迅速,恢复也快。那么,哪些数据是 Linux 服务器中较为重要的、需要定时备份的数据呢?
我个人认为,需要备份的文件大致可分为 2 类,分别是系统级配置文件和用户级配置文件。
系统级配置文件
系统配置文件主要指的是系统全局的一些配置信息,比如说:
- /root/ 目录:/root/ 目录是管理员的家目录,很多管理员会习惯在这个目录中保存一些相关数据,那么,当进行数据备份时,需要备份此目录。
- /home/ 目录:/home/ 目录是普通用户的家目录。如果是生产服务器,那么这个目录中也会保存大量的重要数据,应该备份。
- /var/spool/mail/ 目录:在默认情况下,所有的用户未读的邮件会保存在 /var/spool/mail/ 目录下和用户名相同的邮箱文件中,已读的邮件会保存在用户家目录下的 mbox 文件中(mail 命令默认如此保存,不过如果使用了 hold 命令,那么不管邮件是否已读,都保存在 /var/spool/mail/ 目录中。可以使用 mbox 命令恢复已读邮件保存在“~/mbox”文件中)。一般情况下,用户的邮件也是需要备份的重要数据。
- /etc/ 目录:系统重要的配置文件保存目录,当然需要备份。
- 其他目录:根据系统的具体情况,备份你认为重要的目录。比如,我们的系统中有重要的日志,或者安装了 RPM 包的 MySQL 服务器(RPM 包安装的 mysql 服务,数据库保存在 /var/lib/mysql/ 目录中),那么 /var/ 目录就需要备份;如果我们的服务器中安装了多个操作系统,或编译过新的内核,那么 /boot/ 目录就需要备份。
以上这些目录对系统的运行至关重要,并且针对不同的系统应用,其设置也不尽相同。如果丢失的这些文件,即使新的操作系统能很快安装完毕,对系统也要重新配置,花费的时间会更长。
用户级配置文件
用户级配置文件,也就是用户业务应用与系统相关的配置文件,这些文件是运行业务应用必不可少的,一旦丢失,应用将无法启动。
我们的 Linux 服务器中会安装各种各样的应用程序,每种应用程序到底应该备份什么数据也不尽相同,要具体情况具体对待。这里拿最常见的 apache 服务和 mysql 服务来举例。
apache 服务需要备份如下内容:
- 配置文件:RPM 包安装的 apache 需要备份 /etc/httpd/conf/httpd.conf;源码包安装的 apache 则需要备份 /usr/local/apache2/conf/httpd.conf。
- 网页主目录:RPM 包安装的 apache 需要备份 /var/www/html/ 目录中所有的数据;源码包安装的 apache 需要备份 /usr/local/apache2/htdocs/ 目录中所有的数据。
- 日志文件:RPM 包安装的 apache 需要备份 /var/log/httpd/ 目录中所有的日志;源码包安装的 apache 需要备份 /usr/local/apache2/logs/ 目录中所有的日志。
其实,对源码包安装的 apache 来讲,只要备份 /usr/local/apache2/ 目录中所有的数据即可,因为源码包安装的服务的所有数据都会保存到指定目录中。但如果是 RPM 包安装的服务,就需要单独记忆和指定了。
mysql 服务需要备份如下内容:
- 对于源码包安装的 mysql 服务,数据库默认安装到 /usr/local/mysql/data/ 目录中,只需备份此目录即可。
- 对于RPM包安装的 mysql 服务,数据库默认安装到 /var/lib/mysql/ 目录中,只需备份此目录即可。
如果是源码包安装的服务,则可以直接备份 /usr/local/ 目录,因为一般源码包服务都会安装到 /usr/local/ 目录中。如果是 RPM 包安装的服务,则需要具体服务具体对待,备份正确的数据。
以上重要的文件和目录,是必须要备份的,那么,不需要备份的目录有哪些呢?比如 /dev 目录、/proc 目录、/mnt 目录以及 /tmp 目录等,这些目录是不需要备份的,因为这些目录中,要么是内存数据,要么是临时文件,没有重要的数据。
13.3 Linux数据备份介质的选择
备份数据要有存放数据的安全容器。对存储介质的基本要求一般从存取速度、存储安全和存储容量 3 个方面进行考虑:
- 存取速度是对存储介质的一个基本要求。数据的备份是一个读写操作极度频繁的过程,存取速度非常高的备份介质,可以大大缩短备份数据的时间,同时也可以减少恢复数据的时间。
- 存储安全性是对存储介质的一个硬性要求,不安全的存储设备还不如不用。现在很多存储设备都对安全性做了很多优化,例如做 RAID 磁盘阵列、Cache 读写等。专业的存储厂商有 EMC、IBM 和 SUN 等,都有自己的存储设备。
- 存储容量也是选择存储介质必须要考虑的一个方面。过大的存储空间会造成存储设备的浪费,过小的存储空间可能导致数据存储失败,因此,必须根据备份数据的大小,选择相应大小的存储介质。
除此之外,当然还要兼顾到成本。
对于一些小型设备(如台式计算机、个人站点)的备份来说,刻录光盘或者移动硬盘时比较合适的选择,这些存储介质价格低廉,且能提供足够大的备份空间,在稳定性方面,这两种介质通常能有 5 年左右的寿命。
大型系统的备份,需要使用磁带机。磁带具有容量大、保存时间长的特点,适合用于数据量大、更新频率高的环境。市面上有大量磁带产品,从低端到高端,只要和存储沾点边的硬件厂商,通常都不会放弃这个大市场。这里重点介绍一下磁带机的使用方法。
Linux 下使用磁带机的方式有多种,tar 命令是最经常使用的方法。tar 主要用于单机环境下,将数据直接写入磁带机。磁带机在 Linux 下对应的设备名称为 /dev/stX,如果是第一个磁带机,即为 /dev/st0。基本操作如下:
- 倒带,将磁带卷至起始位置,执行命令如下:
[root@localhost ~]# mt -f /dev/st0 rewind
- 擦掉磁带上的内容。
[root@localhost ~]# mt -f /dev/st0 erase
新购买的磁带,打开后即可使用,无需进行擦写操作,同时当数据写满磁带后,磁带可以覆盖原有数据并继续写入,因此无需进行任何擦写动作。由于擦写对磁带有一定的损害,因此建议不要经常性地执行擦写操作。 - 出带,即将磁带卷至初始位置然后从磁带机内弹出,执行命令如下:
[root@localhost ~]# mt -f /dev/st0 offline
- 通过 tar 列出磁带上的目录或者文件,执行命令如下:
[root@localhost ~]# tar tvf /dev/st0 <--需要查看的文件或者目录
如果后面不跟任何文件或目录,则是查看磁带上的所有数据。当磁带上还没有任何数据时,执行此操作会报错,不过不影响磁带的使用。 - 通过 tar 备份数据到磁带,执行如下命令:
[root@localhost ~]# tar cvf /dev/st0 <--要写入的文件或目录名
备份数据到磁带有两种方式,即打包压缩后写入磁带和不打包直接写入磁带。这里我们推荐将数据不打包直接写入磁带的方法,这样可以提高数据存储的安全性。
为什么建议不打包备份呢?因为磁带是顺序写入数据的,即线性存储,如果将所有数据打包成一个独立的文件,那么当磁带的任何一个地方发生故障,都可能导致这个压缩文件解压失败而不可用;而如果对备份数据进行不打包存储的话,在磁带上就有很多文件,即使磁带某个地方发生故障,其余的文件仍然可用,这样就大大提高了数据备份的安全性。
例如,将 /data/ixdbal.tar.gz 这个压缩文件写入到磁带,并覆盖原有的内容,可以执行如 下操作:[root@localhost ~]# tar cvf /dev/st0 /data/ixdba1.tar.gz
通过“tar cvf”将数据写入磁带时,每次都会覆盖磁带中原有的数据,也就是每次都是从磁带的开始部分写入数据。磁带机的传输速度比较慢,对于不是很大的备份文件,在很短时间内就能备份完成,非常适合做系统级的文件备份。 - 通过 tar 继续写入数据到磁带,执行命令如下:
[root@localhost ~]# tar rvf /dev/st0 <--要写入的文件名
由于磁带是线性存储,数据是依次写入的,因此为了在写入新的数据时,不搜盖原有已经存在的数据,可以使用“tar rvf”参数组合将数据依次写入磁带。
例如,依次将 /data/ixdba2.tar.gz 和 /data/ixdba3.tar.gz 备份到磁带机上,方法如下:[root@localhost /data]# tar rvf /dev/st0 /data/ixdba2.tar.gz
[root@localhost /data]# tar rvf /dev/st0 /data/ixdba3.tar.gz - 通过 tar 将数据从磁带恢复到磁盘,执行命令如下:
[root@localhost ~]# tar xvf /dev/st0 <--要恢复的文件或目录名
例如,首先查阅磁带上存在的所有数据,方法如下:[root@localhost ~]# tar tvf /dev/st0
现在如果要恢复磁带上的 ixdba2.tar.gz 文件到磁盘,可以执行如下命令:
-rw-r--r-- root/root 320 2009-2-20 10:19:02 ixdba1.tar.gz
-rw-r--r-- root/root 320 2009-2-20 10:25:10 ixdba2.tar.gz
-rw-r--r-- root/root 320 2009-2-20 10:45:18 ixdba3.tar.gz[root@localhost ~]# tar xvf /dev/st0 ixdba2.tar.gz
这样就将数据从磁带恢复到了当前的路径下。
ixdba2.tar.gz
13.4 Linux备份策略
常用的备份策略有完全备份和增量备份,而增量备份有可细分为累计增量备份和差异增量备份。下面来分别讲述不同备份策略以及之间的区别。