2026年5月30日

2026年5月30日

Amanda(バックアップソフト)の設定方法:仮想テープでサーバーを定期バックアップする

Amanda(Advanced Maryland Automatic Network Disk Archiver)は、1台のバックアップサーバーから複数のクライアントのファイルを定期的に集め、テープやディスク上の「仮想テープ」に世代管理しながら保存するオープンソースのバックアップソフトです。この記事では、Linux サーバー1台をバックアップサーバー、Web サーバー1台をクライアントとして、仮想テープ(ディスク)に毎晩バックアップを取り、ファイルを復元できるところまでの設定を説明します。設定ファイルの書き方だけでなく、動作確認のコマンドと、つまずきやすい認証まわりも扱います。

Amandaの構成と用語を先に押さえる

Amanda はサーバー・クライアント型です。バックアップサーバーで amdump を実行すると、サーバーが各クライアントの amandad に接続し、クライアント側で GNU tar などを使ってデータを作らせ、それを受け取って保存します。最初に次の用語を理解しておくと、設定ファイルが読みやすくなります。

  • 設定名(config):/etc/amanda/DailySet1/ のように、ディレクトリ単位で1つのバックアップ計画を表す。amdump や amcheck など多くのコマンドは、引数でこの設定名を受け取る
  • DLE(Disk List Entry):「どのホストの、どのディレクトリを、どの方式で」取るかの1行。disklist ファイルに書く
  • dumptype:圧縮・インデックス作成・認証方式などをまとめた設定のひな型。DLE から名前で参照する
  • テープ(ボリューム):保存先の単位。物理テープがなくても、ディレクトリをテープに見立てた「仮想テープ」で運用できる
  • ダンプサイクル:この期間内に各 DLE のフルバックアップを最低1回取る、という Amanda 独特の考え方

ダンプサイクルの考え方は重要です。Amanda は「毎週日曜にフル、ほかは増分」のような固定スケジュールではなく、指定した期間内にフルが1回は入るように、各 DLE のフルと増分の日をばらして自動で計画します。毎晩の転送量や保存量が平均化される一方、「今夜はどの DLE がフルになるか」は Amanda が決める、という点を前提に運用を組みます。

インストールとバックアップ用ユーザー

Debian や Ubuntu では、サーバーに amanda-server、クライアントに amanda-client パッケージを入れるのが一般的です。RHEL 系ではパッケージ名や提供されているリポジトリがバージョンによって異なり、標準リポジトリから外れている場合もあります。Amanda のコミュニティ版は 3.5 系が中心で、リリースの間隔は長めです(2026年10月現在)。導入前に、使っているディストリビューションでパッケージが提供・更新されているかを確認してください。

もう1つ確認したいのが、Amanda が動作するユーザー名です。Debian 系のパッケージでは backup、RHEL 系やソースからのビルドでは amandabackup になっていることが多く、以降の設定ファイルやコマンドでこのユーザー名を使います。

# どのユーザーで動く前提か確認する(Debian 系の例)
ls -ld /etc/amanda /var/lib/amanda
getent passwd backup amandabackup

Amanda のコマンドは root ではなく、このユーザーで実行します。root で実行すると、作られたファイルの所有者が変わって後の実行が失敗する原因になります。

サーバー側の設定(amanda.conf)

設定名を DailySet1 とし、/etc/amanda/DailySet1/amanda.conf を作ります。以下は仮想テープを使う最小限の例です。ユーザー名やパスは環境に合わせて書き換えてください。

org      "DailySet1"
mailto   "admin@example.com"
dumpuser "amandabackup"

dumpcycle    1 week
runspercycle 7
tapecycle    14 tapes

tpchanger "chg-disk:/var/lib/amanda/vtapes/DailySet1"
labelstr  "DailySet1-[0-9][0-9]*"
autolabel "DailySet1-%%" empty
tapetype  "DISKTAPE"

define tapetype DISKTAPE {
    length 50 gbytes
}

holdingdisk hd1 {
    directory "/var/lib/amanda/holding"
    use 20 gbytes
}

