バックアップをとろう(その1)

これまでは、バックアップをとるのに、いちいち手作業でマウントしてコピーするのを繰りかえしてきたのだが、さすがに面倒くさくなってきたので、自動でバックアップするコトにした。

まず仕様としては、

1.コピー元
/dev/eltroというボリュームグループに、それぞれgentoo、homeというパーティションが切ってある。他に、/dev/md0上に/bootがあるので、それもコピー対象にしたい。gentooとhomeは、nilfs2なので、nilfs2のスナップショット機能を使って、オンラインバックアップを取ることにする。

2.コピー先
それを、同じPC上にある別のHDDに切ってある/dev/wearhouseというボリュームグループの同名のパーティションにそれぞれコピーする。

ざっくりとこれだけのことを決めて、サッと書いたのが以下のスクリプトだよん。
とりあえず動く。

#!/bin/sh

# source computer name 
SOURCE_DOMAIN="eltro"

for TARGET in boot gentoo home
do
	# setup source of files
	echo "[ ${TARGET} ]"
	if test ${TARGET} = "boot"
	then
		# we simply mount the boot
		SOURCE="/boot"
		/bin/mount /boot
		
	else
		DEVICE="/dev/${SOURCE_DOMAIN}/${TARGET}"

		#create the newest snapshot
		CP_NUM=`lscp -r -n 1 ${DEVICE} | \
		awk 'NR == 2 {print $1}'`

		/usr/bin/chcp ss ${DEVICE} ${CP_NUM}
		
		# mount the snapshot on SOURCE
		SOURCE="/root/source"
		/bin/mount -v -t nilfs2 -o ro,cp=${CP_NUM} ${DEVICE} ${SOURCE}

	fi

	/bin/mount -v /dev/wearhouse/${TARGET} /root/backup

	# copy files 
	/usr/bin/rsync --delete -av ${SOURCE}/ /root/backup
	#df -hT	# for debugging


	# close the source of files
	/bin/umount -v ${SOURCE}
	/bin/umount -v /root/backup 
done

ちなみに、当初はネットワーク上にある別のPCのHDDにコピーするつもりだったのだが、1時間に一回の割合でバックアップを取ることにしたので、HDDを物理的に同じPCに持ってきてしまった。1時間に一回、別のPCを立ちあげる、とかは面倒くさくてやってられないから。