きまぐれほげほげひろば

dumpbackup

このプログラムは、Linuxのxfs/ext2/ext3/ext4ファイルシステムを、xfsdump/dumpコマンドを使用してバックアップを取得するシェルスクリプトです。

単にxfsdump/dumpコマンドを実行するだけではありません。このプログラムはバックアップ実行前にnfs/cifsディレクトリをマウントできたり、ファイルシステムのバックアップ前後に指定するスクリプトを実行できたりします。また、LVMを使用している場合はLVMスナップショットを実行して静止点を作成してからxfsdump/dumpコマンドを実行できます。EFIシステムパーティションはtarコマンドでバックアップ取得します。

お手軽バックアップ管理を実現することを重視していますので、重要ではないサーバでの使用を想定しています。エンタープライズなサーバーでの使用には機能的に不向きです。また、バックアップイメージ格納先はディスクを想定しています。

このプログラムはbashスクリプトで実装されています。よって簡単に導入できます。

長い説明を読まずに、早くダウンロードしたい場合はこちら

  • xfsdump または dumpコマンドを使用してファイルシステムバックアップ
  • EFIシステムパーティションはtarコマンドを使用してバックアップ
  • 静止点を作成(スナップショット)してからバックアップ(LVM使用時のみ)
  • バックアップイメージを圧縮
  • バックアップ実施前にnfs/cifsディレクトリをマウント
  • ファイルシステムごとでバックアップ実行前後に指定するコマンドを実行
  • 指定する期間を経過したバックアップファイルを自動削除
  • リストアに必要な情報の取得
dumpコマンドを使用したファイルシステムバックアップ

xfsdump または dumpコマンドを使用してファイルシステムのバックアップを取得します。

バックアップ対象のデバイスファイル、バックアップイメージの格納先はリストファイルで指定できます。

このスクリプトで取得したバックアップイメージを使用してext2/ext3/ext4ファイルシステムをリカバリする方法についてはこちらを参照してください。(前述どおりdumpコマンドを使用してバックアップを取得していますので、restoreコマンドでリストアできます)

このスクリプトで取得したバックアップイメージを使用してxfsファイルシステムをリカバリする方法についてはこちらを参照してください。(前述どおりxfsdumpコマンドを使用してバックアップを取得していますので、xfsrestoreコマンドでリストアできます)

EFIシステムパーティションはtarコマンドを使用してバックアップ

vfatファイルシステムで作成されたEFIファイルシステムはtarコマンドでバックアップを取得します。

静止点を作成してからバックアップ(LVM使用時のみ)

LVM使用時のみ、xfsdump/dumpコマンド実行前にLVMスナップショットでLVの静止点を作成します。

バックアップ中にファイルシステム内のファイルの内容が書き換わっても、バックアップイメージの破損の心配はありません。また、LVMスナップショットは瞬間的に作成されるので、バックアップ取得時のサービス停止も瞬間的にすることができます。

バックアップイメージを圧縮

取得したバックアップイメージを圧縮することができます。(任意)

バックアップイメージに対する信頼性が多少下がりますが、圧縮することによりバックアップイメージの容量削減をすることができます。圧縮に使用するコマンドはgzipとbzip2とcompressから選択できます。

バックアップ実施前にnfs/cifsディレクトリをマウント

バックアップ実施前にnfs/cifsディレクトリをマウントすることができます。

これにより、リモートサーバのディスクにバックアップイメージを格納することが可能です。

ファイルシステムごとでバックアップ実行前後に指定するコマンドを実行

ファイルシステムごとに、バックアップ取得前と取得後それぞれにおいて、指定するコマンドを実行することができます。

例えば、データベースのデータを格納しているファイルシステムをバックアップする場合、バックアップ取得前にデータベースを停止し、バックアップ取得完了後にデータベースを起動する、といったことができます。

指定する期間を経過したバックアップファイルを自動削除

指定する日数を経過した過去のバックアップイメージファイルを自動削除します。

