|
Nokia Internet Tablet N8XX http://n8xx.com/index.html Скрипт резервного копирования данных - помогите оптимизировать http://n8xx.com/message-1454.html |
| alex2ndr @ 23-06-2008 04:23:14 |
Прошу помощи в отладке скрипта для резервного копирования данных на моем сервере. Основная задача - резервное копирование документов компании, расположенных в расшареной папке на другом сервере (там стоит W2k3). Данное резервное копирование должно защищать не столько от сбоев оборудования сколько от действий неграмотных пользователей (типа - Ой, я тут свою папку удалил - восстановите пожалуйста - и ладно бы в тот же день - так возможно что попросят и через месяц). Работать он должен следующим образом - копируте документы с расшареной папки (/mnt/server-docum), архивирует, затем складывает к себе на хард (в /backup) и в другую подмонтированную папку на первом сервере(/mnt/server-bkp/Documents/). Попутно требуется сообщать о действия или ошибках. Первая версия скрипта такая - Код:#!/bin/sh
#
# Script for backup and restore user's inverenment
# Author: Popov Alexandr
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=backup_docum.sh
USER=alex
GROUP=alex
HOME=/home/alex/
DESC="Backup and copy Documents files"
case "$1" in
backup)
Del_old_files ()
{
# Deleting oldest backup files
freesp=$1
while [ "$freesp" -lt "$2" ]
do
DAY_COUNT=300
for i in `seq 1 $DAY_COUNT`
do
let "j = $DAY_COUNT - $i"
OLDEST_FILE=`find $3/ -name "docum*" -atime +$j | sed -n 1p`
if [ -n "$OLDEST_FILE" ]
then
break
fi
done
rm -f $OLDEST_FILE
echo "Free Space in $3 less than $2 at `date +%F` - Del file $OLDEST_FILE" >> /home/alex/log_bkp.txt
freesp=`/bin/df -k | grep "$3" | awk '{print $3}' | sed -n 1p`
done
}
mount -a
# Create backup of user settings
BKPFILE="docum-`date +%F`.tar"
# Hom many free space in our directory
BKP_PLACE="/backup"
FREE_SPACE=`/bin/df -k | grep "$BKP_PLACE" | awk '{print $3}' | sed -n 1p`
MAX_BKP_SIZE=31457280
Del_old_files $FREE_SPACE $MAX_BKP_SIZE $BKP_PLACE
#Creating archive
tar -cvf /backup/$BKPFILE /mnt/server-docum &&
echo "taring sucess `date +%F`" >> /home/alex/log_bkp.txt &&
# Hom many free space in our directory
BKP_PLACE="/mnt/server-bkp"
FREE_SPACE=`/bin/df -k | grep "$BKP_PLACE" | awk '{print $3}' | sed -n 1p`
Del_old_files $FREE_SPACE $MAX_BKP_SIZE $BKP_PLACE
cp /backup/$BKPFILE /mnt/server-bkp/Documents/ &&
echo "copyng sucess `date +%F`" >> /home/alex/log_bkp.txt
;;
restore)
;;
*)
printf "Usage: $NAME {backup|restore}\n" >&2
exit 1
;;
esac
exit 0Просьба сразу не пинать - это вообще мой первый нормальный скрипт (скрипт в теме Проблема с именем файлов в FBReader был вторым :)). Код:alex@debian-gate:~$ df -k
Файловая система 1K-блоков Исп Доступно Исп% смонтирована на
/dev/mapper/vg0-root 40958744 17848796 23109948 44% /
tmpfs 1026092 0 1026092 0% /lib/init/rw
udev 10240 60 10180 1% /dev
tmpfs 1026092 0 1026092 0% /dev/shm
/dev/mapper/vg0-backup
197790980 191952 187551748 1% /backup
/dev/md0 233225 13498 207686 7% /boot
//192.168.0.2/Documents
358402084 64907756 293494328 19% /mnt/server-docum
//192.168.0.2/Backup 745102700 379259832 365842868 51% /mnt/server-bkp
alex@debian-gate:~$ cat /etc/fstab
# /etc/fstab: static file system information.
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
/dev/mapper/vg0-root / reiserfs defaults 0 1
/dev/mapper/vg0-backup /backup ext3 defaults 0 2
/dev/md0 /boot ext3 defaults 0 2
/dev/mapper/vg0-swap none swap sw 0 0
/dev/hda /media/cdrom0 udf,iso9660 user,noauto 0 0
/dev/fd0 /media/floppy0 auto rw,user,noauto 0 0
//192.168.0.2/Documents /mnt/server-docum/ cifs defaults,username=samba-bkp,password=****,file_mode=0777,dir_mode=0777,iochars et=utf8,ro 0 0
//192.168.0.2/Backup /mnt/server-bkp/ cifs defaults,username=samba-bkp,password=****,file_mode=0777,dir_mode=0777,iochars et=utf8 0 0Далее этот скрипт засунут в крон и выполняется каждую ночь. |
| Wall @ 23-06-2008 10:35:19 |
Посмотрел. |
| alex2ndr @ 23-06-2008 11:17:45 |
Спасибо
это про что? непонял |
| Wall @ 23-06-2008 12:02:26 |
Зачем проверять? Девелопить нужно от юзера. А то, что лежит в /sbin не зря туда положено и звать его нужно оттуда.
Это про это: freesp=$1, а дальше в теле оперируете $2 и $3. Лучше будет скажем так: Код:freesp=$1 maxsize=$2 location=$3 и в теле функции использовать только переменные. Более читабельно, да и вообще так правильнее.
Его никогда много не бывает.
Откройте для себя скажем RsyncBackup: http://www.owlfish.com/software/utils/RSyncBackup/, |
| alex2ndr @ 24-06-2008 23:28:00 |
2 Wall |
| Wall @ 25-06-2008 09:54:07 |
Я ткнул в первое попавшееся. ни одну тулзу я не смотрел и не знаю как оно работает. Знаю только, что ваша задача - стандартный бэкап и реализаций должно быть море. Если вы считаете, что это нигде не сделано и лучше написать скрипт в 20 строчек, то вы глубоко заблуждаетесь. Этот велосипед уже давно придумали.
Ну вы как маленький, ей богу. Хотите удалить последнее - посмотрите что у вас есть и сколько ему лет, месяцев и дней и удалите, пользуясь --remove-older-than. Это же обычная арифметика. Но имея терабайт места и бэкап основаный на rsync, с хранением только разницы(читайте изменений за день) вы может до этого момента и не доживете :) А если решите воспользоваться файловой системой с компрессией, то может и ваши дети тоже :) |