Bacula,被誉为开源软件中最好的备份还原软件,它提供了企业级的客户机/服务器的备份解决方案,能够通过网络来管理文件的备份,恢复和核实工作。Bacula,既有windows版本的,也有Linux,Unix的。但目前有关于其使用的文章是在太少,而且介绍的很不详细,今天,我就来和大家一起探讨一下。(最新版本2.4.3主页 [url]http://www.bacula.org[/url]
一,bacula的模型
为了部署bacula,应该了解它的主要组件。
 
 
 
控制器是协调备份,恢复和校验操作的守护进程。用户可以通过控制台向控制守护进程提交任务。控制台不一定非要和控制守护进程在同一台机器上,可以分离。
存储守护进程是用来写入备份数据或者读取备份数据的。它必须安装在提供存储的机器上。也就是安装了磁带机或者要将备份存放的服务器上。它和控制守护进程可以分离,不一定要安装在一起。
文件守护进程安装在每台需要备份数据的系统上。比如,你想备份网络中的某台文件服务器上的数据,那么,你就应该将文件守护进程安装在此台服务器上。
编目是一个数据库,它保存所有备份的每个文件和卷的信息。所以,它需要数据库软件的支持,现在bacula支持mysql,postgresql和sqlite。
 
二,设置
试验环境如下:有两台linux主机,
一台主机名为RHEL5(以下简称server),ip为192.168.0.5,系统为RHEL 5.1,角色为备份服务器兼存储服务器(另挂一块磁盘到/tmp/test/下作为存储)
另一台主机名为client。Ip是192.168.0.6,系统是RHEL5.1,角色为需要备份的主机(这里我们以/boot为要备份还原的目录)
 
准备工作:在server上安装mysql和gcc环境(bacula编译需要gcc),并启动mysql
          在client上只需安装gcc环境
 
配置服务器server
1, 解压编译安装bacula:
 
然后是make和make install
默认情况,bacula安装在/etc/bacula/目录下
 
 
2,创建mysql脚本
   Bacula已经为我们建好了脚本,直接运行就OK,一共3个。如果不运行,后面9101端口是起不来的。
 
 
 
3,修改配置
作为存储服务器兼控制台,现在需要依次对bacula-dir.Conf(管全局)  bacula.sd.conf(管存储)和bconsole.conf(管控制台)配置文件进行修改。
 
bacula-dir.conf是最复杂的一个文件,它一共有10个逻辑段:
director(定义全局),
catalog(定义日志),
jobdefs(定义备份的默认值),
job(定义特定操作),
fileset(定义备份哪些区域不备份哪些区域),
schedule(定义备份时间),
pool(定义备份介质),
client(定义要备份的主机),
storage(定义如何存储)
messages(定义如何处理消息)
因为此文件比较复杂,所以我把我配置好的文件直接贴出来,一些特别重要的地方咱们拿出来讨论
 
Director {             # 全局的一些配置       
  Name = RHEL5-dir
  DIRport = 9101               
  QueryFile = "/etc/bacula/query.sql"
  WorkingDirectory = "/var/bacula/working"
  PidDirectory = "/var/run"
  Maximum Concurrent Jobs = 1    # 定义一次能处理的并发作业数
  Password = "RTQVFEti4EAPrGLJV+xn+/7ScFU0D+iDs5OWCvy354uI"   # 这个地方必须与控制台所在主机上的bconsole.conf一致,这里是本机
  Messages = Daemon
}
 
JobDefs {
  Name = "DefaultJob"
  Type = Backup
  Level = Incremental
  Client = RHEL5-fd   # 如果本机也需备份就在后面去定义RHEL5-fd为本机
  FileSet = "Full Set"
  Schedule = "WeeklyCycle"
  Storage = File
  Messages = Standard
  Pool = Default
  Priority = 10
}
 
Job {                           # 定义一个任务
  Name = "Client"       # 任务的名称   后面咱们可以在bacula的控制台中看到
  Client = Client    # 引用后面定义的客户端“Client”,表示此任务对名字叫client主机进行操作
  JobDefs = "DefaultJob"
  Write Bootstrap = "/var/bacula/working/Client1.bsr"  #定义备份的引导信息放在什么地方
  Level = Full           #定义备份类型为完全
FileSet = "Full Set"     #备份的范围根据后面定义的名叫“Full Set”的操作
  Schedule = "WeeklyCycleAfterBackup"  #备份计划任务按"WeeklyCycleAfterBackup" 定义的执行
}
 
Job {
  Name = "BackupCatalog"
  JobDefs = "DefaultJob"
  Level = Full
  FileSet="Catalog"
  Schedule = "WeeklyCycleAfterBackup"
  RunBeforeJob = "/etc/bacula/make_catalog_backup bacula bacula"
  RunAfterJob  = "/etc/bacula/delete_catalog_backup"
  Write Bootstrap = "/var/bacula/working/BackupCatalog.bsr"
  Priority = 11                   # run after main backup
}
 
Job {
  Name = "RestoreFiles"
  Type = Restore
  Client=RHEL5-fd  #这里就是指的RHEL5这台主机自己
  FileSet="Full Set"
  Storage = File
  Pool = Default
  Messages = Standard
  Where = /bacula-restores
}
 
FileSet {
  Name = "Full Set"
  Include {
    Options {
   signature = MD5
    }
     File = /boot     # 备份的范围,这里我根据需要只备份了/boot分区,如果要备份其他可加入相应路径
  }
 
  Exclude {       # 排除的,不备份的内容
    File = /proc
    File = /tmp
    File = /.journal
    File = /.fsck
  }
}
 
Schedule {
  Name = "WeeklyCycle"
  Run = Full 1st sun at 23:05
  Run = Differential 2nd-5th sun at 23:05
  Run = Incremental mon-sat at 23:05
}
 
Schedule {
  Name = "WeeklyCycleAfterBackup"
  Run = Full sun-sat at 23:10
}
 
FileSet {
  Name = "Catalog"
  Include {
    Options {
      signature = MD5
    }
                             
File = /var/bacula/working/bacula.sql
  }
}
 
Client {
  Name = RHEL5-fd
  Address = 192.168.0.5        # 指定了RHEL5这台主机的地址,如果有DNS可以写FQDN
  FDPort = 9102
  Catalog = MyCatalog
  Password = "f/4eSVt8B+tvY8fsWerClwGwWxnMRIgung8h+zWb4tRv"     # 要和RHEL5上bacula-fd.conf的一致
  File Retention = 30 days            # 30 days
  Job Retention = 6 months            # six months
  AutoPrune = yes                     # Prune expired Jobs/Files
}
 
Client {
  Name = Client       # 前面引用过的client就是在这定义的
  Address = 192.168.0.6    # 告诉服务器client在什么地方
  FDPort = 9102
  Catalog = MyCatalog
  Password = "f/4eSVt8B+tvY8fsWerClwGwWxnMRIgung8h+zWb4tRv2"    # 要和client上bacula-fd.conf的一致
  File Retention = 30 days            # 30 days
  Job Retention = 6 months            # six months
  AutoPrune = yes                     # Prune expired Jobs/Files
}
 
Storage {            #定义存储服务器
  Name = File
  Address = 192.168.0.5                # 告诉服务器数据存储在哪台机器上。这里是主机自己。
  SDPort = 9103
  Password = "oTJC6wYD/kTLcptwdReP/Gl7xxqngURQdZZfQINCeMzd"  # 要和本机bacula-sd.conf上一致
                                                          
Device = FileStorage
  Media Type = File  # 定义以文件方式存储
}
 
 
Catalog {   # 关于日志和数据库的定义
  Name = MyCatalog
  dbname = "bacula"; dbuser = "bacula"; dbpassword = ""
}
 
Messages {
  Name = Standard
  mailcommand = "/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: %t %e of %c %l\" %r"
  operatorcommand = "/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: Intervention needed
for %j\" %r"
  mail = root@localhost = all, !skipped
  operator = root@localhost = mount
  console = all, !skipped, !saved
  append = "/var/bacula/working/log" = all, !skipped
}
 
 
Messages {
  Name = Daemon
  mailcommand = "/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula daemon message\" %r"
  mail = root@localhost = all, !skipped
  console = all, !skipped, !saved
  append = "/var/bacula/working/log" = all, !skipped
}
Pool {
  Name = Default
  Pool Type = Backup
  Recycle = yes                       # Bacula can automatically recycle Volumes
  AutoPrune = yes                     # Prune expired volumes
  Volume Retention = 365 days         # one year
}
 
Pool {
  Name = Scratch
  Pool Type = Backup
}
 
Console {
  Name = RHEL5-mon
  Password = "YZDfclvKrfWVkmGdGtWygMOR8ZOX7XK7MYvaFd1dIraN"
  CommandACL = status, .status
}
 
第二个文件bacula-sd.conf
    Storage {                             # 定义存储。本例中是自己RHEL5
  Name = RHEL5-sd
  SDPort = 9103                  # 存储端口     
  WorkingDirectory = "/var/bacula/working"
  Pid Directory = "/var/run"
  Maximum Concurrent Jobs = 20
}
 
Director {
  Name = RHEL5-dir
  Password = "oTJC6wYD/kTLcptwdReP/Gl7xxqngURQdZZfQINCeMzd"  # 与bacula-dir.conf中对应的Storage项一致
}
 
Director {
  Name = RHEL5-mon
  Password = "xyqzFcPkpqwmQm7BD5OhegyynhOhFHcNZWoIfMZN2bY5"
  Monitor = yes
}
Device {
  Name = FileStorage
  Media Type = File
  Archive Device = /tmp/test         # 定义备份到什么地方
  LabelMedia = yes;                   # lets Bacula label unlabeled media
  Random Access = Yes;
  AutomaticMount = yes;               # 如果设备可用,则读取
  RemovableMedia = no;
  AlwaysOpen = no;
}
Messages {
  Name = Standard
  director = RHEL5-dir = all
}
 
最后一个文件bconsole.conf
Director {
  Name = RHEL5-dir
  DIRport = 9101
  address = 192.168.0.5          # 服务器位置
  Password = "RTQVFEti4EAPrGLJV+xn+/7ScFU0D+iDs5OWCvy354uI"  # 与bacula-dir.conf中director中一致
}
现在启动进程
 
终于配置完毕,但还有关键的一步,添加存储介质
 
 
黄色的是要输入的部分。现在就已经进入到控制台了。
配置客户机(需要备份的client):
1,  编译安装bacula
 
然后make和make install
默认安装在/etc/bacula/目录下
1,  改配置文件 bacula-fd.conf
  Director {
  Name = RHEL5-dir  # 与服务器上的bacula-dir.conf中一致
  Password = "f/4eSVt8B+tvY8fsWerClwGwWxnMRIgung8h+zWb4tRv2"  # 与服务器上的bacula-dir.conf中一致
}
Director {
  Name = RHEL5-mon        # 与服务器上的bacula-dir.conf中一致
  Password = "yqzFcPkpqwmQm7BD5OhegyynhOhFHcNZWoIfMZN2bY5"  # 与服务器上的bacula-dir.conf中一致
  Monitor = yes
}
FileDaemon {                       
  Name = Client       # 指自己
  FDport = 9102                  # 监听端口r
  WorkingDirectory = /var/bacula/working
  Pid Directory = /var/run
  Maximum Concurrent Jobs = 20
}
Messages {
  Name = Standard
  director = Client-dir = all, !skipped, !restored
}
客户端相对配置较简单。改这一个文件就行了。
然后启动进程
 
 
三,验证
经过了艰苦的工作,现在到了享受结果的时候了(呵呵,这个东东我已经弄了3天了,痛苦呀)
咱们现在先备份client下的/boot目录吧
在server上
 
接着
 
可以通过status查看状态
 
 
呵呵,看见OK了吗,备份成功了哟
 
接下来咱们来做还原,首先咱们把client上的/boot中的文件删除掉
 
现在回到server上来还原(还是在控制台)
 
显示如下提示
 
接着标记要还原内容,并且执行
 
这个地方注意一下,如果要还原到client原位置则按以下步骤
 
现在再回到client下看看
 
哈哈,看见了吧,刚才删掉的文件现在全部回来了
 
四,最后
因为手头上没有现成的资料,加上本人英语水平有限,有不足的地方还请大家谅解。

使用bacula实现Linux的远程备份和还原的更多相关文章

  1. Linux下远程备份、上传工程,重启服务器

    Linux下远程备份.上传工程,重启服务器 Linux服务器实现远程,原项目的备份.删除,新项目上传,以及远程重启服务器!分成一个主shell调用三个shell文件步骤完成.mainsh.sh一次按顺 ...

  2. mysql 数据库的备份和还原

    1. 逻辑备份 (和存储引擎无关) mysqldump -uroot -p schoolDB TSubject > /mysqlbackup/schoolDB.TSubject.sql  (备份 ...

  3. linux实现自动远程备份(scp+ssh)

    刚上线的服务器需要备份日志,要备份到另一台服务器上去,为了减少工作量,采用linux的定时任务去自动执行.因服务器都是linux的,因此采用linux的远程复制scp命令.但这里涉及到一个问题,就是s ...

  4. Linux远程备份—ftp方式、NFS方式

    问题:现在项目中每天都有从其它各个系统发过来的数据文件(存放在/var/data目录下,以.txt结尾),虽然很久以前的文件很少用到,占用了很多空间,却不能删除.于是,想把一个月以前的文件都压缩了传到 ...

  5. 用rsync从Linux到Windows远程备份

    论 rsync是Linux系统下的数据镜像备份工具,从软件的命名上就可以看出来 了——remote sync.rsync支持大多数的类Unix系统,无论是Linux.Solaris还是BSD上都经过了 ...

  6. Linux下自动备份MySQL数据库并上传到远程FTP服务器

    Linux下自动备份MySQL数据库并上传到远程FTP服务器且删除指定日期前的备份Shell脚本 说明:  1.备份MySQL数据库存放目录/var/lib/mysql下面的xshelldata数据库 ...

  7. PL/SQL远程备份和恢复Oracle数据库

    (转自:http://blog.csdn.net/huchunfu/article/details/25165901) 在客户端远程备份的文件保存在数据库所在主机上,不会直接拷贝到客户端.—————— ...

  8. Linux服务器数据备份恢复策略

    一.Linux 备份恢复基础 1.什么是备份 最简单的讲,备份数据的过程就是拷贝重要的数据到其他的介质之上(通常是可移动的),以保证在原始数据丢失的情况下可以恢复数据.一次备份可能是简单的 cp命令, ...

  9. Linux SSH远程文件/目录 传输

    Linux SSH远程文件/目录传输命令scp 2010年08月6日 上午 | 作者:VPS侦探 相信各位VPSer在使用VPS时会经常在不同VPS间互相备份数据或者转移数据,大部分情况下VPS上都已 ...

随机推荐

  1. Migration of ASP.NET app from IIS6 to IIS7 (7.5)

    For many of us familiar problem. You developing applications under IIS6 and you're about to move the ...

  2. PHP 数组的值插入

    曾今写过一个坑货的数组方法 function array_insert($myarray,$value,$position=0) {    $fore=($position==0)?array():a ...

  3. .Net下的MSMQ(微软消息队列)的同步异步调用

    一.MSMQ简介 MSMQ(微软消息队列)是Windows操作系统中消息应用程序的基础,是用于创建分布式.松散连接的消息通讯应用程序的开发工具.消息队列 和电子邮件有着很多相似处,他们都包含多个属性, ...

  4. hibernate逆向工程生成的实体映射需要修改

    根据实际情况进行修改,主要2处,注释的位置<!-- 把catalog="platform"删掉 -->,<!-- 替换为native -->   <? ...

  5. 第4条:多用类型常量,少用#define预处理指令

    定义常量的几种方式: 1.#define ANIMATION_DURAION 0.3         //定义了一个动画时长的常量, 预处理过程会把碰到的所有ANIMATION_DURAION一律替换 ...

  6. iOS军火库-好用的ActionSheetView

    GitHub地址 一个自定义的ActionSheetView,支持显示标题,默认选中,使用block回调. 使用说明 [GLActionSheet showWithDataSource:@[@&quo ...

  7. C#删除数组元素代码

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...

  8. oracle简单两个操作

    sqlplus sys/密码 as sysdba ALTER USER 账号 IDENTIFIED BY 新密码; select *  from (select rownum 别名 ,表名.* fro ...

  9. .net平台下socket异步通讯

    1,首先添加两个windows窗体项目,一个作为服务端server,一个作为客户端Client 2,然后添加服务端代码,添加命名空间,界面上添加TextBox控件 using System.Net; ...

  10. 《JavaScript高级程序设计 第3版》-学习笔记-3

    P84-P137页, 这一章看的真久,这个月事太多了.有些内容在代码注释里没提出来了 1.JS强大的数组类型,元素类型任意,提供了非常多的操作数组的方法和属性 /* 数组类型 */ //stack v ...