リストアに必要な情報の取得

システムリストア時に必要となるパーティション、マウント、LVMに関する情報を取得します。

  • bash
  • dump
  • xfsdump

このプログラムはbashスクリプトですので、簡単にインストールできます。

以下にインストール手順を示します。

  1. dumpコマンドをインストール
  2. # dnf install dump
  3. xfsdumpコマンドをインストール
  4. # dnf install xfsdump
  5. ここからアーカイブをダウンロード
  6. ダウンロードしたアーカイブファイルを展開
  7. # tar zxvf dumpbackup_2.0.0.tar.gz
  8. 展開したディレクトリに移動
  9. # cd dumpbackup_2.0.0
  10. 設定値を変更します。ログ出力場所に注意してください。
  11. # vi dumpbackup.sh
  12. 任意の場所にコピーしてください。
  13. # cp ./dumpbackup.sh 任意の場所
  14. 権限の設定をしてください。
  15. # chmod 700 任意の場所/dumpbackup.sh
  16. バックアップリストファイルを作成してください
  17. # cp diskdump.lst 任意の場所/任意のファイル名.lst # vi 任意の場所/任意のファイル名.lst
  18. (オプション)スケジュール実行の設定をしてください。
  19. # vi /etc/cron.d/dumpbackup 0 0 * * 0 root 任意の場所/dumpbackup.sh

このプログラムの実行方法について説明します

# ./dumpbackup.sh[ <バックアップリストファイルのパス>[ <バックアップファイル名のプレフィックス>[ <バックアップファイルの保管日数>]]]

以下のパラメータ(起動引数)は、省略時、スクリプト内で定義したデフォルト値を使用します。

バックアップリストファイルのパス

バックアップ対象のデバイスファイルおよびバックアップイメージの格納先などを定義したバックアップリストファイルのパスを指定します。

バックアップファイル名のプレフィックス

取得したバックアップイメージファイルのファイル名の先頭に付与する接頭句を指定します。バックアップの種類ごとに一意な文字列を指定してください。(バックアップイメージの自動削除で使用します)

バックアップファイルの保管日数

バックアップイメージを保管する日数を指定します。この日数を経過したバックアップイメージファイルはバックアップ実行後に削除されます。

実行例

# ./dumpbackup.sh
# ./dumpbackup.sh /path/to/dumpbackup.lst
# ./dumpbackup.sh /path/to/dumpbackup.lst daily
# ./dumpbackup.sh /path/to/dumpbackup.lst monthly 95

bklist_path_default

バックアップリストファイルを起動引数で指定しなかった時に、デフォルトで使用されるバックアップリストファイルのパス。

bkupdir_defalut

バックアップリストファイル内で、バックアップイメージファイル格納先を指定していなかったときに、デフォルトで使用されるバックアップイメージファイル格納ディレクトリのパス。

bkupimg_prefix_default

バックアップイメージファイルのプレフィックスを起動引数で指定しなかった時に、デフォルトで使用されるバックアップイメージファイルのプレフィックス。

mountdir

バックアップ格納先にNFSまたはCIFS(SMB・Windowsファイル共有)を使用する場合に、その格納先をマウントするリモートサーバのパス(このスクリプトを実行するサーバから見た)を指定します。ローカルに格納する場合は空にします。

