BackUp/DayOfDayBackUp
Материал из ALT Linux Wiki
(Различия между версиями)
Ilis (обсуждение | вклад) (→Ежедневное инкрементальное архивирование файлов и каталогов) |
|||
(8 промежуточных версий не показаны.) | |||
Строка 1: | Строка 1: | ||
- | |||
[[Категория:Admin]] | [[Категория:Admin]] | ||
- | |||
__TOC__ | __TOC__ | ||
Строка 11: | Строка 9: | ||
=== Скрипт === | === Скрипт === | ||
- | В ходе продолжительных поисков в Интернете | + | В ходе продолжительных поисков в Интернете было надёргано различных фрагментов, которые, в результате, сложились в представленный далее скрипт. Каждый фрагмент скрипта хорошо прокоментирован, поэтому приводится тут целиком: |
- | Каждый фрагмент скрипта | + | |
<source lang="bash"> | <source lang="bash"> | ||
Строка 125: | Строка 122: | ||
do_accounting() | do_accounting() | ||
{ | { | ||
- | echo "##Использование файловых систем ##">>/tmp/rsync_script_tmpfile | + | echo "## Использование файловых систем ##">>/tmp/rsync_script_tmpfile |
df -kH >> /tmp/rsync_script_tmpfile | df -kH >> /tmp/rsync_script_tmpfile | ||
echo >> /tmp/rsync_script_tmpfile | echo >> /tmp/rsync_script_tmpfile | ||
Строка 134: | Строка 131: | ||
cat $EXCLUDES >> /tmp/rsync_script_tmpfile | cat $EXCLUDES >> /tmp/rsync_script_tmpfile | ||
echo >> /tmp/rsync_script_tmpfile | echo >> /tmp/rsync_script_tmpfile | ||
- | echo "##Удаляется устаревшая копия ##">>/tmp/rsync_script_tmpfile | + | echo "## Удаляется устаревшая копия ##">>/tmp/rsync_script_tmpfile |
echo $ARCHIVEROOT/$CLEAREDDIR >> /tmp/rsync_script_tmpfile | echo $ARCHIVEROOT/$CLEAREDDIR >> /tmp/rsync_script_tmpfile | ||
echo >> /tmp/rsync_script_tmpfile | echo >> /tmp/rsync_script_tmpfile | ||
- | echo "##Размеры резервных копий ##">>/tmp/rsync_script_tmpfile | + | echo "## Размеры резервных копий ##">>/tmp/rsync_script_tmpfile |
du -sxh $ARCHIVEROOT/* >> /tmp/rsync_script_tmpfile | du -sxh $ARCHIVEROOT/* >> /tmp/rsync_script_tmpfile | ||
echo >> /tmp/rsync_script_tmpfile | echo >> /tmp/rsync_script_tmpfile | ||
Строка 194: | Строка 191: | ||
~* | ~* | ||
/home/trash/*</pre> | /home/trash/*</pre> | ||
- | + | ||
Вот, собственно, и всё… | Вот, собственно, и всё… | ||
Строка 202: | Строка 199: | ||
P.S. | P.S. | ||
К сожалению, я забыл, кто был автором исходного скрипта и не могу выразить ему личную благодарность, но все таки ... :) | К сожалению, я забыл, кто был автором исходного скрипта и не могу выразить ему личную благодарность, но все таки ... :) | ||
- | + | ||
+ | === Другие системы === | ||
+ | |||
+ | * [http://packages.debian.org/ru/sid/mrb Manage incremental data snapshots with make/rsync] | ||
+ | [[Категория:Admin]] | ||
+ | {{Category navigation|title=Системному администратору|category=Admin|sortkey={{SUBPAGENAME}}}} |
Текущая версия на 16:41, 1 июля 2015
Содержание |
Ежедневное инкрементальное архивирование файлов и каталогов
- Цель: Создать систему архивирования файлов на отдельный жесткий диск.
- Дано: Диск находится в том же системном блоке, что и весь сервер, но не используется постоянно… Круглосуточно он отмонтирован, и монтируется только при создании архива.
- Примечания: Файлы, удаляемые из основных каталогов, размещаются в отдельных подкаталогах, из которых их можно восстанавливать.
Скрипт
В ходе продолжительных поисков в Интернете было надёргано различных фрагментов, которые, в результате, сложились в представленный далее скрипт. Каждый фрагмент скрипта хорошо прокоментирован, поэтому приводится тут целиком:
#!/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/*
Вот, собственно, и всё…
Может быть кто-нибудь сочтет этот скрипт достойным исправления… Все это приветствуется…
P.S. К сожалению, я забыл, кто был автором исходного скрипта и не могу выразить ему личную благодарность, но все таки ... :)