이번 편에서는 복원에 대해서 알아보자.  방법 자체는 백업과 크게 다르진 않은데, DIR에 Job으로 정의해놓을 경우 지정된 시간에 지정된 복원을 수행하는 것이 가능하다.  예를 들자면, 매일 같은 상태로 복원되어야만 하는 컴퓨터들이 여러대 혹은 수십 수백대가 있다면 이것들을 일괄처리할 수 있다는 장점이 있다.  설정은 전부 다 같고 Job {} 섹션에서 Type = Backup을 Type = Restore로 넣어주기만 하면 되니까 이것의 실습은 생략하고, bconsole을 이용한 복원을 실습해보도록 한다.

일단 Bacula는 최소 하나 이상의 복원 Job을 정의해야만 수동 복원작업이 작동가능하도록 되어있다.  /etc/bacula/bacula-dir.conf 파일을 열어서 최소한의 설정만 넣어주면 되므로, 다음의 내용을 삽입하고 데몬을 재시작해주자.

Job {
  Name = "Restore"
  Type = Restore
  Messages = Standard
  Pool = Server
  Client = "DBServer"
  FileSet = "Full Set"
}

sudo service bacula-director restart

 

위에 정의해놓은대로만 복원작업이 작동되는건 아니다.   bconsole을 이용하여 원하는 클라이언트에 원하는 파일을 복원할 수 있다.  Bacula의 복원은 원하는 파일을 원하는 위치에 꽂아넣을 수 있다는 장점이 있다.  bconsole에서 restore를 입력해보자.  

*restore
Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"

First you select one or more JobIds that contain files
to be restored. You will be presented several methods
of specifying the JobIds. Then you will be allowed to
select which files from those JobIds are to be restored.

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: Select full restore to a specified Job date
13: Cancel
Select item: (1-13):

차례대로 보자.

1. 마지막 20개 작업 나열
2. 파일이 백업된 장소로 작업 나열
3. 작업별 ID 번호를 콤마 기호로 나열하여 입력
4. SQL 쿼리를 사용한 목록 나열
5. 클라이언트의 가장 최근 작업을 선택 => 가장 많이 쓰인다.
6. 클라이언트의 특정 시간대 이전 작업 선택
7. 복원할 파일명을 직접 입력
8. 특정 시간대 이전에 백업된 파일 중 복원할 파일명을 직접 입력
9. 클라이언트의 가장 최근 백업 ID 찾기
10. 특정 시간대 이전 클라이언트의 가장 최근 백업 ID 찾기
11. 특정 백업 ID에 백업된 디렉토리명 입력
12. 특정 일자로 전체 복원
13.  취소

 

이전의 예제에서 우리는 FTP 서버를 백업했으므로 5번 메뉴를 이용하여 복원을 해보자.  참고로 입력을 잘못 했을 경우 점 (.)을 찍으면 언제든지 취소할 수 있다.

Select item: (1-13): 5
Defined Clients:
  1: DBServer
  2: Desktop
  3: FTP Server
  4: Web Server
  5: dbserver-fd
Select the Client (1-5): 3
Automatically selected FileSet: Full Set
+-------+-------+----------+-------------+---------------------+------------+
| JobId | Level | JobFiles |  JobBytes   |     StartTime       | VolumeName |
+-------+-------+----------+-------------+---------------------+------------+
|   5   |   F   |  55,461  | 982,708,126 | 2013-06-25 05:03:10 |  Server-1  |
+-------+-------+----------+-------------+---------------------+------------+
You have selected the following JobId: 5

Building directory tree for JobId(s) 5 ... +++++++++++++++++++++++++++++++++++++++++++
48,147 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: /

몇몇개의 단순한 유닉스 명령어가 지원된다.  어떤 명령어가 지원되는지 궁금하면 역시 마찬가지로 탭키를 입력하면 보여준다.   파일의 목록을 나열해보자.

ls

bin/
boot/
dev
etc/
home/
initrd.img
lib/
lib64/
lost+found
media/
mnt/
opt
root/
run
sbin/
selinux
srv
sys
usr/
var/
vmlinuz
$

실습에서는 /etc/bacula/bacula-fd.conf 파일을 /tmp 위치로 복원하는 것을 해보자.

