Bacula,被誉为开源软件中最好的备份还原软件,它提供了企业级的客户机/服务器的备份解决方案,能够通过网络来管理文件的备份,恢复和核实工作。Bacula,既有windows版本的,也有Linux,Unix的。但目前有关于其使用的文章是在太少,而且介绍的很不详细,今天,我就来和大家一起探讨一下。(最新版本2.4.3主页[url][/url])一,bacula的模型为了部署bacula,应该了解它的主要组件。控制器是协调备份,恢复和校验操作的守护进程。用户可以通过控制台向控制守护进程提交任务。控制台不一定非要和控制守护进程在同一台机器上,可以分离。存储守护进程是用来写入备份数据或者读取备份数据的。它必须安装在提供存储的机器上。也就是安装了磁带机或者要将备份存放的服务器上。它和控制守护进程可以分离,不一定要安装在一起。文件守护进程安装在每台需要备份数据的系统上。比如,你想备份网络中的某台文件服务器上的数据,那么,你就应该将文件守护进程安装在此台服务器上。编目是一个数据库,它保存所有备份的每个文件和卷的信息。所以,它需要数据库软件的支持,现在bacula支持mysql,postgresql和sqlite。二,设置试验环境如下:有两台linux主机,一台主机名为RHEL5(以下简称server),ip为192.168.0.5,系统为RHEL5.1,角色为备份服务器兼存储服务器(另挂一块磁盘到/tmp/test/下作为存储)另一台主机名为client。Ip是192.168.0.6,系统是RHEL5.1,角色为需要备份的主机(这里我们以/boot为要备份还原的目录)准备工作:在server上安装mysql和gcc环境(bacula编译需要gcc),并启动mysql在client上只需安装gcc环境配置服务器server:1,解压编译安装bacula:然后是make和makeinstall默认情况,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-dirDIRport=9101QueryFile=/etc/bacula/query.sqlWorkingDirectory=/var/bacula/workingPidDirectory=/var/runMaximumConcurrentJobs=1#定义一次能处理的并发作业数Password=RTQVFEti4EAPrGLJV+xn+/7ScFU0D+iDs5OWCvy354uI#这个地方必须与控制台所在主机上的bconsole.conf一致,这里是本机Messages=Daemon}JobDefs{Name=DefaultJobType=BackupLevel=IncrementalClient=RHEL5-fd#如果本机也需备份就在后面去定义RHEL5-fd为本机FileSet=FullSetSchedule=WeeklyCycleStorage=FileMessages=StandardPool=DefaultPriority=10}Job{#定义一个任务Name=Client#任务的名称后面咱们可以在bacula的控制台中看到Client=Client#引用后面定义的客户端“Client”,表示此任务对名字叫client主机进行操作JobDefs=DefaultJobWriteBootstrap=/var/bacula/working/Client1.bsr#定义备份的引导信息放在什么地方Level=Full#定义备份类型为完全FileSet=FullSet#备份的范围根据后面定义的名叫“FullSet”的操作Schedule=WeeklyCycleAfterBackup#备份计划任务按WeeklyCycleAfterBackup定义的执行}Job{Name=BackupCatalogJobDefs=DefaultJobLevel=FullFileSet=CatalogSchedule=WeeklyCycleAfterBackupRunBeforeJob=/etc/bacula/make_catalog_backupbaculabaculaRunAfterJob=/etc/bacula/delete_catalog_backupWriteBootstrap=/var/bacula/working/BackupCatalog.bsrPriority=11#runaftermainbackup}Job{Name=RestoreFilesType=RestoreClient=RHEL5-fd#这里就是指的RHEL5这台主机自己FileSet=FullSetStorage=FilePool=DefaultMessages=StandardWhere=/bacula-restores}FileSet{Name=FullSetInclude{Options{signature=MD5}File=/boot#备份的范围,这里我根据需要只备份了/boot分区,如果要备份其他可加入相应路径}Exclude{#排除的,不备份的内容File=/procFile=/tmpFile=/.journalFile=/.fsck}}Schedule{Name=WeeklyCycleRun=Full1stsunat23:05Run=Differential2nd-5thsunat23:05Run=Incrementalmon-satat23:05}Schedule{Name=WeeklyCycleAfterBackupRun=Fullsun-satat23:10}FileSet{Name=CatalogInclude{Options{signature=MD5}File=/var/bacula/working/bacula.sql}}Client{Name=RHEL5-fdAddress=192.168.0.5#指定了RHEL5这台主机的地址,如果有DNS可以写FQDNFDPort=9102Catalog=MyCatalogPassword=f/4eSVt8B+tvY8fsWerClwGwWxnMRIgung8h+zWb4tRv#要和RHEL5上bacula-fd.conf的一致FileRetention=30days#30daysJobRetention=6months#sixmonthsAutoPrune=yes#PruneexpiredJobs/Files}Client{Name=Client#前面引用过的client就是在这定义的Address=192.168.0.6#告诉服务器client在什么地方FDPort=9102Catalog=MyCatalogPassword=f/4eSVt8B+tvY8fsWerClwGwWxnMRIgung8h+zWb4tRv2#要和client上bacula-fd.conf的一致FileRetention=30days#30daysJobRetention=6months#sixmonthsAutoPrune=yes#PruneexpiredJobs/Files}Storage{#定义存储服务器Name=FileAddress=192.168.0.5#告诉服务器数据存储在哪台机器上。这里是主机自己。SDPort=9103Password=oTJC6wYD/kTLcptwdReP/Gl7xxqngURQdZZfQINCeMzd#要和本机bacula-sd.conf上一致Device=FileStorageMediaType=File#定义以文件方式存储}Catalog{#关于日志和数据库的定义Name=MyCatalogdbname=bacula;dbuser=bacula;dbpassword=}Messages{Name=Standardmailcommand=/sbin/bsmtp-hlocalhost-f\\(Bacula\)\%r\\-s\Bacula:%t%eof%c%l\%roperatorcommand=/sbin/bsmtp-hlocalhost-f\\(Bacula\)\%r\\-s\Bacula:Interventionneededfor%j\%rmail=root@localhost=all,!skippedoperator=root@localhost=mountconsole=all,!skipped,!savedappend=/var/bacula/working/log=all,!skipped}Messages{Name=Daemonmailcommand=/sbin/bsmtp-hlocalhost-f\\(Bacula\)\%r\\-s\Baculadaemonmessage\%rmail=root@localhost=all,!skippedconsole=all,!skipped,!savedappend=/var/bacula/working/log=all,!skipped}Pool{Name=DefaultPoolType=BackupRecycle=yes#BaculacanautomaticallyrecycleVolumesAutoPrune=yes#PruneexpiredvolumesVolumeRetention=365days#oneyear}Pool{Name=ScratchPoolType=Backup}Console{Name=RHEL5-monPassword=YZDfclvKrfWVkmGdGtWygMOR8ZOX7XK7MYvaFd1dIraNCommandACL=status,.status}第二个文件bacula-sd.confStorage{#定义存储。本例中是自己RHEL5Name=RHEL5-sdSDPort=9103#存储端口WorkingDirectory=/var/bacula/workingPidDirectory=/var/runMaximumConcurrentJobs=20}Director{Name=RHEL5-dirPassword=oTJC6wYD/kTLcptwdReP/Gl7xxqngURQdZZfQINCeMzd#与bacula-dir.conf中对应的Storage项一致}Director{Name=RHEL5-monPassword=xyqzFcPkpqwmQm7BD5OhegyynhOhFHcNZWoIfMZN2bY5Monitor=yes}Device{Name=FileStorageMediaType=FileArchiveDevice=/tmp/test#定义备份到什么地方LabelMedia=yes;#letsBaculalabelunlabeledmediaRandomAccess=Yes;AutomaticMount=yes;#如果设备可用,则读取R