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

    两种方法: 1.类本来就实现java.lang.Comparable接口,使类本身就有比较能力.接口实现compareTo方法,次方法接收另一个Object为参数,如果当前对象小于参数则返回负值,如果 ...

  2. Windows Server 2008文件同步

    配置Windows Server 2008文件同步   摘要: 众所周知,Linux系统可以用rsync来实现文件或目录的同步,windows系统下也一样可以.我们现在就用cwRsync来实现wind ...

  3. (二)学习CSS之cursor属性

    参考:http://www.w3school.com.cn/tiy/t.asp?f=csse_zindex cursor 属性规定要显示的光标的类型(形状). <html> <bod ...

  4. HDU 5328 Problem Killer

    题意:给一段序列,求连续的子序列中最长的等差数列或者等比数列的长度. 解法:O(n)的扫两遍一次判等差一次判等比就好了. 代码: #include<stdio.h> #include< ...

  5. matlab mex入门简介

    mex 的目的 通过C/C++语言编写代码,在Matlab中将其编译成mex文件主要可以做以下几方面的事情: 1.加快程序的执行速度. Matlab在for上如老牛拉车的速度确实让人抓狂. 2.将Ma ...

  6. TcxVerticalGrid 汇总

    赋值 AOrder.LoadSimpleFromFile(sDefineFile); grdRowFileDefine_PostalCode.Properties.Value := AOrder.Or ...

  7. 七牛上传Qt版本

    最近在找图床,写博客啥的需要.以前的图床好像挂了,搭在BAE上的图床也挂了,可能BAE3.0更新了吧. 花了点时间写了Qt版本 github地址:https://github.com/wzyuliya ...

  8. 2015年10月23日JS笔记

    ECMAScript标准:JavaScript核心语法 微软:Jscript ECMAScript标准:一纸空文 JavaScript和JScritp都号称完全实现了 ECMAScript标准 W3C ...

  9. STM32 串口DMA方式接收(转)

    STM32 是一款基于ARM Cortex-M3内核的32位MCU,主频最高可达72M.最近因为要在车机上集成TPMS功能, 便开始着手STM32的开发工作,STM32F10x系列共有5个串口(USA ...

  10. jvm 漫谈 笔记

    1.Jvm到底是什么呢? Jvm其实就是模拟一台计算机,每种cpu都有自己的指令集,jvm自己设置一套指令集,这就是我满看的的字节码,然后jvm需要执行这些字节码,其实这些字节码最终直接对应到cpu的 ...