首页 > 代码库 > Linux下用dump实现备份和还原 ux下用dump实现备份和还原
Linux下用dump实现备份和还原 ux下用dump实现备份和还原
对于系统而言,我们可以有很多种办法去备份(还原)系统或文件,之所以要去做备份,就是为了在系统或文件遭到损害时,能及时恢复,把损失减小到最小。当然,对于企业服务器而言,备份的重要性是举足轻重。咱们今天就详细讨论一下LINUX中如何用dump和restore实现备份和还原。
一,dump的原理,优点及限制
dump和restore默认已经安装在RHEL5中,如果你使用的Linux中没有,可以自己去google中搜一下并下载安装。
使用dump命令时,它会建立一份自上次备份操作以来进行修改过的文件列表,然后把这些文件打包成一个单独的文件。在做备份时,需要指定一个备份级别,它是0-9之间的一个整数。级别为N的转储会对从上次进行的级别小于N的转储操作以来修改过的所有文件进行备份,而级别0就是完全备份。通过这种方式,可以很轻松的实现增量备份,差异备份,甚至每日备份。例如,第一次备份时可选择级别0(具体操作看后面),以后每天做增量备份时就可以每天依次使用级别1,级别2,级别3等等… …;当需要每天做差异备份时,可先选择级别0做完整备份,然后每天都使用同一大于0的级别就行了,比如说第二天用5,第三天也用5,第四天也一样。
使用dump的优点:
1,备份可以跨多卷磁带
2,能备份任何类型的文件,甚至是设备
3,备份时,文件的权限,宿主,宿组,修改时间等都会被保存
4,能够正确处理从未包含任何数据的文件块(孔洞文件)
5,能够做增量,差异备份
它也有不足:
1,每个文件系统必须单独转储备份
2,只有本地计算机的文件系统才能够转储备份(rdump,rrestore可用来弥补此项不足)
当然,使用tar也可以用来实现备份和还原,但tar只能在Linux或Unix环境下使用,对于跨平台的环境,dump使用起来个人感觉更方便一些。
如果有条件,dump也可以将备份存储在磁带上。Linux通常用/dev/st0代表倒带设备,而用/dev/nst0代表非倒带设备,使用倒带设备存储时,当磁带用完它会自动倒带并接着存储,所以会覆盖以前的数据,这样就存在以前数据丢失的风险。这个地方咱们就不详细讨论了。
二,dump的格式,常用参数及使用
格式:dump [-level#] [-acmMnqSuv] [-A file] [-B records] [-b blocksize]
[-d density] [-D file] [-e inode#,inode#,...] [-E file]
[-f file] [-h level] [-I nr errors] [-j zlevel] [-Q file]
[-s feet] [-T date] [-y] [-z zlevel] filesystem
常用参数 Level:备份级别0-9
-B:指定用来备份的磁带的长度,以KB为单位(有些磁带不支持以结束标志判断时,就需要使用到此参数
-b:指定块大小,默认为10
-d:指定密度,默认为1600BPI
-D:设定存储数据库的名称和路径,默认是/etc/dumpdates文件
(-e,-E:与备份文件的inodes数有关的参数)
-f:指定备份文件的路径和名称
-u:更新数据库文件/etc/dumpdates
-s:统计备份所需的空间,一般在备份前做,以防磁带或磁盘空间不足
举例:
dump –0s /dev/sda1
完整备份/dev/sda1前统计一下需多大容量
dump -0u –f /tmp/boot.dump /boot
以完全备份的方式备份/boot分区到文件/tmp/boot.dump,并且更新/etc/dumpdates数据库文件。“0”代表的就是备份级别为完全备份。“u”更新数据库,会将文件的日期,存储级别,文件系统等信息都记录下来。如果从来都不使用-u参数,那么所有的存储都会变为级别0。因为,系统不会有先前备份过当前文件系统的记录。
当以后更改了/boot,比如说内核升级后,如果再想备份,可以按下列方式:
dump -1u –f /tmp/boot1.dump /boot
这样就只会备份完全备份后有变化的文件(级别1大于0)。
如果以后想做增量备份,就依次用级别2,3,4… …
如果想做差异备份,以后就一直用级别1.关于增量备份和差异备份的区别看看下图吧,不详细讲了:
三,查看备份文档中的文件及还原
查看备份文档中的文件和还原就需要用到另外一个工具,restore。
1, 查看备份文档中的文件
-t参数是查看的意思,-f是指定要查看的备份文件。通过以上命令,就可以查看备份文件中备份了哪些文件。
1, 还原备份
还原备份的时候有两种方式可以选择,一种是完全还原,一种是有选择的部分还原。
咱们还是用前面的例子来看,如果你前面备份的/boot分区文件损坏了,这时候你想还原,可以按如下步骤:
-r参数表示重建
如果只是一部分数据丢失了,那么可以使用参数-i通过交互方式来实现文件的选择性还原
这个地方我故意删掉了一个文件initrd-2.6.18-53.el5.img
使用参数-i交互式,并指定备份文件。
通过?来查看可以使用的命令,ls是列出备份文件的内容
通过add来选择要恢复的文件,选定后再ls的时候会标记为*
通过extract还原选定的文件。
提示“Specify next volume”时填如1,它表示是在单独一卷磁带(这里我用的是磁盘的空间)上进行的备份。下面一行提示选“n”,表示不是恢复整个文件系统,而是单个文件。
关于在linux系统进行增量备份的例子
1. dump/restore 进行增量备份 注意,这种方法只能进行整个分区备份
# mount /dev/sdb1 /mnt/sdb 新建一个硬盘将其挂载到/mnt/sdb
# ls /mnt/sdb
123 456 aaa.zip f1
里面有4个文件 f1为目录
现在可以备份原始镜像
#dump -0u /dev/sdb1 -f /backup/sdb1_0u_110210.dump
DUMP: Date of this level 0 dump: Thu Feb 10 23:21:40 2011
DUMP: Dumping /dev/sdb1 (/mnt/sdb) to /backup/sdb_0u_110210.dump
DUMP: Label: none
.....中间省略
DUMP: Average transfer rate: 5687 kB/s
DUMP: DUMP IS DONE
备份完成
dump -0u : 0代表镜像备份(完整备份) 1-9 分别代表在前一个级别基础上的增量备份
下面进行增量备份:
首先 将123那个文件删除,新增一个文件kkk 并输入hello man!
[root@mysql1 sdb]# ls
456 aaa.zip f1 kkk
开始增量备份:
[root@mysql1 sdb]# dump -1u /dev/sdb1 -f /backup/sdb1_1u_110210.dump
DUMP: Average transfer rate: 0 kB/s
DUMP: DUMP IS DONE
现在/backup下有两个备份了。
[root@mysql1 sdb]# ls /backup
sdb1_0u_110210.dump sdb1_1u_110210.dump
为了更好了解我们在增加一个备份,备份之前我们再改变以下分区里面的文件
修改 456 内容为456 modifiy 删除aaa.zip
[root@mysql1 sdb]# ls
456 f1 kkk
备份第二个增量,这里用3u 只要比前面大就可以了,建议备份都用2u 4u 6u 这样备份,不然你所有数字都用上,123456 如果想重新再2u的基础上再备份就不行了,因为3已经用了,你只能在6后面备份
[root@mysql1 sdb]# dump -3u /dev/sdb1 -f /backup/sdb1_3u_110210.dump
备份完毕 就删除里面的所有记录
然后现在开始恢复
[root@mysql1 sdb]# restore -r -f /backup/sdb1_0u_110210.dump 先恢复0u
[root@mysql1 sdb]# ls
123 456 aaa.zip f1 restoresymtable
这时候把第一备份都还原出来了,然后一个一个还原
# restore -r -f /backup/sdb1_1u_110210.dump
# restore -r -f /backup/sdb1_3u_110210.dump
# ls
456 f1 kkk restoresymtable
和最后一次备份一样了
查看备份镜像里面的内容
# restore -t -f /backup/sdb1_1u_110210.dump
Dump date: Thu Feb 10 23:28:38 2011
Dumped from: Thu Feb 10 23:21:40 2011
Level 1 dump of /mnt/sdb on mysql1.dog.com:/dev/sdb1
Label: none
2 .
16 ./kkk
提取镜像里的文件
[root@mysql1 sdb]# restore -if /backup/sdb1_3u_110210.dump
restore > ls
.:
3 f1/ lost+found/ restoresymtable
456 kkk newfile
restore > add kkk
restore > extract
You have not read any volumes yet.
Unless you know which volume your file(s) are on you should start
with the last volume and work towards the first.
Specify next volume # (none if no more volumes): 1
set owner/mode for ‘.‘? [yn] n
restore > quit
关于定期备份的方案:
先做一个完整的备份
#dump -0u /dev/sdb1 -f /backup/sdb1_0u_110210.dump
周一:#dump -2u /dev/sdb1 -f /backup/sdb1_1u_110210.dump
周二:#dump -2u /dev/sdb1 -f /backup/sdb1_2u_110210.dump
周三:#dump -2u /dev/sdb1 -f /backup/sdb1_3u_110210.dump
。。。。。
--------------------------------------------------------------------------------------------------------------------
下面这方法比较灵活,直接用tar备份
# cd /test/t1
# ls
aaa.zip file1 file2 file3
有三个文件
首先执行完整备份
# tar -g snapshot -zcf backupp_full.tar.gz /test/t1
然后修改文件,增加一个文件
进行增量备份:
# tar -g snapshot -zcf backupp_incremental_1.tar.gz /test/t1
修改
再次增量备份
# tar -g snapshot -zcf backupp_incremental_2.tar.gz /test/t1
还原
tar zxf backup_full.tar.gz -C /
tar zxf backup_incremental_1.tar.gz -C /
tar zxf backup_incremental_2.tar.gz -C /
注意,修改的文件以后面增量备份为准,删除的文件这个种备份方法是不会跟着删除的,恢复的时候之前删除的文件也会恢复
另一种tar 备份 用-u参数进行增量备份,同样删除的文件不会同步
备份资料
tar zcf backup.tar /test/t1
查看 内容
tar ztf backup.tar
file1 file2 file3
在/test/t1下新增一个文件
增量备份
tar uf backup.tar /test/t1
还原备份其实就是直接解压
tar zxf backup.tar
如果你需要压缩增量备份的时候需要先将原来那个解压然后再备份在压缩 (-u 参数不会自动压缩)
gunzip backup.tar.gz
tar uf backup.tar test
gzip backup.tar
1、dump 命令可以用来备份 ext2 和 ext3 格式的文件系统,也就是可以备份整个分区。
简要参数说明:
level# 通常在用dump 命令备份时,会加上 -0~-9的参数,“-0”完全备份 ,“-1~-9”增量备份(只备份上次备份后被变更的文件,只备份比当前备份数字小的数字);
如下果,备份顺序为 “0、1、2”
但通常不会使用上面的方式进行备份,而是使用“0、2、1”的顺序进行备份;
-f : 可以用来指定备份的文件储存的位置;例:dump –f /dev/st0 备份到磁带中;
-u : 每次执行完 dump 命令时,都会将备份的级别号记录到/etc/dumpdates文件中,这个参数就是将每次执行 dump 命令时,将对应的 dump 级别号更新到 /etc/dumpdates文件中;
例:
(1) dump –0 –u –f ~/backup /dev/sda1 备份 sda1 分区到家目录中 backup 文件中,同时更新 /etc/dumpdates 将当前备份的级别号记录到这个文件中;
十四、使用cpio命令备份还原文件
1、cpio 命令可以解压缩一个打包文件或将文件复制到一个已打包好的文件中去。
常用参说明说(可使用 man cpio 命令查看详细说明):
· –d 可以用来建立一个目录;
· –i 解压缩;
· –o 将文件进行打包;
· –t 列出打包文件中的内容;
注:在cpio解压缩文件时,必须解压缩到没有原始文件的目录中。