对于系统而言,我们可以有很多种办法去备份(还原)系统或文件,之所以要去做备份,就是为了在系统或文件遭到损害时,能及时恢复,把损失减小到最小。当然,对于企业服务器而言,备份的重要性是举足轻重。咱们今天就详细讨论一下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解压缩文件时,必须解压缩到没有原始文件的目录中。

Linux下用dump实现备份和还原 ux下用dump实现备份和还原的更多相关文章

  1. svn备份与还原_脚本_(dump命令)

    今天备份svn, 能保证好用就行先, 回头再研究 buerguo.bat @echo off :: 关闭回显 :: 说明:如有命令不明白,请使用帮助命令:命令/? .如:for/? :: 设置标题 t ...

  2. Linux下使用SSH、Crontab、Rsync三工具实现数据自动备份

    Linux下使用SSH.Crontab.Rsync三工具实现数据自动备份 作为网管人员大概都无一例外的经历过系统备份,尤其是重要系统的备份.重要数据库系统的备份工作.由于备份是个频繁而琐碎的工作,如何 ...

  3. MySQL数据库备份还原(基于binlog的增量备份)

    MySQL数据库备份还原(基于binlog的增量备份) 一.简介 1.增量备份      增量备份 是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件.这就意味 ...

  4. dedecms还原数据时要选对备份目录 不然会提示function文件出错

    小李子最近在学习dedecms,在网上下载了一个二次开发的系统,顺利安装后想要还原一下作者的备份数据,可一直没有成功,让ytkah查看一下什么情况.进到后台,点击还原,提示/e/class/funct ...

  5. Linux服务器上迁移项目路径,修改nginx配置,迁移及备份MongoDB数据库流程 (超详细)!!!

    缘由:客户服务器项目路径不是很合理,导致Jenkins自动部署时还需要添加路径后再更新部署,所以需要把项目路径统一和规范化. 迁移项目路径,保证路径合规,同时做好备份和迁移.迁移后先安装好依赖. 项目 ...

  6. SQL Server2019数据库备份与还原脚本,数据库可批量备份

    前言 最近公司服务器到期,需要进行数据迁移,而数据库属于多而繁琐,通过图形化界面一个一个备份所需时间成本很大,所以想着写一个sql脚本来执行. 开始 数据库单个备份 数据库批量备份 数据库还原 数据库 ...

  7. 记一次 IIS 站点配置文件备份和还原,物理路径文件批量备份

    前言 上一篇文章实现了数据库的批量备份和还原,当然部署在服务器中的IIS站点备份也是一个十分繁琐的事,三四个数量不多的还好,像有一些服务器用了许久,承载几十个站点甚至更多,一个一个备份,再一个一个还原 ...

  8. SQL Server数据库 备份A库,然后删除A库,再还原A库,此时数据库一直显示“正在还原”的解决方法

    SQL Server数据库 备份A库,然后删除A库,再还原A库,此时数据库一直显示"正在还原"的解决方法: A库一直显示"正在还原". 在这种状态下,由于未提交 ...

  9. 用脚本如何实现将Linux下的txt文件批量转化为Windows下的txt文件?

    众所周知,Windows和Linux的文件换行回车格式不同,Windows下换行格式是\r\n(回车+换行),Linux下换行格式为\n(只是换行),因此,其中一个操作系统的文本文件若需要在另外一个中 ...

随机推荐

  1. ZOJ 3264 Present for MM

    寒假开始了···但是做题没有结束嘤··· 然后是dp专场嘤··· 题意:背包问题,给出背包容量和物品对数,每对物品都有特殊的关系:第一种关系是两个物品都取有价值,若只取一个则失去价值:第二种是两个物品 ...

  2. CF 55D - Beautiful numbers(数位DP)

    题意: 如果一个数能被自己各个位的数字整除,那么它就叫 Beautiful numbers.求区间 [a,b] 中 Beautiful numbers 的个数. 分析:先分析出,2~9 的最大的最小公 ...

  3. Oracle函数:求两个数的最大公约数

    CREATE OR REPLACE FUNCTION GETGYS(NUM1 NUMBER, NUM2 NUMBER) RETURN NUMBER IS RESULTNUM NUMBER; NUM3 ...

  4. python引用在函数传参时的体现以及可变与不可变对象的对比

    今天偶然看到 vamei 老师的博客 http://www.cnblogs.com/vamei/archive/2012/07/10/2582795.html 讲的是python动态类型以及引用的事儿 ...

  5. MVC框架模式技术实例(用到隐藏帧、json、仿Ajax、Dom4j、jstl、el等)

    前言: 刚刚学完了MVC,根据自己的感悟和理解写了一个小项目. 完全按照MVC模式,后面有一个MVC的理解示意图. 用MVC模式重新完成了联系人的管理系统: 用户需求: 多用户系统,提供用户注册.登录 ...

  6. wuzhicms短信API 实例调用

    1.接口调用 $sendsms = load_class('sms','sms'); echo $sendsms->send_sms('18911549611', '888888', 1); / ...

  7. 项目用到了lua的哪些部分

    昨天有位同事跟我说,我们的手游客户端(cocos2d-x lua binding)代码没有看到lua的特殊技巧,用起来跟其他语言差不多.<Programming in lua>毕竟有将近4 ...

  8. BNUOJ-26480 Horror List 最短路

    题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=26480 题意:简单来说,就是给一个图,然后从每个honor list中的点求最短路.. 边 ...

  9. [转]常用的130个vim命令

    原帖地址:http://www.oschina.net/news/43167/130-essential-vim-commands 从 1970 年开始,vi 和 vim 就成为了程序员最喜爱的文本编 ...

  10. 在Windows操作系统中,如何终止占有的8080端口的tomcat进程

    在Windows操作系统中,我们在启动一个tomcat服务器时,经常会发现8080端口已经被占用的错误,而我们又不知道如何停止这个tomcat服务器. 本文将通过命令来强行终止这个已经运行的tomca ...