web-dev-qa-db-ja.com

Baculaのオフサイトバックアップ

私は2つの場所を持っています。1つはヨーロッパに、もう1つはアジアにあります。各場所には、ローカルバックアップを処理するための完全に機能するBaculaシステムがあります。
私がやりたいのは、ある場所のSDから別の場所のSDにいくつかのジョブをコピーすることです。理想的には、場所Aでバックアップを実行し、場所Bにコピーして、場所Bのサーバーに復元できる場合です。
バージョン7.0.0Bacula以降ではSDからSDへのバックアップが許可されていることを理解しています。これが私が必要としている機能だと思います(baculaマニュアル)

Baculaバージョン7.0では、コピージョブと移行ジョブのSDからSDへの転送が許可されています。これにより、一般にBaculaバックアップのレプリケーションまたはオフサイト転送と呼ばれるものが可能になります。コピーまたは移行ジョブのソースSDと宛先SDが異なる場合、自動的に発生します。

問題は、そのような仕事を設定する方法がわからないことです。これに関するチュートリアルは見つかりませんでした。
私の最初の考えは、コピージョブを使用する必要があるということでしたが、同じマニュアルから:

移行は、単一のストレージデーモンに対してのみ実装されます。あるストレージデーモンで読み取り、別のストレージデーモンに書き込むことはできません。

それはまさに私がやりたかったことです...
これをどのように達成できるかについてのアイデアはありますか?

4
Videanu Adrian

私は(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からこのデバイスを指す1つのストレージを作成しました。

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

ここでの欠点は、このバックアップを復元する場合、ヨーロッパのディレクターがこの仕事についての手がかりを持っていないため、アジアのディレクターからそれを行う必要があるということです...

3
Videanu Adrian

1つ追加するだけです。 bscanを使用してみてください。ボリューム(コピーされたボリューム)を再度「読み取り」、他の場所のカタログにインポートできます。 2番目のサイトでも復元できます;)したがって、何か問題が発生した場合に、最初のディレクターへの依存を回避できます。

それが役に立てば幸い。乾杯フィリペ

2
Filipe Lacerda