towerの必要なデータをrsyncでミラーリングして、それをtar+gzipでまとめてPDやDVD-RAMにバックアップするという方針。
NFSでディスクをマウントすることも考えたが、UIDなどの問題もあるので、安易なSSHによるrsyncにした。
あと、tarよりはdumpを使う方が望ましいのはわかっているが、諸般の事情によりtar。
towerでsshの鍵を作って、公開鍵をミラーリングを置くposeidonに渡す。
そして非常に気分がよくないが、poseidonの/etc/sshd_configでPermitRootLoginをyesにしてやる。
あとは、バックアップ用スクリプトの作成。
まずはrsyncを行う、tower側で走らせるスクリプト。
複数回rsyncを動かすので、ssh-agentを使って認証を1回ですむようにして動かす。
#!/bin/sh
RSYNC=/usr/bin/rsync
SSH=/usr/bin/ssh
BACKUP_HOST=poseidon
MIRROR_DIR=/root/mirror
eval `ssh-agent`
ssh-add
${RSYNC} -av --delete /etc ${BACKUP_HOST}:${MIRROR_DIR}/etc
${RSYNC} -av --delete /var/lib/mailman ${BACKUP_HOST}:${MIRROR_DIR}/mailman
${RSYNC} -av --delete /var/lib/mysql ${BACKUP_HOST}:${MIRROR_DIR}/mysql
${RSYNC} -av --delete /var/named/chroot/etc ${BACKUP_HOST}:${MIRROR_DIR}/named
${RSYNC} -av --delete /var/named/chroot/var ${BACKUP_HOST}:${MIRROR_DIR}/named
${RSYNC} -av --delete /var/www ${BACKUP_HOST}:${MIRROR_DIR}/www
${RSYNC} -av --delete /home ${BACKUP_HOST}:${MIRROR_DIR}/home
${RSYNC} -av --delete /home ${BACKUP_HOST}:${MIRROR_DIR}/home
homeを2回やっているのは、一回リストを取って転送している間に、新しいファイルが増えている可能性を考えて(というより、ほぼ新しいメールは届いている)。
そして、poseidonでは、これをまとめてディスクに記録できる大きさに分割するスクリプトを用意する。
とりあえず、PDを使うのでファイルは600Mに分割。まあ、外部メディアに記録できなくても最新のバックアップがposeidonのHDDにあると思うだけでも、気が楽だ。
#!/bin/sh
TAR=/bin/tar
SPLIT=/usr/bin/split
STORE_DIR=/mnt/fat32
MIRROR_DIR=/root/mirror
mktargzs ()
{
echo "Backup $1"
cd ${MIRROR_DIR}
${TAR} zcf - ./$1 | ${SPLIT} --byte=600m - ${STORE_DIR}/$1.tar.gz.
}
mktargz ()
{
echo "Backup $1"
cd ${MIRROR_DIR}
${TAR} zcf ${STORE_DIR}/$1.tar.gz ./$1
}
mktargzs home
mktargz etc
mktargz www
mktargz mailman
mktargz mysql
mktargz named