$ cd etc/bacula
cwd is: /etc/bacula/
$ ls
bacula-fd.conf
bacula-sd.conf
bacula-sd.conf.dist
common_default_passwords
scripts/
$ mark bacula-fd.conf
1 file marked.
$ done
Bootstrap records written to /var/lib/bacula/dbserver-dir.restore.1.bsr

The job will require the following
  Volume(s) Storage(s) SD Device(s)
===========================================================================

  Server-1 Server Backup FileStorage-1

Volumes marked with "*" are online.


1 file selected to be restored.

Run Restore job
JobName: Restore
Bootstrap: /var/lib/bacula/dbserver-dir.restore.1.bsr
Where: *None*
Replace: always
FileSet: Full Set
Backup Client: FTP Server
Restore Client: FTP Server
Storage: Server Backup
When: 2013-06-25 06:31:54
Catalog: MyCatalog
Priority: 10
Plugin Options: *None*

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
  13: Plugin Options
Select parameter to modify (1-13): 9
Please enter path prefix for restore (/ for none): /tmp
Run Restore job
JobName: Restore
Bootstrap: /var/lib/bacula/dbserver-dir.restore.1.bsr
Where: /tmp
Replace: always
FileSet: Full Set
Backup Client: FTP Server
Restore Client: FTP Server
Storage: Server Backup
When: 2013-06-25 06:31:54
Catalog: MyCatalog
Priority: 10
Plugin Options: *None*
OK to run? (yes/mod/no): yes
Job queued. JobId=6

이제 제대로 실행되는지 보자.

*status dir
dbserver-dir Version: 5.2.5 (26 January 2012) x86_64-pc-linux-gnu ubuntu 12.04
Daemon started 25-Jun-13 06:15. Jobs: run=1, running=0 mode=0,0
Heap: heap=286,720 smbytes=77,288 max_bytes=9,888,526 bufs=270 max_bufs=295

Scheduled Jobs:
Level Type Pri Scheduled Name Volume
===================================================================================
Incremental Backup 10 25-Jun-13 23:05 DBServer Backup Server-1
Incremental Backup 10 25-Jun-13 23:05 FTP Backup *unknown*
Incremental Backup 10 25-Jun-13 23:05 WEB Backup Server-1
Incremental Backup 10 25-Jun-13 23:05 Desktop Backup Server-1
Full Backup 11 25-Jun-13 23:10 BackupCatalog Server-1
====

Running Jobs:
Console connected at 25-Jun-13 06:17
No Jobs running.
====

Terminated Jobs:
JobId Level Files Bytes Status Finished Name
====================================================================
1 Full 0 0 Error 25-Jun-13 03:34 BackupClient1
3 Full 0 0 Cancel 25-Jun-13 04:56 FTP_Backup
4 Full 10 7.737 K OK 25-Jun-13 04:58 FTP_Backup
5 Full 55,461 982.7 M OK 25-Jun-13 05:06 FTP_Backup
6 1 974 OK 25-Jun-13 06:32 Restore

====
You have messages.
*

Running에는 아무 것도 뜨지않았지만 message가 있다고 나오는걸 보니 작업이 끝난 것 같다.  확인해보자.

*messages
25-Jun 06:32 dbserver-dir JobId 6: Start Restore Job Restore.2013-06-25_06.32.45_03
25-Jun 06:32 dbserver-dir JobId 6: Using Device "FileStorage-1"
25-Jun 04:11 FTPServer-sd JobId 6: Ready to read from volume "Server-1" on device "FileStorage-1" (/mnt/backup-1/bacula).
25-Jun 04:11 FTPServer-sd JobId 6: Forward spacing Volume "Server-1" to file:block 0:9594.
25-Jun 06:32 dbserver-dir JobId 6: Bacula dbserver-dir 5.2.5 (26Jan12):
Build OS: x86_64-pc-linux-gnu ubuntu 12.04
JobId: 6
Job: Restore.2013-06-25_06.32.45_03
Restore Client: FTP Server
Start time: 25-Jun-2013 06:32:47
End time: 25-Jun-2013 06:32:48
Files Expected: 1
Files Restored: 1
Bytes Restored: 974
Rate: 1.0 KB/s
FD Errors: 0
FD termination status: OK
SD termination status: OK
Termination: Restore OK

