The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Использование rdiff-backup
Иногда при проведении резервного копирования, бэкапов, не требуется вся мощь
систем уровня предприятия,
таких как, например, Bacula. Но, с другой строны, не совсем подходят и простые самописные скрипты. 
Как всегда, требуется что-то среднее.

Вот тут-то и следует обратить внимание на rdiff-backup (http://www.nongnu.org/rdiff-backup/).

rdiff-backup - это кучка скриптов на питоне, которые хранят историю файлов,
сохраняя на диске только их отличия.
rdiff-backup бэкапит один каталог в другой. Целевой каталог в результате содержит 
копию исходного каталога. Различия текущей и предыдущей копий исходного каталога сохраняются 
в отдельном месте, поэтому можно восстановить и удаленные файлы. rdiff-backup может 
также работать через конвейер с ограничением полосы пропускания, подобно rsync. 
Вы можете использовать rdiff-backup и ssh для безопасного копирования данных на удаленную систему, 
причем передаваться будут только различия. Система корректно работает с символическими ссылками, 
файлами устройств, правами и т.д. и может быть использована для копирования всей файловой системы.

На сервере-хранилище-бэкапов и всех серверах, учавствующих в резервном
копировании необходимо установить rdiff-backup.

Авторизацию для ssh делаем с помощью AuthorizedKeysFile.

Если на хосте-хранилище-бэкапов используется нестандартный порт для ssh, 
то на хосте откуда бэкапим (клиенте) делаем файл ~/.ssh/config

   Host host.tld
      Port 3333
      Protocol 2
      Compression yes


Пример скрипта

Скрипт бэкапит базу MySQL и каталоги виртуальных хостов с клиента (client.tld)
на сервер бэкапов (host.tld).
Чтобы быстро находить нужный бэкап, на хосте-хранилище-бэкапов создаются каталоги 
по именам хостов-клиентов и далее уже в каждом из них хранится дерево каталогов, как и в оригинале.

   #!/bin/sh

   TMPDIR="/tmp/mysqldump"
   DUMPFILE="${TMPDIR}/client.tld.mysqldump"

   echo -e "\nmysqldump start...\n"
   mkdir "${TMPDIR}"

   /usr/bin/mysqldump --single-transaction --quick --skip-extended-insert \
      -uUSER -pPASSWORD NAMEDB > "${DUMPFILE}"
   /usr/bin/rdiff-backup --print-statistics "${TMPDIR}" \
      user@host.tld::"client.tld/mysqldump"
   rm -f "${DUMPFILE}"
   rmdir --ignore-fail-on-non-empty "${TMPDIR}"

   echo -e "\n\nstart /var/www/vhosts backup ...\n"

   /usr/bin/rdiff-backup --create-full-path --exclude-symbolic-links --exclude-sockets \

      --exclude-special-files --exclude-fifos --exclude-device-files --no-hard-links \
      --print-statistics \
      "/var/www/vhosts" user@host.tld::"client.tld/var/www/vhosts"

В cron'е можно изобразить что-нибудь типа:

  /root/bin/mybackup.sh | \
      /bin/mail -c "admin@domain.com" -s "`uname -n` backup report" root@localhost

Вы будете получать примерно такие отчеты:

   --------------[ Session statistics ]---------
   StartTime 1227924257.00 (Sat Nov 29 02:04:17 2008)
   EndTime 1227924381.73 (Sat Nov 29 02:06:21 2008)
   ElapsedTime 124.73 (2 minutes 4.73 seconds)
   SourceFiles 2883
   SourceFileSize 31441627 (30.0 MB)
   MirrorFiles 2883
   MirrorFileSize 31441627 (30.0 MB)
   NewFiles 0
   NewFileSize 0 (0 bytes)
   DeletedFiles 0
   DeletedFileSize 0 (0 bytes)
   ChangedFiles 0
   ChangedSourceSize 0 (0 bytes)
   ChangedMirrorSize 0 (0 bytes)
   IncrementFiles 0
   IncrementFileSize 0 (0 bytes)
   TotalDestinationSizeChange 0 (0 bytes)
   Errors 0


Восстановление

Если что-то случится с rdiff-backup, то восстановить данные можно простым
копированием, и это важно.

Пример стандартной команды для восстановления (где host.tld - хост-хранилище-бэкапов) :

   rdiff-backup -r now user@host.tld::"client.tld/var/www/vhosts" /tmp/vhosts

Восстановление файлов в состоянии как 10 дней назад :

   rdiff-backup -r 10D user@host.tld::"client.tld/var/www/vhosts" /tmp/vhosts

см. также секцию TIME FORMATS в man.

Дополнительно

Существует RdiffWeb для web-доступа к резервным копиям, сделанным утилитой rdiff-backup.


Дополнение от редактора: 

При использовании стандартного rsync, для отдельного сохранения изменений накопившихся за день 
в отдельной директории, можно использовать примерно такой скрипт:

   snapshot_dir="/snapshot/backup_snap/`date \+\%Y_\%m_\%d`"
   mkdir $snapshot_dir
   /usr/local/bin/rsync -a -v --delete --max-delete=1000 --hard-links \
      --delete-excluded --exclude-from=/etc/rsync_backup.exclude / /backup \
      --backup --backup-dir=$snapshot_dir

В /etc/rsync_backup.exclude добавляем список исключений ( в конце "/*" чтобы директория создалась):
 
   /backup/*
   /snapshot/*
   /mnt/*
   /var/log/*
   /proc/*
   ... и т.п.

Для чистки снапшотов старее 30 дней, в cron добавляем:

   find /snapshot/backup_snap/ -type d -maxdepth 1 -mtime +30 -exec rm -rf {} \;
 
01.12.2008 , Автор: Yuri Trofimov , Источник: http://sysadminonline.ru/rdiff-back...
Ключи: rsync, backup
Раздел:    Корень / Администратору / Система / Диски и файлы / Резервное копирование

Обсуждение [ RSS ]
  • 1, Pilat (ok), 23:10, 04/12/2008 [ответить]  
  • +/
    >Если что-то случится с rdiff-backup, то
    >восстановить данные можно простым копированием, и
    >это важно.

    Если архив накроется - а накрывается он довольно часто, - восстановить его непросто.

    Две проблемы у rdiff-backup: очень много файлов, на ftp не закинуть, и проблемы после прерывания процесса бэкапирования. По сути это система сохранения версий состояния системы, а не создания бэкапов.

    Достоинство - даже базы mysql он копирует инкрементально, только изменения. Конечно, базы данных бех проверки md5 копировать не стоит.

     
  • 2, anonymous (??), 17:19, 05/12/2008 [ответить]  
  • +/
    По своему опыту использования rdiff-backup, от которого в итоге пришлось отказаться, хочу предостеречь, что если он бэкапит директорию, где в это время удалился файл, то процесс аварийно завершается с жалобой "файл пропал". Было это 2 года назад, так что может в новых версиях ошибки нет.

    Также обращаю внимание (в статье на этом акцент не сделан), что файлы типа MySQL-дампов надо заливать именно как текст, а не архив, иначе инкрементального бэкапа не получится, т.к. дифф нового файла от старого будет равняться всему новому файлу :)

    А вообще SVN рулит - инструментарий работы с данными несравнимо шире, есть репликация репозиториев, GUI-клиенты (простой - RapidSVN, онлайновый - http://www.viewvc.org). Репозиторий кстати сжатый (формат delta3).

     
  • 3, Alman (??), 15:04, 22/12/2008 [ответить]  
  • +/
    Очень хочется знать, есть ли эффективный способ использования rdiff-backup на виндовой тачке? Если есть, то не могди бы вы его описать.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру