BackUp/DayOfDayBackUp: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
Нет описания правки
Строка 1: Строка 1:
[[Category:Documentation]]
[[Категория:Documentation]]
{{Викификация}}
[[Категория:Admin]]
[[Category:Admin]]
{{Crap}}
{{Crap}}


=== Ежедневное инкрементарное архивирование файлов и каталогов ===
== Ежедневное инкрементальное архивирование файлов и каталогов ==


'''Цель:''' Создать систему архивирования файлов на отдельный жесткий диск.
: '''Цель:''' Создать систему архивирования файлов на отдельный жесткий диск.
'''Дано:''' Диск находится в том же системном блоке, что и весь сервер, но не используется постоянно ...
: '''Дано:''' Диск находится в том же системном блоке, что и весь сервер, но не используется постоянно… Круглосуточно он отмонтирован, и монтируется только при создании архива.
Круглосуточно он отмонтирован, и монтируется только при создании архива.
: '''Примечания:''' Файлы, удаляемые из основных каталогов, размещаются в отдельных подкаталогах, из которых их можно восстанавливать.
'''Примечания:''' Файлы, удаляемые из основных каталогов, размещаются в отдельных подкаталогах, из которых их можно восстанавливать.


=== Скрипт ===
В ходе продолжительных поисков в Интернете надёргал различных фрагментов, которые, в результате, сложились в такой вот скрипт.
В ходе продолжительных поисков в Интернете надёргал различных фрагментов, которые, в результате, сложились в такой вот скрипт.
Каждый фрагмент скрипта я кратко откоментировал, поэтому тут привожу его целиком:
Каждый фрагмент скрипта я кратко откоментировал, поэтому тут привожу его целиком:


<pre>#!/bin/sh
<source lang="bash">
#!/bin/sh


# Скрипт для инкрементарного архивирования rsync backups
# Скрипт для инкрементального архивирования rsync backups
# Этот скрипт распространяется под лицензией GPL
# Этот скрипт распространяется под лицензией GPL
# Я использую дополнительный диск, который монтирую при архивировании
# Я использую дополнительный диск, который монтирую при архивировании
Строка 162: Строка 162:
else
else
echo "cant find $EXCLUDES"; exit
echo "cant find $EXCLUDES"; exit
fi</pre>
fi
Осталось привести примеры файлов, в которых находятся собственно списки, что архивировать, и что пропускать при этом ...
</source>
 
