Sambaバックアップスクリプトを使用する
はじめに
このページはSamba v4.0-v4.8上でバックアップを作成することについて記載しています。Samba v4.9以降では、バックアップの作成が大幅に改善されました。詳細はこちらを参照してください。
このドキュメントの内容は、samba 4.xで使用するためのものです。
これは、Samba AD DCのバックアップと復元に関するチュートリアルです。それは有用であることが期待されていますが、保証は一切ありません !
この行が削除されるまで、このドキュメントはDRAFTとみなされます。
一般
警告:複数のDCを動作させている場合:バックアップからDCを復元しないでください。レプリケーションのメタデータが同期 しなくなると、ディレクトリが破損します。 |
少なくとも1つの他のDCがまだ動作している場合は、新しいマシンをDCとして再び接続します。他の実行中のDCからすべてが同期されます - まだ実装されていないSysVolレプリケーションを除きます。
元のDC上でのみバックアップを使用し、新しいDCに移動してDCをアップグレードすることは絶対にしないでください。この場合、代わりに新しいDCに参加してください。 |
ドメイン内のすべてのDCが壊れている場合は、http://lists.samba.orgのsamba-technicalメーリングリストに投稿して、これを解決する最善の 方法について議論する必要があります。
LDBおよびTDBファイルのバックアップ/リストア方法
'samba_backup'スクリプトを修正する予定がある場合や独自のソリューションを作成する場合は、ここでいくつかの有益な情報を見つけるでしょう:
- 実行中のデータベースを決してコピーする必要はありませんが、
* .ldb
&* .tdb
ファイルを'tdbbackup'でオンラ インでバックアップできます。 - tdbbackupによって作成されたファイルは、完全なTDBファイルと通常のTDBファイルです。 tdbbackupは安全に抽出を行います。
* .ldb
ファイルのバックアップは、単に '.bak'というサフィックスを削除するだけで元の名前に復元できます。
samba_backupスクリプトについて
Sambaはデータベースをバックアップする非常に基本的なシェルスクリプトを提供しています(ソースtarballのsource4/scripting/bin/samba_backup
)。これには、Sambaインストール全体が1つの場所にあることが必要です(/usr /local/samba/
など)。 configureオプションを使用して異なる場所にsambaを格納している場合は、スクリプトを調整するか、ベースとして使用して独自のスクリプトを作成 できます。
スクリプトは非常に基本的なものであり、それをそのまま使用する予定がある場合、注意すべき点が1つあります。
- スクリプトは拡張ACLをバックアップしません。したがって、あなたはパーミッションを失います(例:SysVol共有)。--xattrsオプションを サポートするtarバージョン(tarのマンページを参照)がある場合は、このオプションをスクリプト内のすべての 'tar'コマンドに追加する必要があります。これにより、tarはアーカイブ内の拡張ACLを保持できます。
バックアップ
Sambaのバックアップスクリプトは、 'make install'によってインストールされません。ソースディレクトリ(source4/scripting/bin/samba_backup
)から/usr/sbin
のような場所にコピーし、安全な権限を設定する必要があります:
# cp .../source4/scripting/bin/samba_backup /usr/sbin # chown root:root /usr/sbin/samba_backup # chmod 750 /usr/sbin/samba_backup
スクリプト内の以下の変数を必要に応じて調整します。
FROMWHERE=/usr/local/samba WHERE=/usr/local/backups DAYS=90
$WHERE
変数に設定してアクセス権を設定した宛先フォルダを作成します。
# mkdir /usr/local/backups # chmod 750 /usr/local/backups
最初のテストのバックアップスクリプトを開始します。
# /usr/sbin/samba_backup
スクリプトがエラーなしで終了する場合は、出力先フォルダに3つのファイルがあります。
etc.{Timestamp}.tar.bz2
samba4_private.{Timestamp}.tar.bz2
sysvol.{Timestamp}.tar.bz2
テストバックアップが成功した場合は、毎日のバックアップ用にcronジョブを追加する必要があります。
# crontab -e
毎日2:00AMにバックアップするために、次の行を追加します。
0 2 * * * /usr/sbin/samba_backup
注意:cronを使用してスクリプトを実行するときは、すべての必要なバイナリが$PATH
変数の一部であるディレクトリにあることを確認してください。正しいパスがシステム全体で定義されていない場合は、変数をcrontabに設定するか、またはスクリプトの先頭でshebang(#!)行の後に設定します。
リストア
以下のリストアガイドでは、 'samba_backup'スクリプトを使用してデータベースをバックアップしたことを前提としています。独自のスクリプ トをお持ちの場合は、手順を調整してください。
非常に重要なメモ:
- 同時に、復元とバージョンの変更を行わないでください!バックアップを作成したものと同じSambaバージョンを使用しているシステムでは、常に復元してください!
- 同じIPとホスト名を持つシステムでは、常にリストアしてください。そうしないと、KerberosとDNSの問題が発生します。
- 推奨:バックアップを作成したのと同じOSで復元してください。
復元状況で最も重要なことは、システムを実行状態に戻すことです。すべてアップしてテストされたら、必要な変更を行うことができます。 復元と一緒に変更しようとしないでください!
システム全体が壊れている場合は、まずHowTo(SambaをActive Directoryドメインコントローラとして設定する)の説明に従ってマシン全体をセットアップする必要があります。
復元するフォルダを削除します(sambaは停止している状態で):
# rm -rf /usr/local/samba/etc # rm -rf /usr/local/samba/private # rm -rf /usr/local/samba/var/locks/sysvol
最新の作業用バックアップファイルを元の場所に展開します。
# cd /usr/local/backups # tar -jxf etc.{Timestamp}.tar.bz2 -C /usr/local/samba/ # tar -jxf samba4_private.{Timestamp}.tar.bz2 -C /usr/local/samba/ # tar -jxf sysvol.{Timestamp}.tar.bz2 -C /usr/local/samba/
private
ディレクトリの*.ldb.bak
ファイルの名前を*.ldb
に戻します。これはGNU find
とBash
で行うことができます:
# find /usr/local/samba/private/ -type f -name '*.ldb.bak' -print0 | while read -d $'\0' f ; do mv "$f" "${f%.bak}" ; done
バックアップに拡張ACLが含まれていない場合(samba_backupスクリプトについてを参照)、以下を実行する必要があります:
# samba-tool ntacl sysvolreset
Bind as DNSバックエンドを使用する場合は、DNSデータベースのハードリンクを修正する必要があります。
# samba_upgradedns --dns-backend=BIND9_DLZ
「DNSバックエンド BIND - 新しいDNSバックエンドエントリが解決できない」 を参照してください。
これで、sambaを起動し、復元が成功したかどうかをテストできます。
ヒント:バックアップから単一のデータベースを復元することは可能ですが、一部のデータベースは他のデータベースにリンクされている可能性があるため、矛盾するシステムがないように注意してください。壊れたデータベースが他のデータベースに依存しているかどうか不明な場合は、http://lists.samba.orgのsamba技術的メーリングリストに問い合わせるか、すべてを復元する必要があります。