Chinaunix首页 | 论坛 | 博客
  • 博客访问: 288234
  • 博文数量: 65
  • 博客积分: 1514
  • 博客等级: 中尉
  • 技术积分: 820
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-20 21:01
文章分类

全部博文(65)

文章存档

2012年(65)

分类: LINUX

2012-02-07 14:22:06

Bacula主要包括四个配置文件,分别对应Director(dir)、Storage Daemon(sd)、File Daemon(fd)和Console。在bacula-dir.conf文件里记录了Director的各种资源,这是最复杂也是最常用的配置文件,不论是添加新的fd和sd,还是修改文件集,都需要用到这个配置文件。在bacula-sd.conf和bacula-fd.conf文件中,分别记录了 sd和fd自身的属性,以及登录dir需要的密码等。Console是管理员控制dir的接口,bconsole.conf里记录了dir的ip地址、端口、密码等。这幅图是从main文档中摘下来的,表明了各个配置文件的内容。

 

1.配置Director

Director的资源类型有很多种,包括:

  • Director-定义Director的名字以及Console登录的密码。每一个bacula-dir.conf文件只能定义一个Director。如果系统里有/dev/random或者bc,bacula会生成一个随机数作为密码,否则密码为空。
  • Job-定义备份/恢复作业,并且关联每个作业都需要用到的Client、FileSet和Schedule资源。 
  • JobDefs-这是可选的资源,可以为Job提供各种默认的资源。
  • Schedule-定义一个Job的运行计划。每个Job有且只有一个Schedule资源。
  • FileSet-定义一个备份的文件集。每个Job有且只有一个FileSet资源。
  • Client-定义需要备份的客户端。每个Job有且只有一个Client资源。
  • Storage-定义Volume会被挂在到哪个物理设备。可以定义多个Storage。
  • Pool-定义一个Volume的集合。大多数用户只需要一个默认的Pool就足够了,但是假如客户端和卷很多,可能就会需要多个Pool资源,可以限制某些作业或客户端使用指定的Volume。
  • Catalog-定义数据库资源,包括数据库名,登录用户名和密码。数据库保存了备份的文件列表和文件所属的卷名。通常情况只需要一个Catalog资源,但是也可以在Director规模很大的情况下定义多个Catalog资源。
  • Messages-定义消息的发送。

虽然Bacula计划在未来支持多个Director,但是现在的版本只支持一个Director,所以bacula-dir.conf只能定义一个Director资源。Director必须有一个Name 来标识,Password 是提供给Console登录用的,必须和bconsole.conf里的Director资源里的Password一致;必须给Director指定一个Messages 资源,用于传递Director产生的和Job无关的信息;Working Directory 用于指定Director存放状态文件的目录,也是必须的;DirPort 用于指定Director监听Console连接请求的端口号,默认是9101;Console的Query命令需要一些封装好的SQL表达式,QueryFile 就指定了这些表达式存放在哪个文件里,但是我在配置文件描述的位置却没有找到query.sql文件,所以当使用Query命令时会提示打不开文件 ;关闭Bacula的脚本需要使用Bacula的进程号,所以在PidDirectory 指定的目录中创建pid文件保存进程号,同时也有防止多个Bacula同时运行的功能;Maximum Concurrent Jobs 定义了Director可以同时运行多少个作业,默认是1,如果允许多个并行作业,卷的格式会变得更复杂,恢复操作会因为不同作业的块在卷上交替而变得更慢,为了避免这个问题可以给每个并发的作业分配不同卷,或者使用spooling技术,先暂时写到磁盘上的缓冲区,最后一次性写到卷上("This can be avoided by having each simultaneous job write to a different volume or by using data spooling, which will first spool the data to disk simultaneously, then write one spool file at a time to the volume thus avoiding excessive interleaving of the different job blocks.")。

bacula-dir.conf 写道
Director { # define myself
Name = fubuntu-dir
DIRport = 9101 # where we listen for UA connections
QueryFile = "/root/bacula/bin/query.sql"
WorkingDirectory = "/root/bacula/bin/working"
PidDirectory = "/root/bacula/bin/working"
Maximum Concurrent Jobs = 1
Password = "/+Zm3xCkDLA8WcsgC6Gnby4rqSz4ikrJ24rh8afDjPTM" # Console password
Messages = Daemon
}

