Net: Linux で SMB 共有ディスクにバックアップをとる

NAS も一般的になってきていると思うので、Linux でバックアップを SMB 共有ディスクにとる方法。

nasbackup.sh を適当なディレクトリに設置し、nasaddr と cfgfile の項目を設定し、さらに targetdir で NAS をマウントするディレクトリを指定する。(このディレクトリはあらかじめ作成しておく。)
また、NAS のアカウントは cfgfile で指定するファイルに後に記載するフォーマットで設定する。

なお、実行には、SMB 関係を扱うための準備が Linux 側で必要。
Debian GNU/Linux なら、
# apt-get install smbclient smbfs
しておけば良いと思う。

・nasbackup.sh

#!/bin/sh

LANG=C

# 意味はないが・・・
umask 0066

# NAS のアドレスと共有ポイントを指定
nasaddr=”//192.168.1.10/share”

# NAS のログインアカウントを記載したファイルを指定
cfgfile=”/usr/local/etc/backup.conf”

# NAS をマウントするディレクトリを指定
targetdir=”/root/backuppos/mnt”

# ログファイル
logfile=”/var/log/nasbackup.log”

# NAS をマウント
mount -t cifs ${nasaddr} ${targetdir} -o credentials=${cfgfile}

# エラーチェック
if [ $? -ne 0 ]; then
echo ‘Filesystem Mount Error’
exit
fi

cd /

echo “`date` : Backup Start” >> ${logfile}
tar cfpv “${targetdir}/etc_`date +%a`.tar” etc >> ${logfile} 2>&1
tar cfpv “${targetdir}/home_`date +%a`.tar” home >> ${logfile} 2>&1
tar cfpv “${targetdir}/usr_`date +%a`.tar” usr >> ${logfile} 2>&1
tar cfpv “${targetdir}/var_`date +%a`.tar” var >> ${logfile} 2>&1
echo “`date` : Backup Finish” >> ${logfile}

# おまじないみたいなもの
sync
sync
sync

# アンマウント
umount ${targetdir}

・/usr/local/etc/backup.conf

username=NASのユーザ名
password=上記に対応するパスワード

なお、NAS のマウントポジションは root 以外見えないようにする。(でないと、バックアップ中にローカルユーザが NAS へアクセスできてしまう。)

これを定期的に実行することで、NAS 上に曜日ごとのファイル名で tar 形式としてバックアップが取れるはず。