- RU.LINUX (2:5077/15.22) __________________________________________ RU.LINUX _
From : Timur I.Danyarhojaev 2:5020/400 05 Apr 00 11:58:02
Subj : Hужен инкpементальный бэкап в аpхив
-------------------------------------------------------------------------------
From: "Timur I.Danyarhojaev" <tid@podolsk.ru>
Oleg Frolkov wrote:
> Hужен инкpементальный бэкап в аpхив или хотя-бы в деpево подкаталогов.
> Бэкапить надо по кpитеpию: все файлы после даты xxxx, если есть возможность
> исключить опpеделенные каталоги (список котоpых хpанить в отдельном файле)
> то еще лучше.
>
> Есть у tar-а опция -N но я так и не смог ни где найти фоpмат даты, котоpый
> он понимает :(
ЧИТАЙТЕ man'ы!
Я нарисовал для себя програмку инкриментного бэкапа по схеме:
Уровень Комментарий (дата на начало периода)
0 Полный Back Up (Full)
1 годовой (1999)
2 годовой (2000)
. . .
10 квартальный (Апрель)
11 квартальный (Июль)
12 квартальный (Октябрь)
20 месячный (второй)
21 месячный (третий)
30 недельный (вторая)
31 недельный (третья)
32 недельный (четвертая)
33 недельный (пятая)
40 однодневный (среда)
41 однодневный (четверг)
42 однодневный (пятница)
43 однодневный (понедельник)
Бэкапится все поддерево.
----------------------------------------------
#!/bin/sh
case $# in
2)
case $2 in
Full)
level=0 ;;
[1-9]|[1-9][0-9])
level=$2 ;;
*)
echo $0 "<Value> mast be number - 1..99"
exit 1 ;;
esac ;;
*)
echo "Usage:" $0 "<Archive> <Value>"
exit 1 ;;
esac
cd /YYYYYY/Log
LCK_Flag="/tmp/LCK_BKP"
PID_BKP=$$
umask 777
while ( true ); do
if ( echo $PID_BKP > $LCK_Flag ) 2>/dev/null ; then
break
fi
Delay=$((`/usr/local/bin/getrand 300`+1))
sleep $Delay
done
umask 022
if [ ! -d $srcDIR ]; then
echo "Can't Find Source Directory" $srcDIR
exit 1
fi
if [ ! -d $backupDIR ]; then
echo "Can't Find Back Up DISK" $backupDIR
exit 1
fi
if [ ! -d $lavelDIR ]; then
echo "Can't Find Level " $lavelDIR
exit 1
fi
if [ $level = 0 ]; then
echo "Full Back Up" > $logfile
cd $upDIR
tar clvf -
$1 2>>$logfile | gzip -9 2>>$logfile >$backupFILE
else
prelevel=$level
while ( true ); do
let $((prelevel=$prelevel-1))
predateFILE=${backupDIR}/${prelevel}/date
if [ -f $predateFILE ]; then break; fi
if [ "$prelevel" = "-1" ]; then
echo "Can't Find Pre Level Date " $predateFILE
exit 1
fi
done
then=`cat $predateFILE`
echo "Incriment Back Up Level" $level "from" $then "to" $now> $logfile
cd $upDIR
tar clvf -
-N "$then"
$1 2>>$logfile | bzip2 2>>$logfile >$backupFILE
let $((level=$level+1))
while [ "$level" != "100" ]; do
lavelDIR=${backupDIR}/${level}
if [ -d $lavelDIR ]; then
rm $lavelDIR/date
fi
let $((level=$level+1))
done
fi
echo $now > $dateFILE
cd /YYYYYY/Log
rm -f $LCK_Flag
-------------------------------------------------------
XXXXXX, YYYYYY - поменять на свои