суббота, 28 мая 2016 г.

Делаем backup (бэкап) больших массивов файлов, продолжение

В первой части все-все-все написано, и там же есть список хотелок. Это собственно реализация оных. Список отличий от исходной версии.

  1. Сначала стираем старые файлы, потом пишем новые.
  2. Храним заданное число копий, а не количество дней.
  3. Изменился формат конфиг-файла (исчез "+" у параметра OLD, теперь это просто число)
  4. Нет необходимости вручную создавать исходную копию.
  5. Нет проблем с повторным запуском в течении тех же суток.
  6. Добавлен ключ -F rsync, нужно использовать файлы .rsync-filter

В общем и целом получилась вполне себе боевая вещь.
Собственно скрипт /usr/local/bin/rsync.increment3
#! /bin/bash

### Определения по-умолчанию
MAP='root@10.0.0.3::samba-private/'
DEST='/storage/increment/samba-priv'
LOGF=/var/log/rsync-samba-priv-add.log
OLD=10

### в $1 передаем имя конфиг-файла
if [ ! -z ${1} ] ; then
  test -r ${1} && . ${1}
fi

### Стираем старые копии по числу, а не по дате создания (это важно!)
# Стираем только каталоги, файлы типа .notes.txt нам не интересны

icount=0
for i in `ls -dr $DEST/20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]` ; do
 if [ $((icount++)) -ge $((OLD))  ] ; then
  rm -rf "$i"
 fi
done

### Начали
DAY0=`date -I`
DAY1=`date -I -d "1 day ago"`

# Защита от повторного запуска (передвижка крона, например, для тестов удобно опять же)
if [ -d $DEST/$DAY0 ] ; then
 mv -f $DEST/$DAY0 $DEST/$DAY0-previous
fi

# Самый свежий каталог по маске date -I с 2010 по 2099 годы :-)
# Можно было сохранить $i на первом проходе стирания, но проще еще раз
# дернуть ls

LNK=`ls -dr $DEST/20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]|head -n 1`

# Если совсем пусто, создаем вчерашний пустой
if [ -z $LNK ] ; then
 LNK=$DEST/$DAY1
 mkdir -p $LNK
 echo "LNK not exist..." |logger
fi

# Опять про повторный запуск, крутим обратно...
if [ -d $DEST/$DAY0-previous ] ; then
 mv -f $DEST/$DAY0-previous $DEST/$DAY0
 echo "Previous DAY0 exist..." |logger
fi

### Собственно копируем
rm -f $LOGF
rsync --log-file=$LOGF -aHxAF --del  --link-dest=$LNK  $MAP $DEST/$DAY0

   
И конфиг
MAP='root@10.0.0.3::samba-public/'
DEST='/storage/increment/samba-pub'
LOGF=/var/log/rsync-samba-pub.log
OLD=30
    
Все остальное без изменений.

Дополнение от 21 апреля 2020. 

  Для анализа логов совсем простой скриптик. Он посылает на почту лаконично имена лог-файлов, содержащих "rsync error:" Условием работы (из крона) является правильная установка "почтовых" переменных MAILTO и MAILFROM.

#! /bin/bash

FMASK="/var/log/rsync-*.log"

status=""
for i in `ls  $FMASK` ; do
  if [ `cat $i |grep "rsync error:" | wc -l` -ne 0 ] ; then
    status=$i" "$status
  fi
done
if [[ -n $status ]] ; then 
  echo  $status
fi

Комментариев нет:

Отправить комментарий