Использование 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 {} \;
|
|
|
|
Раздел: Корень / Администратору / Система / Диски и файлы / Резервное копирование |
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 на виндовой тачке? Если есть, то не могди бы вы его описать.
| |
|