自動バックアップ運用(tar+GnuPG+rsync/ftp)

最終更新日: 2014.02.19

<<トップページ <<新着情報 <<サイト内検索 <<CentOSで自宅サーバー構築 <<Scientific Linuxで自宅サーバー構築

■概要

Linuxサーバー内データの自動バックアップを行う。
ここでは、誤操作等によるファイル削除や破壊に備えて、サーバー内データをtarコマンドで1ファイルにまとめてbzip2形式(gzip形式よりも圧縮率が高い圧縮形式)に圧縮してバックアップ先ディレクトリへ退避しておき、指定により、退避したバックアップを管理者以外が参照できないようにGnuPGコマンドで暗号化できるようにする。また、サーバーのハードディスク故障に備えて、バックアップファイルを別のWindowsクライアントへ転送しておく。
なお、通常クライアントマシンはサーバーのように常時稼動しているわけではないので、クライアント立ち上げ時に自動でrsyncコマンドまたはftpコマンドでサーバー側からバックアップを取得するようにする。


■サーバー側(Linux)でのバックアップ設定

(1)バックアップスクリプト作成
[root@fedora ~]# vi backup.sh ← バックアップスクリプト作成
#!/bin/bash

#
# ローカル内でバックアップ
#

LANG=C

#
# 設定開始
#

# バックアップ対象リスト名
# ※バックアップ対象をフルパスで記述したリスト
BACKUPLIST=/root/backuplist
[ ! -s $BACKUPLIST ] && echo "$BACKUPLIST is not found" && error_exit

# バックアップ対象外リスト名
# ※バックアップ対象外をフルパスで記述したリスト
BACKUPNOLIST=/root/backupnolist

# バックアップ先ディレクトリ名
BACKUPDIR=/backup
mkdir -p $BACKUPDIR

# バックアップ保存世代数
# ※当日分を含めた過去分バックアップを保存する世代数
# ※過去分バックアップを保存しない場合は1を指定する
BACKUPGEN=8

# 暗号化・復号化パスフレーズ
# ※指定がないときは暗号化しない
PASS=''

# バックアップログファイル名
BACKUPLOG=/var/log/backup.log

#
# 設定終了
#

# 異常終了処理関数定義
error_exit () {
    rm -f $TMPBACKUPNOLIST
    exit 1
}

# バックアップファイルをバックアップ対象外リストに追加
# ※バックアップ先ファイルをバックアップしないようにする
TMPBACKUPNOLIST=`mktemp`
[ -s $BACKUPNOLIST ] && cat $BACKUPNOLIST > $TMPBACKUPNOLIST
echo "$BACKUPDIR/*backup.tar.bz2" >> $TMPBACKUPNOLIST

# 前回バックアップをリネーム
cd $BACKUPDIR
OLDBACKUPFILE=`ls backup.tar.bz2* 2>/dev/null`
if [ -f $OLDBACKUPFILE ]; then
    TIMESTAMP=`ls --full-time $OLDBACKUPFILE|awk '{print $6}'|tr -d -`
    mv $BACKUPDIR/$OLDBACKUPFILE $BACKUPDIR/${TIMESTAMP}$OLDBACKUPFILE > /dev/null 2>&1
fi

# バックアップログファイル作成
rm -f $BACKUPLOG
touch $BACKUPLOG
chmod 400 $BACKUPLOG

# バックアップ実行
echo "`date` backup start" >> $BACKUPLOG
tar cjvfP $BACKUPDIR/backup.tar.bz2 -T $BACKUPLIST -X $TMPBACKUPNOLIST >> $BACKUPLOG 2>&1

echo "`date` backup end" >> $BACKUPLOG

# バックアップ暗号化(暗号化・復号化パスフレーズ指定時のみ)
if [ ! -z $PASS ]; then
    echo "`date` encrypt start" >> $BACKUPLOG
    mkdir -p $HOME/.gnupg
    echo $PASS|gpg --passphrase-fd 0 --batch -c $BACKUPDIR/backup.tar.bz2 > /dev/null 2>&1
	code=$?
	if [ $code -ne 0 ]; then
	    cat $BACKUPLOG | mail -s "BACKUP NG CODE IS $code" root
	    rm -f $BACKUPDIR/backup.tar.bz2*
	    error_exit
	fi
    rm -f $BACKUPDIR/backup.tar.bz2
    echo "`date` encrypt end" >> $BACKUPLOG
