半夜磁盘自动挂载备份
这是DH的备份程序,定时将服务器硬盘所有内容作备份, 作为备份的磁盘为ad2s1或ad6s1
4a-e03-a2# cat /root/localbackup
#!/usr/local/bin/bash
PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin
export PATH
_FROM=report@d-h.net
_TO=support@d-h.net
_PROG=`basename $0`
_FILE=/tmp/$_PROG.ERROR.`date +%Y%m%d`.$$
_NOW=`df / | perl -ne 'm|^/dev/(ad\d+s1)a| and print $1'`
_MNT=`df | grep "/mnt$"`
_ROOT=`df / | awk '/dev/ { print $1 }' | cut -f 3 -d '/'`
[ "$_ROOT" = 'ad4s1a' ] && SRC=ad4s1 DST=ad6s1
[ "$_ROOT" = 'ad0s1a' ] && SRC=ad0s1 DST=ad2s1
rm -f $_FILE
[ -f "$_FILE" ] || \
([ "$_NOW" = "$SRC" ] || echo "illegal filesystem" > $_FILE)
[ -f "$_FILE" ] || \
([ "x$_MNT" = "x" ] || echo "already mounted" > $_FILE)
[ -f "$_FILE" ] || \
(fsck -p /dev/${DST}a >/dev/null 2>&1 || echo "fsck" > $_FILE)
[ -f "$_FILE" ] || \
(mount /dev/${DST}a /mnt >/dev/null 2>&1 || echo "mount" > $_FILE)
[ -f "$_FILE" ] || \
(df | grep "/dev/$DST" >/dev/null 2>&1 || echo "mount" > $_FILE)
[ -f "$_FILE" ] || \
(touch /timestamp && \
rsync -Hax --delete / /timestamp /mnt >/dev/null 2>&1)
[ -f "$_FILE" ] || \
([ "/mnt/timestamp" -ot "/timestamp" ] && echo "rsync" > $_FILE)
[ -f "$_FILE" ] || \
(sed s/$SRC/$DST/ < /etc/fstab > /mnt/etc/fstab || echo "sed" > $_FILE)
[ -f "$_FILE" ] || \
while [ ${_SYNCOUNT:=5} -gt 0 ]
do
sync
sync
sync
sleep 5
_SYNCOUNT=`expr $_SYNCOUNT - 1`
done
[ -f "$_FILE" ] || \
(umount /mnt || echo "umount" > $_FILE)
[ -f "$_FILE" ] || exit
sendmail -t <<EOF
From: $_FROM
To: $_TO
Subject: $_PROG ERROR `cat $_FILE`
`hostname` : DAILY LOCAL BACKUP ERROR
ERROR POINT : `cat $_FILE`
EOF
rm $_FILE /timestamp
评论