Bacula 异地备份

Bacula 异地备份

我有 2 个地点,一个在欧洲,一个在亚洲。每个地点都有一个功能齐全的 Bacula 系统来处理本地备份。
我想要做的是将一些作业从一个位置 SD 复制到另一个位置 SD。理想情况下,如果我可以在位置 A 执行备份,复制到位置 B,然后还原到位置 B 的服务器。
我了解到从版本 7.0.0 开始,Bacula 允许 SD 到 SD 备份。我认为这是我需要的功能(bacula 手册)

Bacula 7.0 版允许 SD 到 SD 的复制和迁移作业传输。这允许通常称为复制或异地传输 Bacula 备份的操作。如果复制或迁移作业的源 SD 和目标 SD 不同,则会自动进行此操作。

问题是我不知道如何设置这样的作业。我没有找到任何关于这方面的教程。
我最初的想法是我必须使用复印作业,但后来从同一本手册中得知:

迁移仅针对单个存储守护进程实施。您无法在一个存储守护进程上读取数据,而在另一个存储守护进程上写入数据。

这正是我想要做的...
我该如何实现这一目标?

答案1

我找到了(a)解决方案......
看来关键就在这里:

如果复制或迁移作业的源 SD 和目标 SD 不同,则会自动发生此操作。

我的目标是将一些备份作业从亚洲复制到欧洲。为了实现此目的,我在欧洲 SD 中创建了一个设备:

Device {
  Name = asiaBackup
  Media Type = File1
  Device Type = File
  Archive Device = /bacula/asia
  LabelMedia = yes
  Random Access = Yes;
  AutomaticMount = yes;
  RemovableMedia = no;
  AlwaysOpen = no;
  Maximum Concurrent Jobs = 40;
  Autochanger = no;
}

然后在亚洲总监中我创建了一个从欧洲 SD 指向该设备的存储。

Storage {
  Name = europeStorage
  Address = myEuropeDomain.com
  SDPort = 9103
  Password = "blaBlaBla...."
  Device = asiaBackup
  Media Type = File1
  Maximum Concurrent Jobs = 5
  Heartbeat Interval = 10
}

/* dbPool = the pool where the backup sits locally */
Pool {
  Name = dbPool
  Label Format = "dbBackup"
  Pool Type = Backup
  Recycle = yes                       
  AutoPrune = yes                     
  Volume Retention = 365 days         
  Maximum Volume Bytes = 5G          
  Maximum Volumes = 1000             
  Label Format = "dbVol-"            
  Recycle Oldest Volume = yes
  Next pool = "europeBackupPool"
  Storage = dbStorage
}


/* europeBackupPool = the destination pool of copy job */
Pool {
  Name = europeBackupPool
  Label Format = "dbBackup"
  Pool Type = Backup
  Recycle = yes                       
  AutoPrune = yes                     
  Volume Retention = 365 days         
  Maximum Volume Bytes = 5G          
  Maximum Volumes = 1000             
  Label Format = "euBKVol-"          
  Recycle Oldest Volume = yes
  Storage = europeStorage
}

和这份复印工作

Job {
    Name = backupToEurope
    Type = Copy
    Pool = dbPool
    Selection Type = PoolUncopiedJobs
    Schedule = "dailyFullSchedule"
    Client = "none"
    FileSet = "none"
    Messages = Standard
}

请注意初始池中的“下一个池”指令,因为它指定了将复制作业的池。
之后,当我运行备份时,我得到:

    Run Copy job
JobName:       backupToEurope
Bootstrap:     *None*
Client:        none
FileSet:       none
Pool:          dbPool (From Job resource)
NextPool:      europeBackupPool (From Job Pool's NextPool resource)
Read Storage:  dbStorage (From Pool resource)
Write Storage: europeStorage (From Job Pool's NextPool resource)
JobId:         *None*
When:          2015-04-01 18:44:27
Catalog:       MyCatalog
Priority:      10

这里的缺点是,如果您想恢复此备份,您必须从亚洲总监那里进行,因为欧洲总监对这项工作一无所知......

答案2

补充一点。尝试使用扫描然后您可以再次“读取”卷(复制的卷)并将它们导入到其他位置的目录中。然后您也可以在第二个站点中恢复它们 ;) 这样就可以避免在出现任何问题时对第一个控制器的依赖。

希望对您有帮助。谢谢 Filipe

相关内容