pdumpfsからrdumpfsへ
Debian jessieにしてからpdumpfsが使いづらくなってしまい、後継をどうしようかと考えていて、Google先生に聞いたところrsyncの–link-destオプションで似たようなことが出来る、と知り、ちゃちゃっと1時間ハックで下記のようなスクリプトを書きました。
#!/bin/bash
set -f
usage_exit() {
echo "Usage: $0 [-l log_file] [-e exclude_pattern] src dest" 1>&2
exit 1
}
LOGFILE=""
EXCLUDE=""
while getopts e:l:h OPT
do
case $OPT in
l) LOGFILE=$OPTARG
;;
e) EXCLUDE=$OPTARG
;;
h) usage_exit
;;
\?) usage_exit
;;
esac
done
shift $((OPTIND - 1))
if [ $# -lt 2 ]; then
usage_exit
fi
EX=""
if [ "${EXCLUDE}" != "" ]; then
for e in `echo "${EXCLUDE}"`; do
EX="${EX} --exclude='${e}'"
done
fi
LOG=""
if [ "${LOGFILE}" != "" ]; then
LOG=" --log-file=${LOGFILE}"
fi
SRCDIR=`readlink -m $1`
DSTDIR=`readlink -m $2`
DATEDIR="$(date +'%Y')/$(date +'%m')/$(date +'%d')"
TARGETDIR=`readlink -m ${DSTDIR}/${DATEDIR}`
if [ ! -d "${TARGETDIR}" ]; then
mkdir -p -m 0700 ${TARGETDIR}
fi
LATESTDIR=`find ${DSTDIR} -maxdepth 3 -mindepth 3 -type d ! -path "${TARGETDIR}" -print | sort -r | head -1`
LD=""
if [ "${LATESTDIR}" != "" ]; then
LD=" --link-dest=${LATESTDIR}"
fi
eval "rsync -aHAXvv --delete${EX}${LOG}${LD} ${SRCDIR} ${TARGETDIR}"
rm -f ${DSTDIR}/latest
ln -s ${DATEDIR} ${DSTDIR}/latest
実際には上記をrdumpfsとしてpathの通ったところに置き、以下のようなスクリプトで呼び出しています。
#!/bin/bash
TARGET="/mnt0/time_machine"
for SOURCE in bin boot etc home lib opt root sbin srv usr var; do
/root/bin/rdumpfs -l /root/var/log/rdumpfs.log -e 'var/tmp/* var/cache/* var/log/*' /${SOURCE} ${TARGET}
done
これでとりあえずそれまで使っていたpdumpfsとほぼ同じような形でバックアップを取ることが出来るようになりました。なお、いつものように完全無保証なのでご注意あれ。