25-Jun 06:32 dbserver-dir JobId 6: Begin pruning Jobs older than 6 months .
25-Jun 06:32 dbserver-dir JobId 6: No Jobs found to prune.
25-Jun 06:32 dbserver-dir JobId 6: Begin pruning Files.
25-Jun 06:32 dbserver-dir JobId 6: No Files found to prune.
25-Jun 06:32 dbserver-dir JobId 6: End auto prune.

*

성공적으로 복원되었다.  이제 파일을 확인하러 가보자.   FTP 서버로 접속해서 /tmp 에 있는 파일을 확인하면 된다.

root@ftp:~# ls -l /tmp/etc/bacula/bacula-fd.conf
-rw-r----- 1 root root 974 Jun 25 02:29 /tmp/etc/bacula/bacula-fd.conf
root@ftp:~#

파일 소유권과 날짜까지 제대로 복원되었다.

 

Bacula에 대해 혹평하는 몇몇 외국 유저들의 이야기를 보면 그들 전부가 "어떻게 쓰는줄을 모르기 때문에" 생겨나는 불평이다.  백업이 안되느니 복원이 안되느니 하면서 사용을 포기하는 유저들을 몇몇 봤는데, 글쓴이 경험상 Bacula 자체에 버그가 있어서 안된 경우는 아직 못봤다.  처음 접하기 어려운 툴인 것만은 분명 사실이다.  하지만 작동원리만 알고나면 정말 쓰기 쉬운 프로그램인 것도 분명 사실이다.



다음 편에서는 GUI로 Bacula를 제어해보자.

블로그 이미지

Seowon Jung jswlinux

Seowon Jung의 잡동사니 보관소