Windows系パスを指定する場合は「\」の代わりに「/」を使用してください(例:\\192.168.1.1\share → //192.168.1.1/share)

mounteddir

バックアップ格納先にNFSまたはCIFS(SMB・Windowsファイル共有)を使用する場合に、その格納先をマウントさせるローカルのパス(マウントポイント)を指定します。ローカルに格納する場合は空にします。

mountoption

mountコマンドのオプションを指定します。NFSやCIFSの認証などはここで指定してください。

snaplvname

LVMスナップショットを使用する場合は、ここにスナップショット用論理ボリュームの名前を指定してください。LVMスナップショットを使用しない場合は空にしてください。

snaplvsize

LVMスナップショットを使用する場合は、ここにスナップショット用論理ボリュームのサイズを指定してください。ファイルシステムのバックアップ中(dump中)にここで指定したサイズ以上のファイル更新があると、更新側でエラーになります。

deldays_default

バックアップイメージファイルの保管日数を指定します。起動引数で保管日数を指定した場合はその値で上書きされます。

execlog

実行ログを記録するファイルパスを指定します。

dummyecho

通常は空にしてください。この項目に"echo"を指定して実行すると、実行するコマンドを標準出力に表示するだけで実際に実行しません(いわゆるデバッグモードです)。

バックアップ対象デバイスパス ファイルシステム名 バックアップイメージ名 バックアップイメージ格納ディレクトリ 圧縮に使用するコマンド バックアップ前実行コマンドパス バックアップ後実行パス
  • 各項目はタブ文字区切り。連続するタブ文字は空値として認識
  • 実際には1ファイルシステムごとに一行(改行なし)で記入
  • 複数行定義可能(複数ファイルシステム)

バックアップ対象デバイスパス

バックアップするファイルシステムが乗っているパーティションまたはLVM論理ボリュームのデバイスファイルパスを指定します。

ファイルシステム名

ファイルシステム名を次の中から指定します。xfs ext2 ext3 ext4 vfat。

xfsはxfsdump、ext2/ext3/ext4はdump、vfatはtarを使用してバックアップを取得します。

バックアップイメージ名

取得したバックアップイメージにつけるファイル名のベース部分を指定します。

バックアップイメージ格納ディレクトリ

取得したバックアップイメージを格納(保存)するディレクトリを指定します。

圧縮に使用するコマンド(省略可能)

取得したバックアップイメージを圧縮するために使用するコマンドを指定します。「gzip」「bzip2」「compress」から選択できます。圧縮したくない場合は「none」を指定してください。省略時は圧縮しません。

バックアップ前実行コマンドパス(省略可能)

ファイルシステムのバックアップ前に実行するコマンドのパスを指定します。仕様により引数を指定できません。また実行するコマンドの正常終了時には戻り値0を返却するようにしてください。実行しない(バックアップ後実行コマンドのみ実行する)場合は「echo」を指定してください。

バックアップ後実行コマンドパス(省略可能)

ファイルシステムのバックアップ後に実行するコマンドのパスを指定します。仕様により引数を指定できません。また実行するコマンドの正常終了時には戻り値0を返却するようにしてください。

/boot/efi vfat boot-efi /mnt/landisk/server_bkup /dev/sda1 ext4 sda1-boot /mnt/landisk/server_bkup /dev/rootvg/rootlv xfs rootvg-rootlv-root /mnt/landisk/server_bkup gzip /dev/rootvg/varlv xfs rootvg-varlv-var /mnt/landisk/server_bkup gzip /dev/rootvg/dbdatalv xfs rootvg-dbdatalv-dbdata /mnt/landisk/server_bkup gzip /path/to/bin/prebackup_stopdatabase.sh /path/to/bin/postbackup_startdatabase.sh
  • このスクリプトの使用により、いかなる損害等が発生したとしても私は責任を負いません。自己責任でご使用ください。
  • 必要に応じてログはローテーションしてください。デーモンではないので再起動は不要です。
  • ちょっとした空き時間に作ったので、作りこみ不足感があります。その部分はお許しください。
  • ソースはcoolな書き方をしていませんので参考になりません。
ver2.0.0 (2020/10/31)
  • [新機能]xfsファイルシステムに対応
  • [新機能]vfatファイルシステムに対応
  • [不具合修正]大量
ver1.0.0 (2010/01/01)
  • 初版リリース
何かありましたら以下のメールアドレスまで。(自宅サーバーのため届かない可能性があります。多忙のため100%返信するとは限りません(しなくてもごちゃごちゃいわないでください)) webmaster@chidipy.jpn.com