文件系统的后备 系统管理员的主要任务之一是确保系统中所存信息的持续完整性。维护完整性的一种方法是定期后备系统中的数据。
系统后备(备份)是保护用户不受数据损坏或丢失之苦的一种非常重要的手段。如果系统的硬件出现了问题,或者是用户不小心删除了重要的文件,都有可能造成数据损坏或丢失,尤其在服务器应用环境中所造成的损失更是难以预计。经常进行数据备份可以使偶然破坏造成的损失减小到最低程度,而且能够保证系统在最短的时间内从错误状态中恢复。
在Linux系统中,造成数据丢失或数据损坏的原因有多种:第一种原因是用户误操作,强行删除或覆盖了一些重要的文件;第二种原因是硬件发生故障,导致数据的丢失;第三种原因是因为软件本身存在故障,而造成数据丢失。系统中数据的丢失和损坏轻则破坏用户关键数据,重则导致系统不能正常工作。所以,定期进行系统和用户数据的备份是系统管理员的基本职责。
对于备份来说,管理员需要考虑备份介质的选择、备份策略的选择、备份工具的选择。目前,比较常用的备份介质有软盘、磁带、光盘和硬盘等,通常有完全备份、增量备份和更新备份三种备份策略。
备份策略 1.完全备份
也称为简单备份,即每隔一定时间就对系统做一次全面的备份,这样在备份间隔期间出现了数据丢失或破坏,可以使用上一次的备份数据将系统恢复到上一次备份时的状态。但是,这样每次备份的工作量相当大,需要很大的存储介质空间。
因此,不可能太频繁地进行这种系统备份,只能每隔一段较长的时间(例如一个月)才进行一次完全备份。然而,在这段相对较长的时间间隔内(整个月) 一旦发生数据丢失现象,则所有更新的系统数据都无法被恢复。
2.增量备份
在这种备份策略中,首先进行一次完全备份,然后每隔一个较短的时间段进行一次备份,但仅仅备份在这段时间间隔内修改过的数据。然后,当经过一段较长的时间后,再重新进行一次完全备份,依照这样的周期反复执行。增量备份的工作量较小,也能够进行较为频繁的备份。例如,可以以一个月为备份周期,每个月进行一次完全备份,每天下班后或是业务量较小时进行当天的增量数据备份。
3.更新备份
这种备份方法与增量备份相似。首先每隔一段时间进行一次完全备份,然后每天进行一次更新数据的备份。但不同的是,增量备份是备份当天更改的数据,而更新备份是备份从上次进行完全备份后至今更改的全部数据文件。一旦发生数据丢失,首先可以恢复前一个完全备份,然后再使用前一个更新备份恢复到前一天的状态。
更新备份的缺点是,每次作小备份工作的任务比增量备份的工作量要大。但是,其好处在于,增量备份每天都保存当天的备份数据,需要过多的存储量;而更新备份只需要保存一个完全备份和一个更新备份就行了。另外在进行恢复工作的时候,增量备份要顺序进行多次备份的恢复,而更新备份只需要恢复两次。因此,更新备份的恢复工作相对较为简单。
备份时机 备份需要定期进行,通常应该选择在系统比较空闲时进行,以免影响系统的正常工作,并且此时系统中数据更新频度较低,一般选择在半夜零点之后进行备份。可以考虑写一个脚本并且加入到系统的cron自动任务中去(有关cron的详情,请利用man命令参考cron的手册页)。不过需要注意的是,对于系统备份应该根据具体的系统数据更新情况和用户使用系统的情况,决定具体的系统备份方案。
备份工具 选定了备份策略后,可以使用tar、cpio、dump等备份工具软件将数据进行备份。对于一般的备份,使用tar就足够了。通常用tar备份的命令格式如下所示:
tar cvfpsz <生成的备份文件> <所需备份的目录>
用于备份时,可以将tar命令和其它命令联合使用。例如,需要查找过去7天更新过的文件,并使用tar的-T参数指定需要备份的文件,进行所需备份:
# find / -mtime -7 -print >/tmp/filelist
# tar -c -T /tmp/filelist -f /dev/nrsa0
此外,也可以使用类似于tar的cpio命令进行备份。cpio对数据的压缩要比tar命令更有效,因为它是为备份任何文件集而设计的,而tar命令主要是为备份子目录设计的;cpio能够处理跨多个磁带的备份,并且能够跳过磁道上的坏区继续工作,而tar不能。
恢复后备文件 一般说来,在备份文件系统的时候,只要备份/etc、/root、/var、/home、/usr/local和X11R6目录下的内容即可。此外,如果用户还自定义了一些文件和子目录的话,也需要做备份。
以后当系统出现某些故障时,就需要恢复先前保存的后备文件。对备份文件进行恢复是一件很容易的事情。首先,必须确定待恢复的文件所在的位置。接着使用tar -xp或cpio -im命令就行了。tar的-p及cpio中的-m选项用来确保所有的文件属性与文件一起被恢复。因为这些命令较为简单,这里就不一一举例了。要注意的是,当使用cpio恢复目录时,-d选项将用来创建子目录;而tar命令则自动完成创建子目录的工作。