fi

# バックアップ保存世代を超えた古いバックアップを削除
if [ $(ls $BACKUPDIR/*backup.tar.bz2*|wc -l) -gt $BACKUPGEN ]; then
    OLDBACKUPCNT=`expr $(ls $BACKUPDIR/*backup.tar.bz2*|wc -l) - $BACKUPGEN`
    for file in `ls -t $BACKUPDIR/*backup.tar.bz2*|tail -n $OLDBACKUPCNT`
    do
        rm -f $file
    done
fi

# バックアップ対象外リスト削除
rm -f $TMPBACKUPNOLIST

[root@fedora ~]# chmod 700 backup.sh ← バックアップスクリプトへ実行権限付加

(2)バックアップ対象リスト作成
バックアップ対象ディレクトリ、ファイルを登録したバックアップ対象リストを作成する
[root@fedora ~]# echo "/home" >> backuplist ← 例としてバックアップ対象リストに/homeディレクトリを追加

[root@fedora ~]# echo "/root" >> backuplist ← 例としてバックアップ対象リストに/rootディレクトリを追加

[root@fedora ~]# echo "/var/www" >> backuplist ← 例としてバックアップ対象リストに/var/wwwディレクトリを追加

(3)バックアップ対象外リスト作成
バックアップ対象ディレクトリ内のバックアップ対象外ディレクトリ、ファイルを登録したバックアップ対象外リストを作成する
※バックアップ対象外とするディレクトリ、ファイルがなければ作成しなくてもよい
[root@fedora ~]# echo "/var/www/error" >> backupnolist ← 例としてバックアップ対象外リストに/var/www/errorディレクトリを追加

[root@fedora ~]# echo "/var/www/icons" >> backupnolist ← 例としてバックアップ対象外リストに/var/www/iconsディレクトリを追加

(4)バックアップスクリプト確認
[root@fedora ~]# ./backup.sh ← バックアップスクリプト実行

[root@fedora ~]# ls -lh /backup ← バックアップ先ディレクトリ照会
合計 692K
-rw-r--r--  1 root root 688K  6月 23 10:42 backup.tar.bz2 ← バックアップファイル(暗号化しない場合)
-rw-r--r--  1 root root 688K  6月 23 10:42 backup.tar.bz2.gpg ← バックアップファイル(暗号化する場合)

(5)復号化確認※暗号化した場合のみ
[root@fedora ~]# gpg /backup/backup.tar.bz2.gpg ← 復号化
gpg: 鍵輪「/root/.gnupg/secring.gpg」ができました ←最初の1回のみ表示される
gpg: CAST5暗号化済みデータ
パスフレーズを入力:  ← 暗号化・復号化パスフレーズ応答
gpg: 1 個のパスフレーズで暗号化
gpg: 警告: メッセージの完全性は保護されていません

[root@fedora ~]# ls -lh /backup ← バックアップ先ディレクトリ照会
合計 1.4M
-rw-r--r--  1 root root 690K  6月 23 10:46 backup.tar.bz2 ← 復号化されている
-rw-r--r--  1 root root 688K  6月 23 10:42 backup.tar.bz2.gpg

(6)バックアップ内容確認
[root@fedora ~]# tar tjvf /backup/backup.tar.bz2 ← バックアップディレクトリ、ファイル確認
バックアップしたディレクトリ、ファイルが一覧表示される

(7)バックアップ定期自動実行設定
[root@fedora ~]# echo "0 5 * * * root /root/backup.sh" > /etc/cron.d/backup ← バックアップ定期自動実行設定追加
※毎日5:00にバックアップを実行する

(8)データベースバックアップとの連携
[root@fedora ~]# echo "/backup/mysql" >> backuplist ← バックアップ対象リストに/backup/mysqlディレクトリを追加

[root@fedora ~]# echo "0 5 * * * root /root/mysql-backup.sh ; /root/backup.sh" > /etc/cron.d/backup ← バックアップ定期自動実行設定追加
※毎日5:00にデータベースバックアップ、バックアップの順に実行する

■クライアント側でのバックアップ取得設定(rsyncコマンドで取得する場合)

Windowsクライアント立ち上げ時、rsyncコマンドでサーバーからバックアップを自動取得する。
※rsyncコマンドによるファイル転送は差分のみ行われるため、ファイルが更新されていない場合は転送が行われない=1日にWindowsクライアントを何回再起動しても、2回目以降は転送は行われず、即終了する

(1)cwRsyncインストール
Windows上で動作するrsyncクライアントであるcwRsyncダウンロードする

※最新版のURLはダウンロードページで確認すること

ダウンロードしたzipファイルを解凍してでてきたインストーラを実行してインストールする

(2)鍵ペア(公開鍵/秘密鍵)作成
cwRsyncでサーバーへログインする際に使用する鍵ペアを作成する
なお、cwRsyncでサーバーへログインする際にパスフレーズ入力不要とするため、パスフレーズなしの鍵ペアを作成する

Windows XP系の場合
C:\>cd C:\Program Files\cwRsync\bin ← cwRsyncインストールフォルダへ移動

C:\Program Files\cwRsync\bin>ssh-keygen -t rsa -N "" ← パスフレーズなし鍵ペア作成
Generating public/private rsa key pair.
Enter file in which to save the key (/cygdrive/c/Documents and Settings/ユーザ名/.ssh/id_rsa): ← 空ENTER
Your identification has been saved in /cygdrive/c/Documents and Settings/ユーザ名/.ssh/id_rsa.
Your public key has been saved in /cygdrive/c/Documents and Settings/ユーザ名/.ssh/id_rsa.pub.
The key fingerprint is:
f7:e0:7c:bd:75:eb:0a:73:26:35:47:b0:64:ce:e0:27 ユーザ名@ホスト名
※公開鍵がC:\Documents and Settings\ユーザ名\.ssh\id_rsa.pub、秘密鍵がC:\Documents and Settings\ユーザ名\.ssh\id_rsaとして作成される

Windows 9x系の場合
C:\>mkdir C:\WINDOWS\Profiles\ユーザ名\.ssh ← 鍵ペア作成先フォルダ作成

C:\>cd "C:\Program Files\cwRsync\bin" ← cwRsyncインストールフォルダへ移動

C:\Program Files\cwRsync\bin>ssh-keygen -t rsa -N "" ← パスフレーズなし鍵ペア作成
Generating public/private rsa key pair.
Enter file in which to save the key (/cygdrive/c/Documents and Settings/ユーザ名/.ssh/id_rsa): ← 空ENTER
Your identification has been saved in /cygdrive/c/Documents and Settings/ユーザ名/.ssh/id_rsa.
Your public key has been saved in /cygdrive/c/Documents and Settings/ユーザ名/.ssh/id_rsa.pub.
The key fingerprint is:
f7:e0:7c:bd:75:eb:0a:73:26:35:47:b0:64:ce:e0:27 ユーザ名@ホスト名
※公開鍵がC:\WINDOWS\Profiles\ユーザ名\.ssh\id_rsa.pub、秘密鍵がC:\WINDOWS\Profiles\ユーザ名\.ssh\id_rsaとして作成される

(3)公開鍵セットアップ
サーバーに持ち込んだ公開鍵とペアの秘密鍵でサーバーへログインできるようにする
また、秘密鍵を入手すれば誰でもサーバーにログインできてしまうため、秘密鍵を不正に入手された場合に備え、この鍵ペアでログインできるホストを限定するようにする
※ここでは、サーバーへログインできるようにするユーザをfedoraとする
[root@fedora ~]# mkdir -p /home/fedora/.ssh ← 公開鍵格納ディレクトリ作成

[root@fedora ~]# chmod 700 /home/fedora/.ssh/ ← 公開鍵格納ディレクトリのパーミッションを変更

[root@fedora ~]# vi /home/fedora/.ssh/authorized_keys ← 公開鍵をauthorized_keysに保存
ssh-rsa xxxxx・・・xxxxx ← クライアント側で作成した公開鍵の中身を全てコピーして貼り付ける
※貼り付けは、Poderosaを当サイトどおりに設定している場合、右クリック

[root@fedora ~]# chmod 600 /home/fedora/.ssh/authorized_keys ← authorized_keysのパーミッションを変更

[root@fedora ~]# chown -R fedora:fedora /home/fedora/.ssh/ ← 公開鍵格納ディレクトリの所有者を変更

[root@fedora ~]# vi /home/fedora/.ssh/authorized_keys ← authorized_keys編集
from="win-client" ssh-rsa xxxxx・・・xxxxx ← 追加した公開鍵の行頭にログイン許可ホスト名を追加※

[root@fedora ~]# echo "192.168.1.10 win-client" >> /etc/hosts ← ログイン許可ホストのIPアドレスとホスト名を/etc/hostsに追加※

※例として、この公開鍵でログインできるホストのIPアドレスは192.168.1.10、ホスト名はwin-clientとする

(4)バックアップ取得コマンド作成

Windows XP系の場合
C:\Program Files\cwRsync\cwrsync.cmdを任意の場所(例:D:\backupフォルダ)にコピーして編集する
REM ** CUSTOMIZE ** Enter your rsync command(s) here
SET USER=fedora ← 追加(ユーザ名)
SET SERVER=fedorasrv.com ← 追加(サーバー名)
SET BACKUP=backup.tar.bz2 ← 追加(サーバーから取得するファイル名)
rsync -avz -e ssh --delete %USER%@%SERVER%:/backup/%BACKUP% %SERVER%.%BACKUP% > cwrsync.log ← 追加(サーバーからファイルを取得)
上記では、サーバー(fedorasrv.com)の/backupディレクトリ内のbackup.tar.bz2.gpgをfedorasrv.com.backup.tar.bz2.gpgという名前で保存する

Windows 9x系の場合
C:\Program Files\cwRsync\cwrsync.cmdを任意の場所(例:D:\backupフォルダ)にcwrsync.batという名前でコピーして編集する
REM ** CUSTOMIZE ** Specify where to find rsync and related files (C:\CWRSYNC)
SET CWRSYNCHOME="C:\Program Files\cwRsync" ← 変更

REM Set HOME variable to your windows home directory. That makes sure 
REM that ssh command creates known_hosts in a directory you have access.
SET HOME=C:\WINDOWS\Profiles\ユーザ名 ← 変更

REM ** CUSTOMIZE ** Enter your rsync command(s) here
SET USER=fedora ← 追加(ユーザ名)
SET SERVER=fedorasrv.com ← 追加(サーバー名)
SET BACKUP=backup.tar.bz2 ← 追加(サーバーから取得するファイル名)
rsync -avz -e ssh --delete %USER%@%SERVER%:/backup/%BACKUP% %SERVER%.%BACKUP% > cwrsync.log ← 追加(サーバーからファイルを取得)
作成したバックアップ取得コマンドの「プロパティ」⇒「プログラム」タブ⇒「プログラム終了時にウィンドウを閉じる」をチェック
上記では、サーバー(fedorasrv.com)の/backupディレクトリ内のbackup.tar.bz2.gpgをfedorasrv.com.backup.tar.bz2.gpgという名前で保存する

(5)バックアップ取得確認
作成したバックアップ取得コマンドをダブルクリックで実行
The authenticity of host 'fedorasrv.com (192.168.1.1)' can't be established.
RSA key fingerprint is 1e:ff:2e:bd:e4:4d:57:ba:6e:8b:f8:00:2a:c4:91:19.
Are you sure you want to continue connecting (yes/no)? yes ← yes応答(最初の1回のみ)
Warning: Permanently added 'fedorasrv.com,192.168.1.1' (RSA) to the list of known hosts.
※Windows 9x系の場合で以下のエラーメッセージが出力される場合、cwrsync.batの「プロパティ」⇒「メモリ」タブ⇒「環境変数の初期サイズ」⇒「4096」を選択する
D:\backup>
環境変数のための領域が足りません.
環境変数のための領域が足りません.
環境変数のための領域が足りません.
環境変数のための領域が足りません.
環境変数のための領域が足りません.
環境変数のための領域が足りません.
環境変数のための領域が足りません.
環境変数のための領域が足りません.
コマンドまたはファイル名が違います.

(6)バックアップ取得自動実行設定
作成したバックアップ取得コマンドをスタートアップに登録する

■クライアント側でのバックアップ取得設定(ftpコマンドで取得する場合)

Windowsクライアント立ち上げ時、ftpコマンドでサーバーからバックアップを自動取得する。
FTPサーバー構築済で、非SSL/TLS接続(暗号化しない通常接続)を許可するように設定してあること

(1)バックアップ取得コマンド作成

任意の場所(例:D:\backupフォルダ)にbackup.scrという名前で以下のようなファイルを作成する
open fedorasrv.com ← サーバー名を指定
fedora ← ユーザ名を指定
xxxxxxxx ← パスワードを指定
binary
get /backup/backup.tar.bz2 ← バックアップファイル名を指定
quit

上記backup.scrと同じ場所にbackup.batという名前で以下のようなファイルを作成する
@ECHO OFF
ftp -s:backup.scr > backup.log
※Windows 9x系の場合、作成したbackup.batの「プロパティ」⇒「プログラム」タブ⇒「プログラム終了時にウィンドウを閉じる」をチェック

(2)バックアップ取得確認
作成したbackup.batをダブルクリックで実行し、サーバーからバックアップが取得できていることを確認

(3)バックアップ取得自動実行設定
作成したバックアップ取得コマンドをスタートアップに登録する

■バックアップ・リストア確認

バックアップからディレクトリ単位、ファイル単位でリストア(復元)できるか確認する

(1)テスト用ディレクトリ、ファイル作成
[root@fedora ~]# touch /home/fedora/test.cgi ← fedoraのホームディレクトリにテスト用ファイルを作成

[root@fedora ~]# chmod 755 /home/fedora/test.cgi ← 上記テスト用ファイルのパーミッションをCGIのように755に変更

[root@fedora ~]# mkdir /home/fedora/test ← fedoraのホームディレクトリにテスト用ディレクトリ作成

[root@fedora ~]# cp /home/fedora/test.cgi /home/fedora/test/ ← 上記テスト用ディレクトリにテスト用ファイルコピー

[root@fedora ~]# chown -R fedora:fedora /home/fedora/ ← 作成したテスト用ディレクトリ、ファイルの所有者を変更

[root@fedora ~]# ll -R /home/fedora/ ← テスト用ディレクトリ、ファイル作成確認
/home/fedora/:
/home/fedora/:
合計 4
drwxr-xr-x  2 fedora fedora 4096 10月 27 14:19 test ← テスト用ディレクトリ
-rwxr-xr-x  1 fedora fedora    0 10月 27 14:19 test.cgi ← テスト用ファイル

/home/fedora/test:
合計 0
-rwxr-xr-x  1 fedora fedora 0 10月 27 14:19 test.cgi ← テスト用ディレクトリ内ファイル

(2)バックアップ実行
[root@fedora ~]# ./backup.sh ← バックアップスクリプト実行

(3)テスト用ディレクトリ、ファイル削除
[root@fedora ~]# rm -rf /home/fedora/test/ ← テスト用ディレクトリ削除

[root@fedora ~]# rm -f /home/fedora/test.cgi ← テスト用ファイル削除

[root@fedora ~]# ll -R /home/fedora/ ← テスト用ディレクトリ、ファイル削除確認
/home/fedora/:
合計 0

(4)テスト用ディレクトリ、ファイル復元
[root@fedora ~]# tar jxvfP /backup/backup.tar.bz2 /home/fedora/test ← テスト用ディレクトリ復元
/home/fedora/test/
/home/fedora/test/test.cgi

[root@fedora ~]# tar jxvfP /backup/backup.tar.bz2 /home/fedora/test.cgi ← テスト用ファイル復元
/home/fedora/test.cgi

[root@fedora ~]# ll -R /home/fedora/ ← テスト用ディレクトリ、ファイル復元確認
/home/fedora/:
合計 4
drwxr-xr-x  2 fedora fedora 4096 10月 27 14:19 test ← テスト用ディレクトリがパーミッション、所有者も含めて復元されてる
-rwxr-xr-x  1 fedora fedora    0 10月 27 14:19 test.cgi ← テスト用ファイルがパーミッション、所有者も含めて復元されてる

/home/fedora/test:
合計 0
-rwxr-xr-x  1 fedora fedora 0 10月 27 14:19 test.cgi ← テスト用ディレクトリ内ファイルがパーミッション、所有者も含めて復元されてる


■関連コンテンツ




▲このページのトップへ戻る

プライバシーポリシー