Job定义了一个备份或者恢复作业。每个Job定义都包括一个Name ,作业的类型 ( Type ), 要备份的客户端(Client )和文件集(FileSet ),作业的运行计划(Schedule ),数据存储的位置(Storage )等。Type一共有四种,Backup、Restore、Verify和Admin,通常只需要定义一个Restore作业作为原型,由于历史的原因,恢复作业也要指定文件集,但是现在已经不会被用到了。现在的Bacula每个Job只能使用一个Storage。恢复一个作业要用到Client和 FileSet,所以如果多个Job有相同的Client和FileSet,恢复将不能正常进行,解决的办法是定义多个FileSet,它们的Name必须不同,但是内容可以一样。除此之外还有很多有用的指令,Enable 可以关闭作业计划的自动执行;Level 和 Schedule是二选一的,一般Level会被Schedule覆盖,增量备份的原理是比较上次备份的时间和文件的修改时间(st_mtime和 st_ctime),因为mv不会修改st_mtime和st_ctime,所以最好使用cp命令保证增量备份正确执行,另外自上一次全量备份以来删除的文件也会被恢复,和这方面相关的有一个Accurate Mode;Accurate 用于开启Accurate Mode, 这个模式可以精确地知道哪些文件自上一次备份以来被删除或者重命名了,这个模式比较消耗File Daemon的内存,500000个文件需要大约64MB的RAM;Write Bootstrap 指定一个bacula用于写bootstrap的文件,用于恢复系统的状态;Messages指定了这个作业使用的消息资源;Pool 定义这个作业使用的卷池;Priority 定义了作业的优先级,数值越高优先级越低。

bacula-dir.conf 写道
JobDefs {
Name = "DefaultJob"
Type = Backup
Level = Incremental
Client = localhost.localdomain-fd
FileSet = "Full Set"
Schedule = "WeeklyCycle"
Storage = File
Messages = Standard
Pool = File
Priority = 10
Write Bootstrap = "/root/bacula/bin/working/%c.bsr"
}


#
# Define the main nightly save backup job
# By default, this job will back up to disk in /tmp
Job {
Name = "BackupClient1"
JobDefs = "DefaultJob"
}

#
# Standard Restore template, to be changed by Console program
# Only one such job is needed for all Jobs/Clients/Storage ...
#
Job {
Name = "RestoreFiles"
Type = Restore
Client=localhost.localdomain-fd
FileSet="Full Set"
Storage = File
Pool = Default
Messages = Standard
Where = /tmp/bacula-restores
}

Schedule资源定义了Job的运行计划,如果Job没有引用Schedule,那么只能手动运行。Schedule必须有一个Name 作为标识;Run 就是一个运行计划,每个Schedule可以有多个运行计划,每个运行计划都包括Level、Date-time-specification等,其中时间的配置比较复杂。Bacula在底层使用bit mask保存Schedule,一共有六种掩码和一个minute域来表示时间,六种掩码分别是hour,day of the month(mday),month,day of the week(wday),week of the month(wom),week of the year(woy)。Schedule会被初始化为每个小时都运行。

bacula-dir.conf 写道
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
}

FileSet定义了备份哪些文件以及过滤哪些文件。FileSet必须有一个Name ;如果Ignore FileSet Changes 被设置为no,bacula会监控Include和Exclude,如果它们被修改那么下一次备份会被强制进行全备份,设置为yes则会忽略Include和Exclude的变化;Enable VSS 设置是否需要VSS快照,只有Windows的客户端有效;Include包括需要备份的文件和目录,以及这个文件集需要的签名、压缩等选项,路径只能是绝对路径,每个FileSet可以有多个Include;Exclude 指出哪些文件被过滤;Options 定义了一个Include的选项,包括从中过滤哪些文件、压缩、签名等。

bacula-dir.conf 写道
FileSet {
Name = "Full Set"
Include {
Options {
Compression=GZIP
signature=SHA1
Sparse = yes
}
File = /etc/backup.list
}
Include {
Options {
wildfile = "*.o"
wildfile = "*.exe"
Exclude = yes
}
File = /root/myfile
File = /usr/lib/another_file
}
Exclude {
File = /tmp
}
}

Client资源定义了File Daemon的属性,需要为每一台机器定义一个Client资源。按照惯例,Client需要一个NameAddress 是计算机名,或者是一个IP地址;FD Port 是这个File Daemon的端口号,默认是9102;Catalog 指明此File Daemon使用的数据库资源;Password 是File Daemon与Director建立链接时使用的密码;File Retention 定义了文件信息在数据库的保存时间,如果AutoPrune为yes,bacula会自动清理,但是并不会删除备份数据;Job Retention 定义了作业信息在数据库保留的时间;AutoPrune 定义了是否自动清理过期的文件和作业信息;Maximum Concurrent Jobs 定义了Client能同时运行的作业数。

bacula-dir.conf 写道
Client {
Name = localhost.localdomain-fd
Address = localhost
FDPort = 9102
Catalog = MyCatalog
Password = "PcG4GwVcAkqnu/dJ4XjX3G6UfyUD23Y39NKvrNZEBzti" # password for FileDaemon
File Retention = 30 days # 30 days
Job Retention = 6 months # six months
AutoPrune = yes # Prune expired Jobs/Files
}

Storage资源定义了Director可以使用的Storage Daemon。必须得有NameAddressSD PortPassword由于每个Storage Daemon可以有多个Device资源, Device 表示使用Storage Daemon配置文件中定义的哪一个Device资源。

bacula-dir.conf 写道
Storage {
Name = File
# Do not use "localhost" here
# Address = localhost # N.B. Use a fully qualified name here
Address = 192.168.0.62
SDPort = 9103
Password = "FB5F/cbhqGiaOjhtB8E0AcEbd/XIvK30ZzDWl8l9iBdy"
Device = FileStorage
Media Type = File
}