infofile "/var/lib/amanda/DailySet1/curinfo"
logdir   "/var/lib/amanda/DailySet1/log"
indexdir "/var/lib/amanda/DailySet1/index"

define dumptype gnutar-bsdtcp {
    program  "GNUTAR"
    compress client fast
    index    yes
    auth     "bsdtcp"
    comment  "GNU tar, client compression, bsdtcp auth"
}

主な項目の意味は次のとおりです。

  • dumpcycle 1 week と runspercycle 7:1週間に7回実行し、その間に各 DLE のフルを1回以上取る
  • tapecycle 14 tapes:14本の(仮想)テープを順に使い回す。ダンプサイクルの実行回数より多くしておくと、上書きされる前に1サイクル以上前の世代が残る
  • tpchanger "chg-disk:...":指定ディレクトリの下に slot1、slot2 のようなサブディレクトリを作り、それぞれを1本のテープとして扱う
  • autolabel:空のスロットに自動でラベルを付ける。%% の部分が連番に置き換わる
  • holdingdisk:クライアントから受け取ったデータを一時的に置く作業領域。複数クライアントを並行して取るときに効く

length は1本のテープに書ける量の上限です。仮想テープの場合、実際のディスク容量ではなく「1回の実行で書き込む上限」として働くので、フルが重なった日の量を見込んで決めます。保存先のディスク全体には、length × tapecycle 程度の容量が必要になる点にも注意してください。

ディレクトリは事前に作り、所有者を Amanda のユーザーにしておきます。

sudo mkdir -p /var/lib/amanda/vtapes/DailySet1/slot{1..14} \
  /var/lib/amanda/holding /var/lib/amanda/DailySet1/{curinfo,log,index}
sudo chown -R amandabackup:disk /var/lib/amanda

グループ名(disk など)はディストリビューションによって異なるので、/etc/amanda の既存の所有グループに合わせます。

対象を指定する(disklist)

同じディレクトリに disklist を作り、1行に1つの DLE を書きます。書式は「ホスト名 ディレクトリ dumptype」です。

web01.example.com  /var/www        gnutar-bsdtcp
web01.example.com  /etc            gnutar-bsdtcp
web01.example.com  /var/backups/db gnutar-bsdtcp

ホスト名は、サーバーから名前解決でき、クライアント側でも同じ名前で照合できるものを使います。ここが食い違うと、後述の認証で失敗します。

WordPress のサーバーを対象にする場合、データベースのファイルを tar で取っても整合性のある状態にはなりません。クライアント側で Amanda の実行時刻より前に mysqldump などでダンプを作り、そのダンプを置いたディレクトリ(上の例の /var/backups/db)を DLE に含めます。キャッシュなど再生成できるディレクトリは、dumptype に exclude list を足して除外すると容量を節約できます。

クライアント側の設定と認証

クライアントでは amandad がネットワークからの接続を受け付けます。bsdtcp 認証では TCP の 10080 番ポートを使い、パッケージによって xinetd か systemd のソケットで起動する設定が入っています。サーバーからこのポートに届くよう、ファイアウォールを開けておきます。

どのサーバーからの要求を受け付けるかは、Amanda のユーザーのホームディレクトリにある .amandahosts で決まります。

# クライアント(web01)の ~amandabackup/.amandahosts
backup.example.com amandabackup amdump

復元に使う amrecover は、クライアントからサーバーに接続します。そのため、サーバー側の .amandahosts にも、復元を実行するクライアントとユーザーを書きます。

# サーバー(backup)の ~amandabackup/.amandahosts
web01.example.com root amindexd amidxtaped

.amandahosts は所有者が Amanda のユーザーで、パーミッションが 600 でないと拒否されます。権限が緩いと、設定の中身が正しくても接続に失敗するので、つまずきやすいポイントです。

動作確認とラベル付け

設定が終わったら、サーバーで amcheck を実行します。設定ファイルの誤り、テープ(スロット)の状態、ホールディングディスクの空き、各クライアントへの接続を一度に確認できます。

sudo -u amandabackup amcheck DailySet1

