- 论坛徽章:
- 0
|
Linux环境下的备份
mknod /dev/node_name [c|b] major minor
然而若系统中没有合适的设备节点,则需要检测内核是否支持了这种类型的设备。这可以通过命令cat
/proc/devices的输出来察看,在我的系统中,情况如下:
Character Devices
1 mem 10 misc
2 pty 14 sound
3 ttyp 21 sg
4 ttyS 29 fb
5 cua 37 ht
7 vcs 128 ptm
9 st 136 pts
Block Devices
1 ramdisk
2 fd
3 ide0
9 md
22 ide1
很多管理员在操作回卷设备时都会遇到关于mt命令的问题。mt命令实现操作一个“磁带”设备。例如,命令mt -f /dev/st0 eod
命令设置磁带为进行新的附加备份做好准备,磁带机/dev/st0将前进到数据结束处以准备新的附加备份操作,但由于st0是回卷设备,磁带机在定位到数据结束以后马上回卷到开始处并关闭磁带设备(因为st0是一个回卷设备)。这时候如果进行备份操作则会覆盖磁带中的数据信息,而不是将新数据附在磁带数据结束处。若使用非回卷设备,mt将会把磁带停留在eod的位置,随后的备份操作将被添加到上次备份结束以后的地方。
对于这种问题的推荐解决方法是在为希望使用的非回转设备建立符号链接,如:/dev/tape,mt命令在没有提供-f参数时则可以使用/dev/tape来操作该设备。若系统拥有多个磁带设备,则你可以不使用符号链接的方式,而使用环境变量TAPE=/dev/nst[x]来达到一样的结果。对于上面两种方法,在使用mt 命令时不需要使用-f参数,例如:mt
eod,则会自动使用正确的介质位置,而无需关心使用的是哪个/dev设备。
4、Linux环境下的基本备份方法
现在我们已经讨论了如何调用磁带设备,并且我们已经知道如何决定使用回卷或非回卷设备。但是如何实现将系统的文件从系统中搬移到磁带设备上呢?这是各种备份工具的功能了。所有的Linux发布都提供了所有备份工具的祖先:tar(当然实际上dbppt和bppt,
a/k/a dump and restor,才是Unix系统的备份工具的亚当)。tar命令在Unix Version 7中出现的。该命令的名字来自于"Tape
ARchiver"。该命令被设计为能非常容易的实现将数据从系统备份到磁带中或者从磁带中恢复数据。
tar命令的基本语法为:
tar -mode -option [files]
这里c表示创建(backup),-x提取(restore)或者-t内容列表(list),选项包括如下元素:如-v表示详细输出,-f
file表示目的(创建模式)或源(提取或者列表模式),更详细的信息,请看系统tar命令的手册(man tar)。
使用tar做最简单的备份如下所示:
tar -cvf /dev/st0
lost+found/
var/
var/adm/
var/adm/LST/
var/adm/LST/log/
var/adm/LST/log/debug
var/adm/LST/log/history
var/adm/LST/log/cmd.trace
var/adm/LST/log/install.success
var/adm/LST/log/postin.failed
var/adm/LST/log/install.failed
var/adm/LST/analyse/
var/adm/LST/analyse/boot.img
var/adm/LST/analyse/boot.msg
var/adm/LST/analyse/boot.info
var/adm/LST/analyse/boot.diag
var/adm/LST/analyse/boot.params
var/adm/LST/database/
var/spool/
[...]
该命令的c选项表示创建一个新的备份(c),并且使用详细模式(v),并且将整个系统备份输出到/dev/st0(f)。在这种情况下,tar操作将打开/dev/st0文件(设备),将数据流以tar的数据格式的写入到那个打开的文件,并且在所有的数据被写入以后,关闭文件。因为我们这里选择了回卷设备/dev/st0,文件(存储介质)将使设备驱动在tar关闭文件以后回卷磁带。
下一步将是验证数据被正确的写入到磁带中。不幸的是,Linux环境下的tar命令仅仅提供了一种比较模式的验证手段-磁带内容被重新读入,并和原始文件逐字节进行比较。然而,这仍然比没有验证要好很多。因为在进行恢复时发现磁带中有坏数据是一个非常糟糕的事情。
在恢复结束并且被验证以后,一切并没有结束,因为系统中的数据是不断变化的,一个保持不断变化的系统的备份的方法是持续进行定期的对发生变化的数据进行备份。有很多方法可以实现这样的备份,但是最方便的是增量(incremental)和差分(differential)备份。
这两种方法的备份方法都是依赖于时间,或者是基于上一次备份(增量),或者基于上一次完全备份。增量备份仅仅备份那些上次备份以来修改过的数据,有时候也被称为常规备份;而差分备份则仅仅备份上次完全备份以来变化过的文件。下表是几种备份方案的特点比较:
5、完全备份 增量备份 差分备份
空间使用 Most Least Less than Full
备份速度 Slowest Fastest Faster than Full
恢复速度 Fastest Slowest Faster than Incremental
差分备份可能会备份增量备份忽略的数据,但是差分备份恢复速度要比增量快,因为它仅仅需要上一次完全备份和最近的一次差分备份;而增量备份则需要从上次完全备份及以来的每一次增量备份。
为了使用者写方法进行备份,需要使用tar命令的-N或--newer选项,后面跟一个时间,时间应该是通常的日历格式(例如:03/12/199 = March
12th, 1999)。
tar -cvf /dev/st0 --newer 03/12/1999 /
该命令将备份系统中所有在March 12th, 1999及其以后被修改的文件。
我下面提供了一个简单的脚本文件来作为一个同时实现完全和差分备份的自动化模型。在使用该脚本以前,请注意检查脚本头定义的环境变量以满足自己的需要。
#!/bin/sh
#
#######################################
#
# TAR backup script to cover daily and weekly backups on one tape.
# Generic UNIX version - edit variables as required
#
# For this to work, it MUST be started on a Monday!
#
# Copyright (c) 1999, Tim Jones
# Permission granted for use/modification
#
# Tim Jones/Linux Magazine provide this shell script with no warranty
# (implied or otherwise)
#
########################################
DOW=`date +%w`
DATE=`date +%D`
DAY=`date +%A`
DEVICE="MY REWIND TAPE" # Rewinding tape drive
NDEVICE="MY NO_REWIND TAPE" # non-rewinding tape drive
REWIND="mt -f $DEVICE rewind"
EOD="mt -f $NDEVICE eod"
FSF="mt -f $NDEVICE fsf"
MAILLIST="root" # list of users to receive backup notice
if [ $DOW = "6" ]
then
# This is Saturday, so append and write the whole system!
$EOD
echo $DATE >; /tmp/.LASTFULL
tar -cvvf $NDEVICE / >;/tmp/backup.txt
$REWIND
$FSF 5
tar -dvf $NDEVICE >;>; /tmp/backup.txt
$REWIND
cp /tmp/.LASTFULL /etc/.LASTFULL
else
# this is not Saturday
case $DOW in
0)
# it s Sunday - nothing to do
exit 0
;;
1)
# Monday, Let the tape rewind for the difference verification
echo $DATE >; /tmp/.LASTINC
tar -cvvf $DEVICE --newer `cat /etc/.LASTFULL` / >;/tmp/backup.txt
cp /tmp/.LASTINC /etc/.LASTINC
;;
*)
# Other Days, must rewind manually and Inspect, -i
$EOD
echo $DATE >;/tmp/.LASTINC
tar -cvvf $NDEVICE --newer `cat /etc/.LASTINC` / >;/tmp/backup
$REWIND
$FSF `expr $DOW - 1`
echo "************ Verifying ${DAY} s backup" >;>; /tmp/backup.txt
tar --dvf $NDEVICE >;>; /tmp/backup.txt
cp /tmp/.LASTINC /etc/.LASTINC
$REWIND
esac
fi
mail $MAILLIST < /tmp/backup.txt
rm -f /tmp/backup.txt
# END OF SCRIPT |
|