댓글을 달아 주세요

  • 2017.01.01 18:38  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • Seowon Jung jswlinux 2017.01.01 19:37 신고  댓글주소  수정/삭제

      안녕하세요 cestrum님,

      서버에서 메일 설정을 해두시면, 백업 성공 여부에 관계없이 내용을 요약해서 메일로 알림을 보내줍니다. 저희 서버 중 하나를 예로 올려드리자면 아래와 같습니다.

      02-Jan 02:04 modgud-dir JobId 34181: Start Backup JobId 34181, Job=T9_Backup.2017-01-02_02.00.07_26
      02-Jan 02:04 modgud-dir JobId 34181: Using Device "ZFS-1" to write.
      02-Jan 02:04 t9-master-fd JobId 34181: shell command: run ClientBeforeJob "mount -a"
      02-Jan 02:04 t9-master-fd JobId 34181: shell command: run ClientBeforeJob "sudo -u bacula cp -arf /srv/src/config /home/bacula/"
      02-Jan 02:04 modgud-dir JobId 34181: Sending Accurate information to the FD.
      02-Jan 02:10 keller-storage-00-sd JobId 34181: Elapsed time=00:00:11, Transfer rate=74.07 K Bytes/second
      02-Jan 02:10 keller-storage-00-sd JobId 34181: Sending spooled attrs to the Director. Despooling 9,190 bytes ...
      02-Jan 02:05 modgud-dir JobId 34181: Bacula Enterprise modgud-dir 8.4.7 (18Jan16):
      Build OS: x86_64-pc-linux-gnu-bacula-enterprise ubuntu 12.04
      JobId: 34181
      Job: T9_Backup.2017-01-02_02.00.07_26
      Backup Level: Incremental, since=2017-01-01 03:04:11
      Client: "T9" 8.4.7 (18Jan16) x86_64-pc-linux-gnu-bacula-enterprise,ubuntu,14.04
      FileSet: "T9 Backup FileSet" 2016-07-20 02:00:00
      Pool: "InstancesBackup" (From Job resource)
      Catalog: "PostgreSQL" (From Client resource)
      Storage: "FileStorage_1" (From Pool resource)
      Scheduled time: 02-Jan-2017 02:00:07
      Start time: 02-Jan-2017 02:04:56
      End time: 02-Jan-2017 02:05:08
      Elapsed time: 12 secs
      Priority: 10
      FD Files Written: 33
      SD Files Written: 33
      FD Bytes Written: 810,748 (810.7 KB)
      SD Bytes Written: 814,792 (814.7 KB)
      Rate: 67.6 KB/s
      Software Compression: None
      Comm Line Compression: 78.5% 4.6:1
      Snapshot/VSS: no
      Encryption: no
      Accurate: yes
      Volume name(s): InstancesBackup-0248
      Volume Session Id: 565
      Volume Session Time: 1482279256
      Last Volume Bytes: 24,680,162,867 (24.68 GB)
      Non-fatal FD errors: 0
      SD Errors: 0
      FD termination status: OK
      SD termination status: OK
      Termination: Backup OK

      02-Jan 02:05 modgud-dir JobId 34181: Begin pruning Jobs older than 1 month .
      02-Jan 02:05 modgud-dir JobId 34181: No Jobs found to prune.
      02-Jan 02:05 modgud-dir JobId 34181: Begin pruning Files.
      02-Jan 02:05 modgud-dir JobId 34181: No Files found to prune.
      02-Jan 02:05 modgud-dir JobId 34181: End auto prune.

      02-Jan 02:05 modgud-dir JobId 34181: shell command: run AfterJob "rm -rf /home/bacula/config"


      방문 감사합니다.

  • 2017.01.03 16:15  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • Seowon Jung jswlinux 2017.01.03 23:45 신고  댓글주소  수정/삭제

      일단, LTO-5,6,7 등의 장비를 쓰실 때, 장비 자체에서 zip 압축기능을 제공하면 바큘라에서는 압축옵션을 끄셔도 되시고, 그렇지 않으면 압축 때문이 리소스 부하가 크게 생기진 않습니다. 보통 리눅스 배포판마다 기본적으로 탑재되서 나오는 libzip 라이브러리를 이용하기 때문에 그렇기도 하구요, 사실 제 경험상 압축보다는 데이터가 전송되면서 백업되는 과정의 모든 데이터를 SSL로 암호화할 때 오히려 더 부하가 많이 걸렸습니다. 그래서 저도 일단 peer간 verification시에만 TLS를 키고, 이외에는 따로 암호화하지 않습니다.

      바큘라가 사실 처음 초기 세팅은 좀 어렵습니다. 아무래도 수십 수백대의 클라이언트 백업 설정을 단 몇 개의 설정파일 안에 전부 다 때려넣어야해서 처음에는 좀 어려운데요, 한 번 이해하고나시면 이후로는 백업에 아예 신경을 안써도 될 정도입니다. 저도 매일 출근해서 바큘라가 보내주는 이메일의 제목 중 맨앞의 Bacula - OK 이거 하나만 확인하면 내용을 아예 안볼 정도입니다. 그나마도 제목보는 것마저 귀찮아서, 제 모니터링 시스템에서 OK가 아니면 따로 색깔을 표시해주는 간단한 스크립트를 짜서 볼 정도니, 바큘라가 시스템 관리자에게 굉장히 큰 도움이 되는 것 같습니다.

      다만, 바큘라를 도입하시기 전에, 바큘라를 이용한 백업/복원이야 원래 잘되고 쉬운 편이라 이것보다는, 비상시, 즉 바큘라 DIR 서버와 통신이 안되는 상태나 SD 서버가 죽어있는 상황을 가정해서 백업 데이터를 가져와 RAW로 수동복구를 연습해보시길 권해드립니다. 바큘라가 평상시에 문제없고 잘 돌아갈 때는 아예 신경조차 안써도 될 정도로 편하지만, 문제가 터지면 반대로 바큘라의 작동방식에 대해서 아주 잘 이해하고 있어야만 대처가 가능합니다.

      또 질문 있으시면 댓글 남겨주세요.
      방문 감사합니다.

  • cestrum 2017.01.04 02:12  댓글주소  수정/삭제  댓글쓰기

    아 정말 친절한 답변 감사합니다 ㅠㅜ.....
    이렇게까지 세세하게 답변 주실지는 정말 몰랐네여......

    일단 도입할때 다시 삽질을 수십번 하겠지만 그래도 한번 스트럭쳐를 잡고 시작할 수 있으니
    이렇게 도움이 될지 몰랐네여 정말 몇번이고 감사하다고 말씀드릴수 밖에 없네여!!