autolabel を使っていれば、初回の実行時に空のスロットへラベルが付きます。手動で付ける場合は amlabel DailySet1 DailySet1-01 slot 1 のように実行します。

amcheck の結果で多いエラーと確認先は次のとおりです。

  • クライアントに接続できない:10080番ポートが開いているか、amandad が起動する設定になっているか、ホスト名の名前解決が双方で一致しているか
  • 認証で拒否される:.amandahosts のホスト名・ユーザー名・パーミッション
  • テープが見つからない:tpchanger のパスとスロットのディレクトリ、所有者

エラーが出なくなってから、手動で1回バックアップを実行します。

sudo -u amandabackup amdump DailySet1
sudo -u amandabackup amstatus DailySet1   # 実行中の進み具合
sudo -u amandabackup amreport DailySet1   # 直近の実行結果のレポート

mailto を設定していれば、amdump の終了後にレポートがメールで届きます。サーバーからメールが送れる状態かも合わせて確認してください。

定期実行の設定

Amanda のユーザーの crontab に、amcheck と amdump を登録します。amcheck -m は問題があったときだけメールを送るオプションで、夕方に実行しておくと、夜のバックアップ前に異常に気づけます。

# crontab -u amandabackup -e
0 16 * * 1-5 /usr/sbin/amcheck -m DailySet1
45 0 * * *   /usr/sbin/amdump DailySet1

コマンドのパスは環境によって異なるので command -v amdump で確認します。クライアント側のデータベースのダンプは、この amdump の時刻より前に終わるように組みます。

ファイルを復元する

特定のファイルを戻すときは、クライアント側で root として amrecover を使います。対話形式で、ホスト・ディレクトリ・日付を選んでから、取り出すファイルを指定します。

# web01 で root として実行(復元先のディレクトリに移動してから)
cd /tmp/restore-test
amrecover -C DailySet1 -s backup.example.com -t backup.example.com

amrecover> sethost web01.example.com
amrecover> setdisk /var/www
amrecover> setdate 2026-10-15
amrecover> ls
amrecover> add example.com/wp-config.php
amrecover> extract

extract を実行すると、カレントディレクトリにファイルが展開されます。本番のディレクトリで直接実行すると既存のファイルを上書きするおそれがあるため、一時ディレクトリに展開してから中身を確認し、必要なものだけを戻す方が安全です。どの日のバックアップがどのテープにあるかは、サーバーで amadmin DailySet1 find web01.example.com /var/www を実行すると一覧できます。

バックアップは「戻せること」を確認して初めて意味があります。導入直後と、その後も定期的に、別のディレクトリやテスト用のサーバーへ復元する練習をしておいてください。

運用で気をつけること

  • 仮想テープがバックアップサーバーの同じディスクにあると、そのサーバーの故障で全世代を失う。別のディスクや、外部ストレージへの複製を組み合わせる
  • Amanda には暗号化の仕組みもあるが、設定方法はバージョンで異なる。保存先が外部にある場合は暗号化の方式を公式のドキュメントで確認する
  • amreport やメールのレポートで、失敗した DLE(FAILED の表示)がないかを毎回確認する

Amanda はテープ装置や多数のクライアントをまとめて扱うのに向いていますが、設定の概念が独特です。対象が数台のサーバーだけなら、restic や BorgBackup、同じくサーバー・クライアント型の Bacula などと比べて、自分の運用に合うものを選ぶのもよい方法です。

まとめ

  • Amanda はバックアップサーバーから各クライアントのデータを集め、仮想テープなどに世代管理して保存するソフト
  • amanda.conf でダンプサイクル・テープの本数・保存先を決め、disklist で対象のホストとディレクトリを指定する
  • 認証は .amandahosts で行い、ホスト名の一致とパーミッション 600 が要点
  • amcheck でエラーがない状態にしてから amdump を cron で定期実行し、レポートを毎回確認する
  • データベースは事前にダンプしてから取り、amrecover で一時ディレクトリへ復元する練習をしておく

お気軽にご相談ください

お見積りへ お問い合わせへ
▲