社内サーバーバックアップ作戦/
Amandaによるバックアップ入門
株式会社びぎねっと
大内 明
本日のアジェンダ
• バックアップとは
• びぎねっと社内サーバーについて
• Amandaの紹介
• Amandaのインストールと設定
• Amandaバックアップのリストア
バックアップとは
• データの複製を作って保管しておき、
トラブル時に復旧できるよう備えること
– 間違えて削除してしまった
– HDDが死亡した
– 地震雷火事親父などによって物理的に壊れた
バックアップの手段
• バックアップメディア
– CD/DVD
– ハードディスク
• 1TBが1万円切ってる
– USBメモリ, SSD
– テープ
• DDS: 容量少なめ・遅い
• Ultrium: 大容量・高速
バックアップの手段
• ソフトウェア
– Windows: 標準のバックアップ
– Mac: Time Machine
– Linux: tar(?), Amanda
– Acronics True Imageみたいな市販製品
バックアップしてますか?
• 個人では今年ぐらいから取るようになった
– 自宅Windows機: 標準のバックアップツール
– Mac: Time Machine (外付けHDD使用)
• 自宅サーバー破壊事件
– バックアップしておらず……。
– rm –rf *をルートディレクトリで実行
– ブログを1つ破損
社内サーバーのそれまで
• 初代サーバー「sebone」(自作機)
– RAIDを組む程度
• 2代目サーバー「sebone2」(HP ML110)
– Xenで仮想化
• 仮想化の会社もやってるし、自社にも導入しないと
– やはりRAIDを組む程度
– 「バックアップ取りたいね」とは思っていた
社内サーバーのそれまで
• 3代目サーバー「orange」(HP ML350)
– 業務拡大?によるサーバーの高性能化
– HDDの大容量化(1TB)
– 電源の冗長化
– RAID設定
– バックアップを意識してテープドライブ装備
• しかし「バックアップ取らないとね」と言うだけ
• やるやる詐欺
1ヶ月(?)後……
• 仕事が片付いて暇だった
• ちょうど自宅サーバーを壊した後だった
• 実は社内サーバーもrmコマンドで破壊しか
けたことがある。
バックアップやろうぜ!
どうやってバックアップするの?
• 技術部長「まぁ、Amandaでいいじゃない。」
– 有名らしい
– 簡単らしい
– →じゃあそれで!
• …ただし、日本語資料は少なかった。
– ググっても5, 6件しかない。本当に有名なの?
– オライリーのバックアップ本が判りやすかった
Amandaとは
• The Advanced Maryland Automatic
Network Disk Archiver の略。
• メリーランド大学で開発されたパブリックドメ
インのバックアップユーティリティ
• 2008年12月現在の最新版は2.6.0p2
– CentOSでyumを使った場合は2.5.0p2が最新
Amandaの特徴
• 複数マシンのデータを1台のバックアップド
ライブでバックアップする
– クライアントソフトを使用してデータを吸い出す
方式
– 1台のみでの利用も、もちろん可能
– Sambaを利用してWindowsマシンのデータを
バックアップすることも可能らしい
• テープバックアップに最適化
– HDD等にもバックアップ可能らしい
社内サーバーの構成
• マシン: HP ML350 G5 (ヤフオクで購入)
• ストレージ(HP SmartArray E200i)
– OS用: 80GB SATA*2 (RAID1+0)
– 共有スペース: 1TB SATA*2 (RAID1+0)
– Amanda用: 250GB SATA*2 (RAID1+0)
• テープドライブ: HP StorageWorks 960
– Ultrium-3で高速・大容量(400GB/800GB)
– テープも含めてヤフオクで購入
社内サーバーの構成
• OS: CentOS 5.2 + Xen
• 仮想マシンが5台稼働
– ファイルサーバー
– 社内Webサーバー
– svnサーバー
– vpnサーバー
– pxeサーバー
バックアップ計画
• バックアップするもの
– Dom0(Xenの管理OS)の/etc
– ファイルサーバーの共有部分と、/etc
– 社内WebサーバーのWebデータ
• バックアップサイクル
– 平日(月 金)の25:00にフルバックアップ
– 土日はバックアップしない
• 会社がお休み。
• 平日祝日のバックアップどうしよう?
Amanda導入の流れ
• インストール
• 設定
– サーバー(バックアップ処理を実行するマシン)
– クライアント(バックアップ対象のマシン)
• テープの用意
• 設定確認
• バックアップ実行
インストール
(サーバー側)
インストール先
: Dom0
• yumでインストール
– # yum –y install amanda-server
• xinetdの設定(disable=noに変更)
– /etc/xinetd.d/amanda (Amandaサーバ)
– /etc/xinetd.d/amandaidx (リストア時に使用)
– /etc/xinetd.d/amidxtape (リストア時に使用)
• xinetdを再起動
インストール
(クライアント側)
インストール先
:
Dom0, ファイルサーバー, Webサーバー
• yumでインストール
hostsの設定
• Amamdaはhosts設定重要
– ホスト名を使用して通信するため
• 弊社での設定例
# Dom0
192.168.100.8 orange.office.begi.net orange
# File Server
192.168.100.10 sebone3.office.begi.net sebone3
# Web Server
192.168.100.13 ginjiro.office.begi.net ginjiro
Amandaの各種設定、の前に
• Amandaの設定ファイルは、amandaユーザ
になってから編集する
– # su amanda
• 設定を行うのは次の2つのディレクトリ
– /etc/amanda/
– /var/lib/amanda
amandahostsの設定
• /var/lib/amanda/.amandahostsを編集
– FQDN名とバックアップユーザ名を指定
• サーバー側
• クライアント側
orange.office.begi.net amanda # バックアップ用
orange.office.begi.net root
# リストア用
sebone3.office.begi.net amanda
sebone3.office.begi.net root
ginjiro.office.begi.net amanda
ginjiro.office.begi.net root
orange.office.begi.net amanda
バックアップの設定準備
• /etc/amanda/DailySet1をバックアップする
– 設定ミスに備えるため
– $ cd /etc/amanda
$ cp –a DailySet1 DailySet1.original
• DailySet1ディレクトリに入り、tapelistファイ
ルを作成
– $ cd DailySet1
amanda.confの設定(1/7)
• バックアップに関する基本的な設定を行う
– バックアップのサイクル
– テープドライブのパス
– テープドライブの種類
– ホールドディスク
– バックアップ対象ディレクトリの設定
• サンプルは設定項目が多いが、
大体はデフォルト設定のままで良い
amanda.confの設定(2/7)
• org “DailySet1”
– 設定名。ディレクトリ名と同じ名前にする。
• mailto “[email protected]”
– 通知メールの送信先を指定する。
• dumpuser “amanda”
– バックアップユーザーを指定。変更しない
• netusage 100000Kbps
– バックアップ時の転送速度の指定。誰もいない夜間に
バックアップするので、帯域は適当に大きくとった。
org DailySet1
# your organization name for reports
mailto "[email protected]
# space separated list of operators ..
dumpuser "amanda"
# the user to run dumps under
amanda.confの設定(3/7)
• 月 金にフルバックアップする例
• dumpcycle 0 weeks
– フルバックアップのサイクルを指定
• runspercycle 0 days
– 差分バックアップのサイクルを指定
• tapecycle 5tapes
– 1サイクルあたりに使用するテープの本数
dumpcycle 0 weeks
# the number of days in the normal ...
runspercycle 0 days # the number of amdump runs in dumpcycle..
tapecycle 5 tapes
# the number of tapes in rotation...
バックアップサイクル
• 差分バックアップも可能
• 1週間に1回フルバックアップして、
次のフルバックアップまでの間に
3回差分バックアップを取る例
• 現在研究中
• Amandaの設定で一番難しいポイント
dumpcycle 1 weeks
# the number of days in the normal ...
runspercycle 4 days # the number of amdump runs in dumpcycle..
tapecycle 5 tapes
# the number of tapes in rotation...
amanda.confの設定(4/7)
• tapetype: テープドライブの種類
– 次のページでドライブの設定を探して
設定ファイルの最後に書き加える
http://wiki.zmanda.com/index.php/
Tapetype_definitions
• labelstr: テープの命名規則
– 正規表現が使用可能。
– DailySet1-01, DailySet1-02 ...のようになる。
tapetype HP-Ultrium-960
# what kind of tape it is ...
labelstr ^DailySet1-[0-9][0-9]*$" # label constraint regex: ...
amanda.confの設定(5/7)
• 保持ディスクの設定
– 各クライアントから集めたダンプデータを置く場所
• directory
– /dunpsを作成して250GBのAmanda用ディスクにマウント
– /dumps/amandaディレクトリを作成(所有者をamandaユーザーに)
• use: 200GBを確保。「-50000 Mb」を指定しても大体同じ
• chunksize: 2GB以上のファイルを扱えないOSでは2GBに設
定する。そうでなければ大きめにとる。
holdingdisk hd1 {
comment main holding disk
# コメント
directory /dumps/amanda
# 保持ディスクの場所
use 200000 Mb
# 保持ディスクとして利用できる容量
chunksize 100Gb
# チャンクサイズ
amanda.confの設定(6/7)
• infofile
– バックアップのデータベースを格納するディレクトリ。
– 特に変更しない。ディレクトリを作成する必要はない。
• logdir
– ログを格納するディレクトリ。
• indexdir
– インデックスを格納するディレクトリ
– 特に変更しない。ディレクトリを作成する必要はない。
infofile "/etc/amanda/DailySet1/curinfo"
# database DIRECTORY
logdir "/etc/amanda/DailySet1"
# log directory
amanda.confの設定(7/7)
• バックアップ方法(dumptype)の設定
– define dumptype global設定のindex yesのコメントアウトを削除す
る
(リストア時に必要になる)
• グローバル設定の下に、それぞれのバックアップ方法の設
定が記述されている
– この中にある設定を、disklistファイルで指定する。
define dumptype global {
comment "Global definitions
(略)
index yes # コメントアウトを外す
(略)
disklistの設定
• バックアップを取る場所の指定
• バックアップ方法(dumptype)の指定
#書式
# <ホスト名> <パス> <dumptype>
# ファイルサーバー
sebone3.office.begi.net /etc comp-user-tar
# 設定ファイル
sebone3.office.begi.net /home comp-user-tar-sebone # 共有部分
# 社内WebサーバーのWebデータ部分
ginjiro.office.begi.net /var/www/html comp-user-tar
# Dom0で利用しているAsteriskの設定データ
使用した
dumptype(1/2)
• comp-user-tar
• comp-user-tar-sebone (ファイル共有部分用)
define dumptype comp-user-tar {
user-tar
# user-tarの設定を読み込み
compress client fast
# クライアント側で高速圧縮をかける
}
define dumptype comp-user-tar-sebone {
user-tar
compress client fast
exclude ./diskimage
# LinuxなどのISOイメージを排除している
}
使用した
dumptype(2/2)
• user-tar-compで読み込んだ設定
define dumptype user-tar {
root-tar
# root-tarの設定を読み込む
comment "user partitions dumped with tar"
priority medium
# 優先度は中
}
define dumptype root-tar {
global
program GNUTAR
# GNU TARを使用
comment "root partitions dumped with tar"
compress none
# 圧縮しない
index
# ?
# exclude list /etc/amanda/exclude.gtar
# 除外のサンプルらしい
priority low
# 優先度は低
テープの準備
• ラベルを書き込む
– $ amlabel –f <設定名> <ラベル名>
– -fは強制でラベルを設定するという意味
– ラベル番号は1から始まる(0ではない)
$ amlabel -f DailySet1 DailySet1-01
changer: got exit: 0 str: 3 /dev/nst0
labeling tape in slot 3 (/dev/nst0):
rewinding, reading label, not an amanda tape (Cannot allocate
memory)
設定の確認
• amcheckコマンドを実行
– $ amcheck DailySet1
• エラーが無ければ準備完了!
• エラーがあったら、設定を見直す
– hosts, .amandahostsの設定
– amanda.confの設定
– ファイヤーウォールが設定されていれば、ポー
ト解放
(10080/udp, 10082/tcp, 10083/tcp)
設定の確認
(実行例)
$ amcheck DailySet1
Amanda Tape Server Host Check
---
Holding disk /dumps/amanda: 227924984 KB disk space available, that's
plenty
slot 16: read label `DailySet1-01', date `X'
NOTE: skipping tape-writable test
Tape DailySet1-01 label ok
Server check took 0.277 seconds
Amanda Backup Client Hosts Check
---
Client check: 3 hosts checked in 0.051 seconds,
0 problems found
バックアップの実行
• amandaユーザーでamdumpコマンドを実行
– $ amdump DailySet1
• バックアップ中のステータスは、amstatusコ
マンドで確認可能
– $ amstatus DailySet1
– ダンプの進行状況などが確認できる
• バックアップが完了するとメールが送信さ
れる
バックアップ完了通知メール
These dumps were to tape DailySet1-01.The next tape Amanda expects to use is: DailySet1-02. STATISTICS:
Total Full Incr. --- --- --- Estimate Time (hrs:min) 0:00
Run Time (hrs:min) 1:38
Dump Time (hrs:min) 1:24 1:24 0:00 Output Size (meg) 44362.8 44362.8 0.0 Original Size (meg) 51459.5 51459.5 0.0 Avg Compressed Size (%) 86.2 86.2 -- Filesystems Dumped 4 4 0 Avg Dump Rate (k/s) 9046.3 9046.3 -- Tape Time (hrs:min) 0:13 0:13 0:00 Tape Size (meg) 44363.0 44363.0 0.0 Tape Used (%) 11.5 11.5 0.0 Filesystems Taped 4 4 0
バックアップ完了通知メール
Chunks Taped 0 0 0Avg Tp Write Rate (k/s) 59898.7 59898.7 -- USAGE BY TAPE:
Label Time Size % Nb Nc DailySet1-01 0:13 45427680K 11.5 4 0 NOTES:
taper: tape DailySet1-01 kb 45427680 fm 4 [OK] DUMP SUMMARY:
DUMPER STATS TAPER STATS HOSTNAME DISK L ORIG-KB OUT-KB COMP% MMM:SS KB/s MMM:SS KB/s --- --- --- ginjiro.offi -r/www/html 0 24420 17696 72.5 0:07 2406.0 0:04 4998.7 orange.offic /etc 0 420 160 38.1 0:00 316.7 0:02 71.9 sebone3.offi /etc 0 104780 14560 13.9 0:11 1305.7 0:05 3125.4 sebone3.offi /home 0 52564872 45395264 86.4 83:23 9073.9 12:28 60690.1 (brought to you by Amanda version 2.5.0p2)
cronにジョブ登録
• /etc/amanda/crontab.sampleを参考にする
• 今回の設定
– 月曜日 金曜日の17時にテープチェック
• amcheck –mは、エラー時にメールを送信する
– 月曜日 金曜日の25時にバックアップ実行
• amandaユーザーで「crontab –e」コマンドを
実行して、
cron設定を記述する
0 17 * * 1-5 /usr/sbin/amcheck -m DailySet1
0 1 * * 2-6 /usr/sbin/amdump DailySet1
リストア
• リストアするまでがバックアップです。
– 「家に着くまでが遠足です」
• おおよそ3種類のリストア方法
– Amandaのバックアップデータベースを利用
• amrecoverによるリストア
• amrestoreによるリストア
– Amandaを利用しないリストア
• ddコマンド
バックアップデータベース
• 設定ファイルのディレクトリ下に配置される
• データベースが壊れると、amandaのリストア
コマンドが使えないらしい
– ちょっと面倒
• データベースのバックアップも重要!
– テープではなく別のサーバーなどにコピーする
• テープの場合、最新の1つ前のデータベースが
バックアップされるため
amrecoverによるリストア
• 対話式のリストアツール
• バックアップデータベースを利用
• ファイル毎のリストアが可能
• リストアするデータの日付・パス、展開先を
指定するだけ
• リストアに必要なテープを指示通りに入れる
と自動的にリストアしてくれる
amrecoverによるリストア
• データをリストアしたいクライアント上の
rootユーザーでamrecoverコマンドを実行
– -s : バックアップサーバー
– -t : テープドライブのあるサーバー
• 大体は-sで指定するサーバーと同じ
– -C : 設定名
amrecoverによるリストア演習
• 社内Webの画像をリストアしてみる
– 弊社相談役・旭山銀次郎のイラスト(絵:私)
– 社内Webの入口はこんな感じ
• とりあえずrmで削除
– ……ではなく、失敗したと時の
ために、
mvでリネーム
amrecoverによるリストア演習
• Webサーバーの端末からamrecoverを実行
– rootユーザーでOK
# amrecover -s orange -t orange -C DailySet1
AMRECOVER Version 2.5.0p2. Contacting server on orange ...
220 orange AMANDA index server (2.5.0p2) ready.
200 Access OK
Setting restore date to today (2008-11-12)
200 Working date set to 2008-11-12.
Scanning /dumps/amanda...
200 Config set to DailySet1.
200 Dump host set to ginjiro.office.begi.net.
Trying disk / ...
Trying disk rootfs ...
Can't determine disk and mount point from $CWD '/root'
amrecover>
amrecoverによるリストア演習
• バックアップされているディスクを確認して
マウントする
amrecover> listdisk
← ディスクの確認
200- List of disk for host ginjiro.office.begi.net
201- /var/www/html
200 List of disk for host ginjiro.office.begi.net
amrecover> setdisk /var/www/html
← マウント
200 Disk set to /var/www/html.
amrecover> ls
← バックアップ中の/var/www/htmlの一覧を表示
2008-11-12 wiki/
2008-11-12 top.png
← リストアしたいファイル
(略)
2008-11-12 .
amrecover>
amrecoverによるリストア演習
• 対象のファイルをリストア対象に追加する
• データのリストア先を指定する
amrecover> add top.png
Added /top.png
amrecover>
amrecover> lpwd
← Local側のpwdみたいな意味らしい
/root
amrecover> lcd /var/www/html
← Local側のcdみたいな意味らしい
amrecover>
amrecoverによるリストア演習
• リストアの実行
amrecover> extract
Extracting files using tape drive null: on host orange.
The following tapes are needed: DailySet1-02
Restoring files into directory /var/www/html
Continue [?/Y/n]? Y
← /var/www/htmlに展開して良いですか
Extracting files using tape drive null: on host orange.
Load tape DailySet1-02 now
Continue [?/Y/n/s/t]? Y
← DailySet1-02 をセットしてYを入力
./top.png
← 展開されると出力される
amrecoverによるリストア演習
• リストアの確認
• 大成功!
amrecover> exit
200 Good bye.
# ls /var/www/html
blog files index.php style.css top.png.orig
enter.gif geekowiki screenshot top.png wiki
感動する
* + 巛 ヽ 〒 ! + 。 + 。 * 。 + 。 | | * + / / イヤッッホォォォオオォオウ! ∧_∧ / / (´∀` / / + 。 + 。 * 。 ,- f / ュヘ | * + 。 + 。 + 〈_} ) | / ! + 。 + + * ./ ,ヘ | ガタン ||| j / | | ||| ̶̶̶̶̶̶̶̶̶̶̶̶amrestoreによるリストア
• ディスク単位のリストアツール
– disklistで指定したバックアップ対象ごと
• バックアップデータベースを利用
• 確認作業などはamandaユーザーで実行
• リストアはrootユーザーで実行
amrestoreによるリストア演習
• 現在のファイルサーバーのバックアップ状
況を調べる
-bash-3.2$ /usr/sbin/amadmin DailySet1 find Scanning /dumps/amanda...
Scanning /dumps/amanda...
date host disk lv tape or file file part status 2008-11-06 sebone3.office.begi.net /etc 0 DailySet1-03 2 -- OK 2008-11-07 sebone3.office.begi.net /etc 0 DailySet1-04 2 -- OK 2008-11-08 sebone3.office.begi.net /etc 0 DailySet1-05 2 -- OK 2008-11-11 sebone3.office.begi.net /etc 0 DailySet1-01 3 -- OK 2008-11-12 sebone3.office.begi.net /etc 0 DailySet1-02 3 -- OK 2008-11-06 sebone3.office.begi.net /home 0 DailySet1-03 4 -- OK 2008-11-07 sebone3.office.begi.net /home 0 DailySet1-04 4 -- OK
: (略)
amrestoreによるリストア演習
• 11/06にバックアップしたファイルサーバー
の
/etcをリストアしてみる
– /root/testを作業ディレクトリとした
# amrestore /dev/nst0 sebone3 /etc ←amrestore テープドライブ ホスト名 パス amrestore: missing file header block
amrestore: WARNING: not at start of tape, file numbers will be offset amrestore: 1: skipping orange.office.begi.net._etc_asterisk.20081106.0 amrestore: 2: restoring sebone3.office.begi.net._etc.20081106.0
amrestore: 3: skipping ginjiro.office.begi.net._var_www_html.20081106.0 amrestore: 4: skipping sebone3.office.begi.net._home.20081106.0
amrestore: 5: reached end of tape: date 20081106 # ls
amrestoreによるリストア演習
• sebone3.office.begi.net._etc.20081106.0の
正体は
tarファイル
• 大成功!
# tar xvf sebone3.office.begi.net._etc.20081106.0 ←展開 ./ ./NetworkManager/ ./X11/ ./X11/applnk/ (略) # ls ←確認してみるDIR_COLORS hosts protocols
DIR_COLORS.xterm hosts.allow quotagrpadmins (略)
感動する
* + 巛 ヽ 〒 ! + 。 + 。 * 。 + 。 | | * + / / イヤッッホォォォオオォオウ! ∧_∧ / / (´∀` / / + 。 + 。 * 。 ,- f / ュヘ | * + 。 + 。 + 〈_} ) | / ! + 。 + + * ./ ,ヘ | ガタン ||| j / | | ||| ̶̶̶̶̶̶̶̶̶̶̶̶Amandaを利用しないリストア
• 障害などによってバックアップデータベース
が壊れたときに覚えておくべき方法
• Amandaのテープフォーマットはシンプル
– 各イメージの先頭32KBにイメージの情報
– それ以降にイメージが格納されている
• mtコマンドとddコマンドでテープから取りだ
しが可能
……のはず
– ここはスライドを作りながら練習中(!)
Amandaを使わないリストア演習
• テープの中身のイメージ
• テープのヘッダを表示
# mt ‒f /dev/st0 rewind
# dd if=/dev/nst0 bs=32k count=1
←テープ先頭から32KB分読み込む
AMANDA: TAPESTART DATE 20081106 TAPE sebone-03
014
1+0 records in
1+0 records out
32768 bytes (33 kB) copied, 0.081231 seconds, 403 kB/s
# dd if=/dev/nst0 bs=32k
←よくわからないなにかを読み飛ばす
テープの ヘッダ(32KB) よくわから ないなにか イメージ1の ヘッダ(32KB) イメージ1 イメージ2の ヘッダ(32KB) イメージ2 つづく……Amandaを使わないリストア演習
• テープの中身のイメージ
• イメージ1のリストア
# dd if=/dev/nst0 bs=32k count=1
← ヘッダの取りだし
AMANDA: FILE 20081106 orange.office.begi.net /etc lev 0 comp .gz
program /bin/tar
← Dom0の/etcらしい
To restore, position tape at start of file and run:
dd if=<tape> bs=32k skip=1 | /bin/gzip -dc | /bin/tar -f... ‒
(ddの出力結果略)
# dd if=/dev/nst0 of=1106-orange-etc bs=32k ← イメージ1の取りだし
# tar xf 1106-orange-etc
# ls
1106-orange-etc host.conf quotatab
DIR_COLORS hosts racoon
テープの ヘッダ(32KB) よくわから ないなにか イメージ1の ヘッダ(32KB) イメージ1 イメージ2の ヘッダ(32KB) イメージ2 つづく……