在试用了Bacula后,一直觉得很奇怪,难道所有的人都使用一个满权限的Console与Directory打交道?原来Bacula的Console 分为三种。默认Console具有所有权限,没有Name,只有一个连接Director的密码;第二种Console有NamePassword ,需要在bacula-dir.conf中为其定义Console资源,并赋予一些权限;第三种和第二种类似,只是Name与某个Client资源相同,这就可以使用SetIP命令将Client的Address更新为Console的Address,这方便了使用DHCP的用户。可以为Console配置很多权限控制列表,包括JobACLStorageACLClientACL 等等。

2.配置File Daemon

在File Daemon(也就是Client)的配置文件中,主要包括三种资源:

  • FileDaemon-定义需要备份的客户端自身的属性。 
  • Director-定义连接的Director的名字和密码。
  • Messages-定义消息存放在哪里。

FileDaemon资源首先必须有一个Name 作为标识符;Working Directory 定义了客户端存放状态文件的目录;Pid Directory 定义了存放进程ID的文件的位置,这个文件用于关闭Bacula客户端以及防止多个客户端同时运行;Maximum Concurrent Jobs 定义了能同时运行的作业数,值得注意的是,所有与Director的交互都算作业,包括查询状态等,所以最好将其设为大于1的数,这一点和bacula-dir.conf文件中Director资源的Maximum Concurrent Jobs不同;FDport 定义了客户端监听Director连接的端口号,默认是9102。

bacula-fd.conf 写道
FileDaemon { # this is me
Name = localhost.localdomain-fd
FDport = 9102 # where we listen for the director
WorkingDirectory = /root/bacula/bin/working
Pid Directory = /root/bacula/bin/working
Maximum Concurrent Jobs = 20
}

Director资源定义了客户端登陆Director所使用的账号和密码等信息。Name是所要登陆的Director的名字;Password是登陆需要的密码,必须和bacula-dir.conf文件中对应的Client资源的密码一致;Monitor如果是yes,那么Director只能查询客户端的状态。

bacula-fr.conf 写道
Director {
Name = localhost.localdomain-dir
Password = "PcG4GwVcAkqnu/dJ4XjX3G6UfyUD23Y39NKvrNZEBzti"
}
  3.配置Storage Daemon

Storage Daemon可以定义相对比较少的资源,主要包括四种:

  • Storage-定义Storage Daemon的名字等。
  • Director-定义所要登陆的Director名字和密码。
  • Device-定义存储设备的特性。
  • Messages-定义消息存放在哪里。

Storage资源定义了Storage Daemon的全局属性,每个配置文件只有一个Storage资源。必须有NameWorking Directory 定义了状态文件的位置;Pid Directory 定义了进程ID文件的位置;Maximum Concurrent Jobs 定义了并发作业数;SDPort定义了端口号,默认9103。

bacula-sd.conf 写道
Storage { # definition of myself
Name = localhost.localdomain-sd
SDPort = 9103 # Director's port
WorkingDirectory = "/root/bacula/bin/working"
Pid Directory = "/root/bacula/bin/working"
Maximum Concurrent Jobs = 20
}
 

Director资源定义了可以使用Storage Daemon服务的Director Daemon。Name 指出是哪一个Director;Password 是Director要使用此Storage时需要提供的密码,必须和bacula-dir.conf保持一样;Monitor 等于yes表明Director只能查询Storage Daemon的状态。

Device资源定义了此Storage Daemon可以使用的存储设备,由于存储设备的多样性,Device资源的指令很多。Name 是这个Device资源的逻辑名字;Archive Device 是存储设备的物理名字,通常是一个设备文件名,当存储设备是磁盘时也可以是一个目录; Media Type 命名了此设备支持的媒质类型,因为在恢复时Bacula使用这个来选择存储设备所以要小心命名,如果使用的是磁盘设备,每个设备资源有不同的挂载点,必须给它们唯一的Media Type;AlwaysOpen 如果是yes,那么bacula会始终保持这个设备为打开的状态,如果是no,当所有使用这个设备的作业都完成后,bacula会释放这个资源,可以在 Console使用mount和unmount命令来挂载、卸载设备;RemovableMedia描述这个设备是否支持移动介质;Random Access 描述这个设备是否支持lseek操作,即随机访问;LabelMedia 设置是否自动标注空白media;AutomaticMount 为yes时允许bacula检查设备是否包含一个有标签的卷。

bacula-sd.conf 写道
Device {
Name = FileStorage
Media Type = File
Archive Device = /tmp
LabelMedia = yes; # lets Bacula label unlabeled media
Random Access = Yes;
AutomaticMount = yes; # when device opened, read it
RemovableMedia = no;
AlwaysOpen = no;
}
  4.配置Console

Console的配置文件是最简单的,通常只需要修改密码。Director资源定义了要连接的Director Daemon,需要提供此Dird的名字、IP地址、端口号和密码;Console资源是可选的,除非想要修改Console的权限,否则不需要配置这个资源,这个资源最重要的地方就是访问控制列表。   

阅读(2015) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~