=== Настройки ===
Осталось привести примеры файлов, в которых находятся собственно списки, что архивировать, и что пропускать при этом
Архивируем:
Архивируем:
<pre># cat /etc/backup.lst  
: {{cmd|# cat /etc/backup.lst}}
/home
<pre>/home
/etc
/etc
/var/lib/bind
/var/lib/bind
Строка 172: Строка 175:
/usr/local/blockit</pre>
/usr/local/blockit</pre>
И пропускаем при этом:
И пропускаем при этом:
# cat /etc/backup-exclude.lst  
: {{cmd|# cat /etc/backup-exclude.lst}}
<pre>*.mp3
<pre>*.mp3
*.MP3
*.MP3
Строка 189: Строка 192:
*.WMV
*.WMV
~*
~*
/home/pomoyka/*</pre>
/home/trash/*</pre>
 
<!--
Вот, собственно, и всё....
Вот, собственно, и всё…


Может быть кто-нибудь сочтет этот скрипт достойным исправления ...
Может быть кто-нибудь сочтет этот скрипт достойным исправления…
Все это приветствуется ...
Все это приветствуется…


P.S.
P.S.
К сожалению, я забыл, кто был автором исходного скрипта и не могу выразить ему личную благодарность, но все таки ... :)
К сожалению, я забыл, кто был автором исходного скрипта и не могу выразить ему личную благодарность, но все таки ... :)
-->

Версия от 16:57, 27 ноября 2008

48px-Mail-mark-junk red.svg.png
Эта статья протухла.
Её нужно существенно доработать или удалить


Ежедневное инкрементальное архивирование файлов и каталогов

Цель: Создать систему архивирования файлов на отдельный жесткий диск.
Дано: Диск находится в том же системном блоке, что и весь сервер, но не используется постоянно… Круглосуточно он отмонтирован, и монтируется только при создании архива.
Примечания: Файлы, удаляемые из основных каталогов, размещаются в отдельных подкаталогах, из которых их можно восстанавливать.

Скрипт

В ходе продолжительных поисков в Интернете надёргал различных фрагментов, которые, в результате, сложились в такой вот скрипт. Каждый фрагмент скрипта я кратко откоментировал, поэтому тут привожу его целиком:

#!/bin/sh

# Скрипт для инкрементального архивирования rsync backups
# Этот скрипт распространяется под лицензией GPL
# Я использую дополнительный диск, который монтирую при архивировании
# системы, и в случае необходимости, восстановления файлов.
# В другое время диск отключен.
# Примечания: В Linux и FreeBSD команда date работает по разному

# Настройки переменных скрипта

# Почтовый адрес получателя отчета
MAILADDR=your_address@firma.com.ua

# HOSTNAME
#  - Используется в поле "Subj"
HOSTNAME=Linux-Server

# Список каталогов для копирования
# - Это файл со списком каталогов
# по одному на строку.
# Не ставье "/" в конце строки
# Для добавления нового каталога в архив 
# просто добавьте новую строку в файл 
# и запустите скрипт
BACKUPLIST=/etc/backup.lst

# Файл, содержащий одну маску пропускаемых файлов на строку
#  - Смотрите MAN-страницу для примеров
EXCLUDES=/etc/backup-exclude.lst

# корневой каталог для резервных копий
ARCHIVEROOT=/backup

# Начиная с этого места не рискуйте   
# изменять скрипт, если вы не знаете 
# точно как он работает и что вы хотите 

# Каталог, в котором хранится текущая копия файлов
CURRENT=main

# Каталоги, в которых хранятся инкрементарные изменения относительно основного архива
INCREMENTDIR=Deleted-`date +%Y-%m-%d`

# Каталог, который удаляется за ненедобностью. Старше чем 30 дней.
CLEAREDDIR=Deleted-`date -d "-30 day" +%Y-%m-%d`

# Опции, которые передаются rsync
OPTIONS="--force \
   --ignore-errors \
   --delete \
   --delete-excluded \
   --exclude-from=$EXCLUDES \
   --backup \
   --backup-dir=$ARCHIVEROOT/$INCREMENTDIR \
   -aqRS"
 
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin
export LANG=ru_RU.KOI8-R
 
# Убедимся, что диск смонтирован и 
# необходимые каталоги существуют.
 if [ `grep backup /etc/mtab | wc -l` = 1 ]; then 
  install -d $ARCHIVEROOT/$CURRENT
  else
  mount /backup && install -d $ARCHIVEROOT/$CURRENT
  fi

 do_mount()
 {
 if [ -d $ARCHIVEROOT/$CURRENT ]; then 
  echo "Диск был смонтирован..."
  else
  mount /backup 
  fi
 }

# Отмонтируем диск, потому как он нам пока не нужен ...
 do_umount()
 {
 if [ -d $ARCHIVEROOT/$CURRENT ]; then 
  umount /backup
  else
  echo "Диск не был смонтирован... А мы куда сохранялись?"
  fi
 }
  
# Вот это настоящая функция архивирования
 do_rsync()
 {
  cat ${BACKUPLIST} | while read BACKUPDIR; do
  rsync $OPTIONS $BACKUPDIR $ARCHIVEROOT/$CURRENT
  done
 }
 
# Очистим каталог от старых резервных копий...
# Удаляем каталоги вида Deleted-`date +%Y-%m-%d`
# древностью более 30 дней.
  do_clear()
  {
  if [ -d $ARCHIVEROOT/$CLEAREDDIR  ]; then 
  rm -rf $ARCHIVEROOT/$CLEAREDDIR 
  else
  echo "Такого каталога не было в архиве. Нечего удалять..."
  fi
  }
  
# Формирование отчета о работе скрипта
   do_accounting()
   {
  echo "##Использование файловых систем ##">>/tmp/rsync_script_tmpfile
  df -kH >> /tmp/rsync_script_tmpfile
  echo >> /tmp/rsync_script_tmpfile
  echo "## Список сохраняемых каталогов ##">>/tmp/rsync_script_tmpfile
  cat $BACKUPLIST >> /tmp/rsync_script_tmpfile
  echo >> /tmp/rsync_script_tmpfile
  echo "## Игнорируются ##">>/tmp/rsync_script_tmpfile
  cat $EXCLUDES >> /tmp/rsync_script_tmpfile
  echo >> /tmp/rsync_script_tmpfile
  echo "##Удаляется устаревшая копия ##">>/tmp/rsync_script_tmpfile
  echo $ARCHIVEROOT/$CLEAREDDIR >> /tmp/rsync_script_tmpfile
  echo >> /tmp/rsync_script_tmpfile
  echo "##Размеры резервных копий ##">>/tmp/rsync_script_tmpfile
  du -sxh $ARCHIVEROOT/* >> /tmp/rsync_script_tmpfile
  echo >> /tmp/rsync_script_tmpfile
  echo "## Размеры домашних каталогов пользователей ##">>/tmp/rsync_script_tmpfile
  du -sxh $ARCHIVEROOT/$CURRENT/home/* >> /tmp/rsync_script_tmpfile
  echo >> /tmp/rsync_script_tmpfile
  echo "## Создание резервных копий выполнено. ##">>/tmp/rsync_script_tmpfile
   }
         
# Проверим на мелкие ошибки и начнем...
# Вот тут все и происходит. Монтируем, копируем, создаем отчет и отмонтируем диск
if [ -f $EXCLUDES ]; then
  if [ -d $BACKUPDIR ]; then
  echo "Отчет о резервном копировании на $HOSTNAME " > /tmp/rsync_script_tmpfile
  echo >> /tmp/rsync_script_tmpfile
  echo "Копирование начато в `date +%H:%M:%S`, `date +%A`, `date +%d` `date +%B` `date +%Y` :" >> /tmp/rsync_script_tmpfile
  echo >> /tmp/rsync_script_tmpfile
  do_mount && do_rsync && do_clear && do_accounting && do_umount
  echo "Копирование завершено в `date +%H:%M:%S`" >> /tmp/rsync_script_tmpfile
  Mail $MAILADDR -s "$HOSTNAME backup report of `date +%d-%m-%y`" < /tmp/rsync_script_tmpfile
  rm -f /tmp/rsync_script_tmpfile
  else
  echo "cant find $BACKUPDIR"; exit
  fi
else
echo "cant find $EXCLUDES"; exit
fi

Настройки

Осталось привести примеры файлов, в которых находятся собственно списки, что архивировать, и что пропускать при этом … Архивируем:

# cat /etc/backup.lst
/home
/etc
/var/lib/bind
/usr/local/bin
/usr/local/blockit

И пропускаем при этом:

# cat /etc/backup-exclude.lst
*.mp3
*.MP3
*.Mp3
*.avi
*.AVI
*.Avi
*.mdf
*.tmp
*.TMP
*.ASF
*.asf
*.MPG
*.mpg
*.wmv
*.WMV
~*
/home/trash/*