バックアップをNFS越しに取りたい


なにこれ

サーバの特定のディレクトリ(/homeとか)を、別のNFSサーバのディレクトリにバックアップしたい。

おことわり

このスクリプトを使用して何かとんでもないことが起きても、すながわは責任をとれないのであしからず。

スクリプト

最初に設定項目がある。
ここでは、自サーバの”/home”の中身を、NFSディレクトリ”192.168.1.2:/volume1/test”の中の”/home”にrsyncする例。
なお、”/home”の中に”sunagawa”ディレクトリが存在することを確認してから、rsyncする仕様。

/usr/local/bin/backup_home.sh [700]

#!/bin/bash

# NFS越しにディレクトリをバックアップするbashスクリプト
# すながわひろゆき / Studio JamPack, 2017.01.09

# バックアップ元ディレクトリ(末尾に/を付けない)
targetdir="/home"
# バックアップ元ディレクトリ内に必ず存在するディレクトリ名(チェック用)
checkerdir="sunagawa"
# バックアップ先NFSディレクトリ(末尾に/を付けない)
destnfs="192.168.1.2:/volume1/test"
# バックアップ先ディレクトリ(末尾に/を付けない)
destdir="/home"
# バックアップ先マウントディレクトリ(末尾に/を付けない)
mountdir="/mnt/backup"

# バックアップ開始
echo "# checking target directory."
date

# バックアップ元ディレクトリの存在チェック
if [ -d ${targetdir}/${checkerdir} ] ; then
  echo "# target directory: ${targetdir}/"
else
  echo "error: cannot find target directory: ${checkerdir} in ${targetdir} , abort."
  exit 1
fi

# バックアップ先NFSディレクトリのマウントとチェック
echo "# mounting target NFS directory."
mount -t nfs -o rw,hard,intr,bg ${destnfs} ${mountdir}
if [ $? = 0 ] ; then
  echo "# destination directory: ${destnfs}${destdir}/ as ${mountdir}${destdir}/"
else echo "error: cannot find target directory: ${destnfs}${destdir}/ as ${mountdir}${destdir}/ , abort."
  exit 1
fi

# バックアップ実行
echo "# starting backup."
rsync -auv --delete ${targetdir}/ ${mountdir}${destdir}/

# バックアップ先NFSディレクトリのアンマウント
echo "# done, unmounting target NFS directory."
date
umount ${mountdir}
exit 0

なにかご意見やご要望があれば、お寄せくださいな。