自宅環境のバックアップにBaculaを導入
今まで自宅環境のバックアップは
でやっていました。
バックアップにssh(1)を使うのは小学生までという記事を見つけ、
いつも「もっといいやり方は無いものか?」と思っていたので
勉強がてらやってみることに。
個人的には対応するOSがとても多かったのが非常にポイント高かったです。
以下、自分的なまとめ。
Baculaとは?
ネットワーク越しにUnix系OSからWindowsまで
バックアップ出来るソフトウェア。バックアップ対象の
サーバ、データ保管サーバ、管理・制御サーバの
3つで連携しバックアップを行います。
バックアップの対象
- 自宅サーバー (Fedora10)
- Thinkpad(Windows Vista)
- デスクトップ (WindowsXP)
ダウンロード
yumだと2.4.4と古かったので3.0.1を直接DLしました。(2009/06/06現在)
% wget http://ncu.dl.sourceforge.net/sourceforge/bacula/bacula-3.0.1.tar.gz
インストール
その後、通常通りmakeしてmake installします。
Baculaではカタログとよばれるものでデータを管理するので、
DBが必要になります。今回はMySQLを利用しましたので、
以下のRPMに含まれるヘッダファイルが必要となります。
- mysql-devel
- libz-devel
% sudo yum install mysql-devel libz-devel
また、利用するDBを指定します。(今回はMySQLを利用しました)
利用できるのは以下の3種類。
実行したconfigureオプション (MySQL使用)
% ./configure \ --prefix=/path/to/bacula-3.0.1 \ --with-mysql \ <= 利用するDBを指定 --with-db-name=<DB名> \ --with-db-user=<ユーザー名> \ % make % make install
これでとりあえず完了です。次にMySQLの設定。
DB設定
インストールしたPREFIX以下のetcディレクトリに、
初期化用スクリプトがあるのでそれぞれ実行します。
% sudo PREFIX/etc/create_bacula_database % sudo PREFIX/etc/grant_bacula_privileges % sudo PREFIX/etc/make_bacula_tables
DB、ユーザー、テーブルを作ります。
コマンドでいうと以下の感じ。
mysql> CREATE DATABASE bacula; mysql> USE mysql mysql> GRANT ALL PRIVILEGES ON bacula.* TO bacula@LOCALHOST; mysql> GRANT ALL PRIVILEGES ON bacula.* TO bacula@"%"; mysql> FLUSH PRIVILEGES;
そのまま実行するとセキュリティ的にひどいので、
4行目を以下の用に変更しました。
mysql> GRANT ALL PRIVILEGES ON bacula.* TO bacula@"%";
を
mysql> GRANT ALL PRIVILEGES ON bacula.* TO bacula@"192.168.1.0/24"
としました。192.168.1.0/24は自宅ネットワークのセグメントなので、
こちらも適宜あわせてみて下さい。
テーブルは長すぎるので割愛します。
起動設定
PREFIX/etc ディレクトリに、各デーモンに
対応したスクリプトがあります。
bacula-ctl-dir | ディレクターデーモン |
---|---|
bacula-ctl-fd | ファイル(クライアント)デーモン |
bacula-ctl-sd | ストレージデーモン |
これを/etc/init.d以下に置きます。yumで入れた場合は
既に置いてあるのかな?
% sudo ln -sf PREFIX/etc/bacula-ctl-{dir,fd,sd} /etc/init.d
chkconfigで起動する用コメントを追加します
% sudo vim /etc/init.d/bacula-ctl-dir
# chkconfig: - 80 20
初回起動設定
% sudo chkconfig bacula-ctl-dir on
何かあった時は
PREFIX/var/bacula/working/log
に色々出ています
ディレクター設定ファイル
これは実際の設定を次回掲載します。
公式サイトのマニュアルが非常に充実しているので
参考にして下さい。
正常接続
Baculaデーモンを起動したあと、ディレクターデーモンに
接続します。
% sudo PREFIX/etc/bconsole Connecting to Director guinness:9101 1000 OK: guinness-dir Version: 3.0.1 (30 April 2009) Enter a period to cancel a command. *
ディレクタデーモン状態を確認します。
guinness-dirはディレクター名ですので、適宜読み替えて下さい。
* status dir guinness-dir Version: 3.0.1 (30 April 2009) i686-pc-linux-gnu redhat Daemon started 08- 62009 00:55, 0 Jobs run since started. Heap: heap=147,456 smbytes=39,619 max_bytes=40,172 bufs=168 max_bufs=176 Scheduled Jobs: Level Type Pri Scheduled Name Volume =================================================================================== Incremental Backup 10 08- 62009 04:25 Client1 *unknown* Running Jobs: Console connected at 08- 62009 01:01 No Jobs running. No Terminated Jobs.
次にストレージデーモンの状態確認です。
* status storage Automatically selected Storage: File Connecting to Storage daemon File at guinness:9103 guinness-sd Version: 3.0.1 (30 April 2009) i686-pc-linux-gnu redhat Daemon started 08- 62009 00:23, 0 Jobs run since started. Heap: heap=118,784 smbytes=11,534 max_bytes=74,689 bufs=51 max_bufs=53 Sizes: boffset_t=8 size_t=4 int32_t=4 int64_t=8 Running Jobs: No Jobs running. Jobs waiting to reserve a drive: Terminated Jobs: Device status: Device "FileStorage" (/mnt/exhdd/bacula) is not open. Used Volume status:
同様にファイルデーモンの状態を確認します。
* status client Automatically selected Client: guinness-fd Connecting to Client guinness-fd at guinness:9102 guinness-fd Version: 3.0.1 (30 April 2009) i686-pc-linux-gnu redhat Daemon started 08- 62009 00:23, 0 Jobs run since started. Heap: heap=0 smbytes=8,724 max_bytes=8,846 bufs=44 max_bufs=45 Sizeof: boffset_t=8 size_t=4 debug=0 trace=0 Running Jobs: Director connected at: 08- 62009 01:04 No Jobs running. Terminated Jobs:
ここまでで、すこしハマった箇所をメモ。
- ストレージ、ファイルデーモンともSdAddress、FdAddressがないと駄目でした。
- Pool Type は Backupのみで他は未実装。
バックアップ実行
ここで手動で初回バックアップします。
先ほどと同様にbconsoleからログインします。
* run Automatically selected Catalog: MyCatalog Using Catalog "MyCatalog" A job name must be specified. Automatically selected Job: Client1 Run Backup job JobName: Client1 Level: Incremental Client: guinness-fd FileSet: Full Set Pool: Default (From Job resource) Storage: File (From Job resource) When: 2009-06-08 01:05:10 Priority: 10 OK to run? (yes/mod/no):
カタログとジョブが1つしか無かったので、自動的に
選択されています。他にも接続するファイルデーモンや
Poolなどの設定が確認され、問題無ければyesをタイプします。
OK to run? (yes/mod/no): yes
Job queued. JobId=1
You have messages.
Jobの実行結果次第でメッセージが届きます。bconsole上で
messagesコマンドを打つと、メッセージを読むことができます。
リストア
これまで同様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: Cancel Select item: (1-12):
実行番号を探してどのジョブでリストアするか決定します。
通常は[5]で直近のバックアップから復旧させます。
Select item: (1-12): 5 Automatically selected Client: guinness-fd Automatically selected FileSet: Full Set +-------+-------+----------+----------------+---------------------+------------+ | JobId | Level | JobFiles | JobBytes | StartTime | VolumeName | +-------+-------+----------+----------------+---------------------+------------+ | 2 | F | 131,808 | 27,191,517,448 | 2009-06-08 04:54:51 | Full-0002 | +-------+-------+----------+----------------+---------------------+------------+ You have selected the following JobId: 2 Building directory tree for JobId(s) 2 ... ++++++++++++++++++++++++++++++++++++++++++++ 116,679 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: / $
ここで、バックアップしたファイル群にコンソールから
移動できるので、リストアしたいファイルを指定します。
cdコマンドでディレクトリを移動し、markコマンドで指定します。
指定が終わったら、doneコマンドでリストアが実行されます。
$ cd /home/yuki/www cwd is: /home/yuki/www/ $ ls wiki/ $ mark * 888 files marked. $ done Bootstrap records written to /path/to/bacula-3.0.1/var/bacula/working/guinness-dir.restore.1.bsr The job will require the following Volume(s) Storage(s) SD Device(s) =========================================================================== Full-0002 File FileStorage 888 files selected to be restored. Run Restore job JobName: NormalRestoreFiles Bootstrap: /path/to/bacula-3.0.1/var/bacula/working/guinness-dir.restore.1.bsr Where: /bacula-restores Replace: always FileSet: Full Set Backup Client: guinness-fd Restore Client: guinness-fd Storage: File When: 2009-06-08 12:25:03 Catalog: MyCatalog Priority: 10 Plugin Options: *None* OK to run? (yes/mod/no):yes Job queued. JobId=3 *
以上でざっとした流れは以上です。
ディレクターデーモンなど設定に関しては次回公開します。