最近在网上看到有一个强大的网络备份软件bacula,于是就找了一些资料来看,发现网上的资料寥寥无几啊,凭着自己的理解就在本地环境下面进行了测试,最后终于实现了网络的备份以及还原功能,当然此文章也有不足之处,之后会进行其他方面的一些更新.
网络备份工具bacula配置
简介: Bacula,被誉为开源软件中最好的备份还原软件,它提供了企业级的客户机/服务器的备份解决方案,能够通过网络来管理文件的备份,恢复和核实工作.既有windows版本的,也有Linux,Unix的.
关于bacula的组建介绍:
Directory:管理所有备份,恢复,验证,和存档事务,定制备份和恢复文件的计划.
Storge:指定进行存储和恢复文件属性和数据的物理备份媒介.
File:安装在被备份机器上的程序,将被directory调用时候,它提供
关于自己的操作系统、文件属性、数据等资料.
Console:与directory进行通讯.
Catalog:负责维护所有备份文件的索引和数据库.
Monitor:监控directory、file、storage的守护进程.
试验环境:
使用2台服务器来做这个网络备份的测试环境,环境如下:
10.10.2.226 作为directory、storage、catalog.
10.10.2.162 作为file.
关于bacula的结构图:
一. Bacula在server上的安装以及配置
1.Bacula在server上的安装
bacula的安装不是很复杂,我这里安装的是bacula的2.4.3版本的.
#tar zxvf bacula-2.4.3.tar.gz
#./configure --with-mysql
#make&&make intall
默认情况下,bacula的安装路径为/etc/bacula.
2.创建mysql脚本
#./grant_mysql_privileges
#./ create_mysql_database
#./ make_mysql_tables
3.bacula的配置
在这里说明下,bacula的主要配置都在directory这个配置文件里面的,这个算是一个核心文件了,一定要搞清楚里面配置文件的配置项都代表什么意思,否则很难配置成功.
#####################################################################
directory端的配置:
#more bacula-dir.conf
//directory的全局配置
Director {
Name = linux-0fdr-dir
DirAddress=10.10.226 //这里是directory端的ip
DIRport = 9101 //这里是directory端的进程号
QueryFile = "/etc/bacula/query.sql"
WorkingDirectory = "/var/bacula/working"
PidDirectory = "/var/run"
Maximum Concurrent Jobs = 1
Password = "MJ8SyFywMm+4ntJf2EupggRWIWE6LozmLfIKC8J9nYt7"
Messages = Daemon
}
//directory的job配置
Job {
Name =dbjob //job的名字,这个可以随便起,在后面的备份操作
的时候可以看到
Client=dbfd //这里要和后面的client的name名字要一样
Type=backup //可用类型有backup,restore,verify,admin
FileSet=dbfs //这个要和后面的fileset的name名字要一样
Messages=Daemon //这个要与后面的message的name名字要一样
Pool=dbpool //这个要与后面的pool的name名字要一样
Storage=dbsd //这个要与后面的storage的name名字要一样
Write Bootstrap = "/var/bacula/working/Client1.bsr"
Level=Full //这里是备份类型,可用的值是FULL(完全备份),incremental(增量备份),differential(差异备份)
schedule=dbscd //这里要与后面的schedule的name名字要一样
}
//directory的还原job配置
job{
Name=restrory
Client=dbfd
Type=Restore
FileSet=dbfs
Messages=Daemon
Pool=dbpool
Storage=dbsd
Write Bootstrap = "/var/bacula/working/Client1.bsr"
Where =/home/bacula/ //还原的路径
}
FileSet {
Name =dbfs //这个名字是应用到job里面的
Include{
Options {
Compression=GZIP //对备份文件进行gzip的压缩
signature = MD5 //验证方式为MD5码的方式
Sparse=yes
}
File =/home/mysql_packup //需要备份的目录
}
Exclude { // 排除的,不备份的内容
File = /proc //不备份/proce
File = /tmp
File = /.journal
File = /.fsck
}
}
Client {
Name = dbfd //这里要与FD配置文件的name相同,并且应用在job里面的
Address = 10.10.2.162 //要备份的客户机IP
FDPort = 9102
Catalog = dbcatalog //记录客户机备份情况的日志名,后面会定义
Password = "Nd+Yuqe+Kd5wBc1S9uMTEGTNqNIe1cupnfuOdwboej6Z" //与FD的密码一致
File Retention = 30 days //保存在数据库目录多久轮询一次,这里是30天
Job Retention = 6 months //job保持周期,大于FRetention
AutoPrune = yes //当FR/JR周期满了是否执行自动删除它们在数据库的目录
#priority =1 //如果多个client时,定义优先级1-1000,值越小越优先
}
Storage {
Name =dbsd //必须与SD配置文件的name相同,这个应用到了job里面
Address = 10.10.2.226 //安装sd服务的服务器IP
SDPort = 9103
Password = "5jipKA7pekDel6BUjgIwD3LkPPBgxcecbLpLfl9puj0c" //要与SD的password一样
Device =dbdev //要与SD配置文件的device的name相同
Media Type = File //要与SD配置文件device的Media Type相同
}
Pool {
Name =dbpool //这个应用到了job里面
Pool Type=backup
Maximum Volume Jobs = 1
Recycle = yes
AutoPrune = yes
Volume Retention = 365 days
}
Schedule { //定时任务
Name =dbscd //这个应用到了job里面
Run = Full 1st sun at 23:05
Run = Differential 2nd-5th sun at 23:05
Run = Incremental mon-sat at 23:05
}
Catalog {
Name =dbcatalog //这个应用到了job里面
dbname = "bacula"; dbuser = "bacula"; dbpassword = ""
DB Address=10.10.2.226 //不要用localhost,数据库所在的IP
DB Port=3306
}
Messages {
Name = Daemon //这个应用到了job里面
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
}
Console {
Name = linux-0fdr-mon
Password = "MJ8SyFywMm+4ntJf2EupggRWIWE6LozmLfIKC8J9nYt7"
CommandACL = status, .status
}
SD配置:
Storage {
Name =dbsd //这里要与director配置文件的storage的name一样
SDAddress=10.10.2.226 //这里是SD的IP
SDPort = 9103
WorkingDirectory = "/var/bacula/working"
Pid Directory = "/var/run"
Maximum Concurrent Jobs = 20 //job的最大连接数
}
Director {
Name =linux-0fdr-dir //这里要与directory的name相同
Password = "5jipKA7pekDel6BUjgIwD3LkPPBgxcecbLpLfl9puj0c " //这里与directory中storage的password相同
}
Director { //这个是做监控的配置
Name = linux-0fdr-dir
Password = "MJ8SyFywMm+4ntJf2EupggRWIWE6LozmLfIKC8J9nYt7"
Monitor = yes
Device {
Name =dbdev //这里要与directory中storage的device一样
Media Type = File //这里要与diretory中storage的Media Type相同
Archive Device =/home/bakcup/ //备份的路径
LabelMedia = yes;
Random Access = Yes;
AutomaticMount = yes;
RemovableMedia = no;
AlwaysOpen = no;
}
Messages {
Name = Standard
director = linux-0fdr-dir = all
}
console端的配置:
Director {
Name = linux-0fdr-dir //这里要与directory的name相 同
DIRport = 9101
address = 10.10.2.226 //console端的IP
Password = "MJ8SyFywMm+4ntJf2EupggRWIWE6LozmLfIKC8J9nYt7"
//这个密码要与directory的password一样
}
4.启动bacula的进程
在server端,只启动directory和storage的进程,启动命令如下:
#./bacula-ctl-dir start
#./bacula-ctl-sd start
启动之后,要给bacula添加存储介质,
linux-0fdr:/etc/bacula # ./bconsole
Connecting to Director 10.10.2.226:9101
1000 OK: linux-0fdr-dir Version: 2.4.3 (10 October 2008)
Enter a period to cancel a command.
*label
Automatically selected Catalog: dbcatalog
Using Catalog "dbcatalog"
Automatically selected Storage: dbsd
Enter new Volume name: woyun //这里随便给他起个卷名
Automatically selected Pool: dbpool
Connecting to Storage daemon dbsd at 10.10.2.226:9103 ...
Sending label command for Volume "test" Slot 0 ...
3000 OK label. VolBytes=188 DVD=0 Volume="test" Device="dbdev" (/home/bakcup/)
Catalog record for Volume "test", Slot 0 successfully created.
Requesting to mount dbdev ...
3906 File device "dbdev" (/home/bakcup/) is always mounted.
You have messages.
注意:上面黄色底红色字的为要输入的内容.
二. bacula在client服务器上的安装和配置
1.安装bacula
#tar zxvf bacula-2.4.3.tar.gz
# cd bacula-2.4.3
#./configure --enable-client-only
#make&&make install
默认安装在/etc/bacula/目录下
2.bacula的配置
#more bacula-fd.conf
#####################################################################
FD配置:
Director
Name = linux-0fdr-dir //这里要与directory的name相同
Password = "Nd+Yuqe+Kd5wBc1S9uMTEGTNqNIe1cupnfuOdwboej6Z"//这里与directory中client的password相同
}
Director { //这个是做监控的配置
Name = linux-0fdr-mon
Password = "MJ8SyFywMm+4ntJf2EupggRWIWE6LozmLfIKC8J9nYt7"
Monitor = yes
}
FileDaemon {
Name = dbfd //这里要与diretory的 job里的client相同
FDport = 9102
FDAddress=10.10.2.162 //被备份服务器的IP
WorkingDirectory = /var/bacula/working
Pid Directory = /var/run
Maximum Concurrent Jobs = 20
}
3.启动bacula的fd进程
#bacula-ctl-fd start
三.备份以及还原过程.
经过艰辛万苦终于走到了这一步,不容易啊,好现在备份下10.10.2.162的/home/bacula这个目录,操作如下:
#./bacula
Connecting to Director 10.10.2.226:9101
1000 OK: linux-0fdr-dir Version: 2.4.3 (10 October 2008)
Enter a period to cancel a command.
*run
Automatically selected Catalog: dbcatalog
Using Catalog "dbcatalog"
A job name must be specified.
The defined Job resources are:
1: dbjob
2: restrory
Select Job resource (1-2): 1
Run Backup job
JobName: dbjob
Level: Full
Client: dbfd
FileSet: dbfs
Pool: dbpool (From Job resource)
Storage: dbsd (From Job resource)
When: 2009-08-25 15:23:14
Priority: 10
OK to run? (yes/mod/no): yes
Job queued. JobId=54
*list jobs
54 | dbjob | 2009-08-25 15:23:18 | B | F | 0 | 0 | R | //这里会出现一个列表,我当前只复制
最新的一个JOBID,这里注意红色的R表示已
经在运行了,要是E或者C就是有问题了,要
是T就表示复制完成了.
*status
Status available for:
1: Director
2: Storage
3: Client
4: All
Select daemon type for status (1-4): 3
Automatically selected Client: dbfd
Connecting to Client dbfd at 10.10.2.162:9102
……………………………………………………… //这里省略一部分输出信息
54 Full 1,628 9.773 M OK 25- 8?009 15:27 dbjob
//看到这里已经显示OK了,表示备份成功
现在去看看备份路径下面是否生成了备份文件
# du -sh *
9.7M woyun
可以看到这个卷有9.4M的大小了,原来是4K的文件,再次证明了备份成功了.
下面做还原的操作,我们把client端的被备份目录下面文件进行删除
[root@localhost bacula]# rm -rf *
[root@localhost bacula]# ls
然后我们到directory端进行还原
# ./bconsole
Connecting to Director 10.10.2.226:9101
1000 OK: linux-0fdr-dir Version: 2.4.3 (10 October 2008)
Enter a period to cancel a command.
*restore
Automatically selected Catalog: dbcatalog
Using Catalog "dbcatalog"
To select the JobIds, you have the following choices:
1: List last 20 Jobs run
2: List Jobs where a given File is saved
3: Enter list of comma separated JobIds to select
4: Enter SQL list command
5: Select the most recent backup for a client
6: Select backup for a client before a specified time
7: Enter a list of files to restore
8: Enter a list of files to restore before a specified time
9: Find the JobIds of the most recent backup for a client
10: Find the JobIds for a backup for a client before a specified time
11: Enter a list of directories to restore for found JobIds
12: Cancel
Select item: (1-12): 5
Automatically selected Client: dbfd
Automatically selected FileSet: dbfs
+-------+-------+----------+-----------+---------------------+------------+
| JobId | Level | JobFiles | JobBytes | StartTime | VolumeName |
+-------+-------+----------+-----------+---------------------+------------+
| 54 | F | 1,628 | 9,773,751 | 2009-08-25 15:23:18 | woyun |
+-------+-------+----------+-----------+---------------------+------------+
You have selected the following JobId: 54
Building directory tree for JobId 54 ... +++++++++++++++++++++++++++++++++++++++++++++++++
1 Job, 1,621 files inserted into the tree.
You are now entering file selection mode where you add (mark) and
remove (unmark) files to be restored. No files are initially added, unless
you used the "all" keyword on the command line.
Enter "done" to leave this mode.
cwd is: /
$ mark home
1,628 files marked.
$ done
Bootstrap records written to /var/bacula/working/linux-0fdr-dir.restore.1.bsr
The job will require the following
Volume(s) Storage(s) SD Device(s)
===========================================================================
woyun dbsd dbdev
1,628 files selected to be restored.
Run Restore job
JobName: restrory
Bootstrap: /var/bacula/working/linux-0fdr-dir.restore.1.bsr
Where: /home/bacula/
Replace: always
FileSet: dbfs
Backup Client: dbfd
Restore Client: dbfd
Storage: dbsd
When: 2009-08-25 16:09:03
Catalog: dbcatalog
Priority: 10
OK to run? (yes/mod/no): mod
Parameters to modify:
1: Level
2: Storage
3: Job
4: FileSet
5: Restore Client
6: When
7: Priority
8: Bootstrap
9: Where
10: File Relocation
11: Replace
12: JobId
Select parameter to modify (1-12): 9
Please enter path prefix for restore (/ for none): /home/bacula
Run Restore job
JobName: restrory
Bootstrap: /var/bacula/working/linux-0fdr-dir.restore.1.bsr
Where: /home/bacula
Replace: always
FileSet: dbfs
Backup Client: dbfd
Restore Client: dbfd
Storage: dbsd
When: 2009-08-25 16:09:03
Catalog: dbcatalog
Priority: 10
OK to run? (yes/mod/no): yes
Job queued. JobId=55
*exit
OK还原完成,我们现在到client端看看有什么还原回来
[root@localhost bacula]# ls
bacula-2.4.3 bacula-2.4.3.tar.gz
看到了已经还原回来了,说明我们的还原操作已经实现了.