Minule jsme si zazálohovali reálný systém, tentokrát je čas na obnovu zálohy.

Záloha vyžaduje vytvoření zálohovacího jobu, který jako obvykle definujeme v konfiguraci Directora. Je potřeba definovat Job resource tentokrát typu Restore.

Job {
  Name = "RestoreFiles"
  Type = Restore
  Client=bsd-fd
  Storage = MyBackupStorage
  FileSet="Full Set"
  Pool = File
  Messages = Standard
  Where = /var/bacula-restores
}
  • Client
  • Storage
  • FileSet
  • Pool

nejsou podstatné, ale musí být v jobu definovány. Konkrétního klienta si vybereme až při spuštění obnovy, storage atd. si director najde sám.

Nejpodstatnější nastavení je potom cesta (Where = ), do které se budou soubory obnovovat. Defaultní je /tmp, což není přiliš vhodné, protože moderní linuxové distribuce temp umísťují do ramdisku, zvolíme tedy cestu, kde je dostatek místa pro obnovu.

Jako vždy po změně konfigu musíme directora zrestartovat, což se nejmépe udělá v bconsole:

* reload

Máme tedy Job nadefinovaný (stačí opravdu jen nastavit cestu v již připraveném Restore Jobu v konfiguraci directora), můžeme tedy přistoupit k obnově souborů.

Obnova

Na obnovu slouží příkaz restore.

Asi nemá smysl sem vypisovat celou manuálovou stránku. Pro restore jsou podstatné dvě informace a to:

  • Co obnovit
  • Kam obnovit

Pokud chceme obnovit stav všech souborů k předchozí záloze, stačí znát pouze ID zálohovacího jobu. ID získáme z mnoha různých zdrojů, status dir, v emailech o provedených zálohách apod. Příkaz restore nám také poskytne celou řadu možností, jak najít ve které záloze je konrétní soubor apod. Dokonce můžeme soubory vyhledávat v katalogu pomocí SQL příkazů.

Z minulého článku známe jobid 206.

Kam obnovit, v příkazu restore si můžeme zvolit libovolného klienta, soubory ted nemusíme nutně obnovovat na stroj, který jsme zálohovali, ale kamkoliv jinam. Funguje i obnova souborů z Windows na Linux (opačně jsem to netestoval - pro Windows je nutné definovat samostatný Restore Job, protože se liší způsob zápisu cesty k adresáři).

Takže obnovíme jobid 206, v bconsole:

* restore all jobid=206

bconsole nám nabídne prostředí pro de/select souborů, pokud chceme obnovit vše, napíšeme jen done

Building directory tree for JobId(s) 206 ...  ++++++++++++++++
1,117 files inserted into the tree and marked for extraction.

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: /
$ done

Dále se nás bconsole zeptá na klienta, kam to obnovit:

Defined Clients:
     1: bsd-fd
     2: x-fd
     3: gitlab-fd
     4: y-fd
     5: z-fd
Select the Client (1-5):3

A ještě shrnutí a potvrzení definice obnovy:

Run Restore job
JobName:         RestoreFiles
Bootstrap:       /var/db/bacula/MyBaculaDirector.restore.2.bsr
Where:           /var/bacula-restores
Replace:         Always
FileSet:         Full Set
Backup Client:   gitlab-fd
Restore Client:  gitlab-fd
Storage:         MyBackupStorage
When:            2017-04-30 18:00:54
Catalog:         MyCatalog
Priority:        10
Plugin Options:
OK to run? (yes/mod/no):

Po potvrzení již započne samotná obnovat, můžeme sledovat průběh v status dir nebo si na obnovu počkat:

Job queued. JobId=214
* wait jobid=214

Wait je velmi užitečná funkce bconsole.

A je to, soubory se nám obnovily na stroj gitlab-fd do adresáře /var/bacula-restores.