0,0 → 1,470 |
FSBACKUP - file system backup and synchronization utility. |
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY WARRANTIES * |
|
For english documentation type 'perldoc fsbackip.pl' |
|
--------------------------------------------------------------------------- |
|
FSBACKUP - система инкрементального резервного копирования и синхронизации ФС. |
http://www.opennet.ru/dev/fsbackup/ |
|
По всем вопросам обращайтесь к автору: Maxim Chirkov <mc@tyumen.ru> |
|
--------------------------------------------------------------------------- |
СОДЕРЖАНИЕ: |
Назначение. |
Комплект поставки. |
Выполняемые функции. |
Установка. |
Файл конфигурации. |
Восстановление данных. |
Виды бэкапа. |
Типы хранилища для архива бэкапа. |
Шифрование бэкапа. |
Благодарности. |
|
--------------------------------------------------------------------------- |
Назначение: |
|
Система fsbackup была создана для обеспечения резервного копирования серверов |
разного масштаба на специально отведенном сервере бэкапа. |
|
Достоинствами метода резервного копирования на специально отведенном сервере, |
с использованием fsbackup, является: |
- высокая производительность (скорость передачи по 100Мбит сети намного |
выше скорости записи на ленточный накопитель), низкая себестоимость |
(цена Мб на современных жестких IDE дисках достаточно низкая); |
|
- надежность (возможность параллельного хранения нескольких резервных |
копий за разные моменты времени); |
|
- безопасность (применение PGP шифрования резервных копий перед записью на |
бэкап сервер); |
|
- автономность (один раз настроив систему бэкап будет производится |
автоматически, не нужно обслуживать стриммер), |
|
- возможность сохранения только измененных с последнего бэкапа данных, без |
затрат на копирования не изменившейся информации. |
|
- простота настройки и установки (как правило система способна |
функционировать сразу после запуска инсталляционного скрипта) |
|
- простота восстановления (открытый формат для хранения резервных копий |
(tar), позволяет восстановить данные без использования входящих в |
комплект утилит восстановления). |
|
- гибкость задания масок для помещения файлов и каталогов в архив. |
|
- поддержка бэкапа баз данных хранимых в MySQL и PostgreSQL. |
|
fsbackup может выполнять создание как полного образа сервера, так и резервных |
копий основных подсистем, исключая операционную систему. В случае полного бэкапа, |
полное восстановление работоспособности происходит в течении нескольких десятков |
минут, в случае частичного бэкапа для восстановления требуется несколько часов. |
|
В отличие от многих систем автоматического резервного копирования, в fsbackup |
применяется гибкая система построения масок (с использованием regex) для |
принятия решения о помещении файлов в бэкап. |
|
|
--------------------------------------------------------------------------- |
Комплект поставки: |
|
create_backup.sh |
Скрипт для периодического запуска всей подсистемы резервного |
копирования из crontab. |
|
install.pl |
Скрипт для установки программы и всех недостающих Perl модулей. |
|
fsbackup.pl |
Основной скрипт для бэкапа и синхронизации. |
|
cfg_example |
Пример файла конфигурации и документация по всем конфигурационным |
директивам. |
|
cache/ |
Образ директории для помещения временных хэшей. |
|
sys_backup/ |
Образ директории для помещения бэкапов созданных sysbackup.sh. |
|
modules/ |
Perl модули которые требуются для функционирования fsbackup.pl. |
|
scripts/ |
Директория со вспомогательными скриптами. |
|
scripts/mysql_backup.sh |
scripts/pgsql_backup.sh |
Скрипты для создания полного и частичного бэкапа базы данных |
хранимой в PostgreSQL или MySQL. |
Поддерживаются режимы работы: |
1. полный бэкап всех баз и структур; |
2. полный бэкап структур всех баз + бэкап данных в избранных базах/таблицах; |
3. полный бэкап структур всех баз + бэкап данных во всех базах, |
кроме избранных баз/таблиц; |
|
scripts/sysbackup.sh |
Скрипт для сохранения списка всех установленных в системе пакетов |
для FreeBSD и Linux, для Linux использующих rpm - сохранение файлов |
конфигурации всех установленных в системе пакетов. |
|
scripts/sysrestore.sh |
Скрипт для автоматической установки всех пакетов, список которых |
был сохранен скриптом sysbackup.sh, в свеже-установленной системе. |
|
scripts/fsrestore.sh |
Скрипт для восстановления данных из инкрементального бэкапа. |
|
--------------------------------------------------------------------------- |
Выполняемые функции: |
|
- 2 метода вычисления контрольных сумм: |
timesize - по атрибутам (дата, время, размер, права доступа...) |
md5 - по содержимому файла. |
|
- 4 вида бэкапа: |
backup - инкрементальный бэкап в архив (т.е. копируются только |
изменившиеся с момента последнего бэкапа файлы). |
full_backup - полный бэкап в архив, без хэша (т.е. всегда копируются |
все файлы). |
sync - синхронизация дерева. |
hash - только генерация хэша, без помещения файлов в архив (может |
использоваться для определения какие файлы были изменены) |
|
- 3 типа хранилища бэкапа: |
local - хранение бэкапа в локальной файловой системе. |
remote_ssh - копирование бэкапа на удаленную машину с использованием SSH |
remote_ftp - копирование бэкапа на удаленную машину по FTP. |
|
- 8 встроенных операторов (можно использовать regex) для описания |
помещаемых в бэкап (или игнорируемых для помещения в бэкап) файлов: |
/dir[/file] - путь к файлу/директории для бэкапа. |
!/dir[/file] - отрицание пути, не помещать в бэкап (не маска, а реальный путь). |
# - комментарий |
=~ - маска для файла или директории, а не абсолютный путь. Первый или второй символ. |
f~ - маска для файла. Первый или второй символ. |
d~ - маска для директории. Первый или второй символ. |
=! - "НЕ" маска для файла или директории, а не абсолютный путь. Первый или второй символ. |
f! - "НЕ" маска для файла. Первый или второй символ. |
d! - "НЕ" маска для директории. Первый или второй символ. |
Ограничен по времени создания и размеру |
|
- Возможность шифрования бэкапа с помощью PGP. |
|
- Гибкое задание уровня инкрементальности. Например, при = 7 - 6 раз |
будут помещаться только изменения, на 7 раз бэкап будет объединен в |
один файл. |
|
- Скрипт для сохранения списка всех установленных в системе пакетов |
для FreeBSD и Linux. |
|
- Скрипты для создания полного и частичного бэкапа базы данных |
хранимой в PostgreSQL или MySQL. Поддерживаются режимы работы: |
- полный бэкап всех баз и структур; |
- полный бэкап структур всех баз + бэкап данных в избранных базах; |
- полный бэкап структур всех баз + бэкап данных во всех базах, |
кроме избранных баз; |
|
|
--------------------------------------------------------------------------- |
Установка: |
|
Для установки достаточно запустить скрипт ./install.pl |
Программа автоматически скопируется в заданный директивой --prefix каталог, |
по умолчанию установка производится в каталог /usr/local/fsbackup. |
|
После установки достаточно переименовать и отредактировать файл конфигурации |
cfg_example, следуя приведенным внутри cfg_example инструкциям. |
Затем, отредактируйте скрипт запуска "create_backup.sh", при необходимости |
измените путь к хранилищу бэкапа и название список используемых файлов |
конфигурации. |
Активируйте периодический запуск подсистема бэкапа в crontab: |
18 4 * * * /usr/local/fsbackup/create_backup.sh| mail -s"`name -n` backup report" root |
При использовании бэкапа SQL сервера или системы отредактируйте скрипты |
в директории ./scripts (mysql_backup.sh, pgsql_backup.sh, sysbackup.sh). |
|
Например: |
>su |
# ./install.pl |
# cd /usr/local/fsbackup |
# vi cfg_example |
# mv cfg_example server_backup.conf |
# vi create_backup.sh |
# crontab -e |
# cd scripts |
# vi sysbackup.sh |
# vi pgsql_backup.sh |
# exit |
> |
|
-------------------------------------------------------------------------- |
Файл конфигурации: |
|
Подробное описание всех параметров файла конфигурации смотрите в файле |
cfg_example. |
|
Внимание, при описании директорий для бэкапа нельзя указывать путь к символической |
ссылке, только полный путь к реальной директории. Например, если указано |
/home, а это символическая ссылка на /usr/home, то в бэкап будет помещены |
данные о символической ссылке, а не содержание директории. |
|
Рекомендуется, описать бэкап разных участков файловой системы в нескольких |
файлах конфигурации. Например, мной используется следующие несколько файлов |
конфигурации: |
server_etc.conf - описывает создание бэкапа директории /etc и секретных |
данных с использованием PGP шифрования; |
server_local.conf - бэкап /usr/local, за исключением временных файлов, |
бэкап БД. |
server_home.conf - бэкап директорий пользователей (/home или /usr/home) |
|
Внимание, директории для сохранения бэкапа в каждом конфигурационном файле |
должны отличаться ($cfg_remote_path, $cfg_local_path), сохранение в одной и |
той же директории нескольких, описанных разными .conf файлами, бэкапов не |
допустимо. |
|
--------------------------------------------------------------------------- |
Восстановление данных: |
|
Полная резервная копия может быть восстановлена в короткий промежуток времени |
без использования дополнительных, входящих в комплект fsbackup утилит. |
Например, если архив бэкапа сохранен в директории /mnt/full_backup, для полного |
восстановления достаточно набрать: |
# cd / |
# tar xzf /mnt/full_backup/full_backup.tar.gz |
# sh /mnt/full_backup/full_backup.dir |
|
Для полного восстановления данных из инкрементального бэкапа может |
использоваться скрипт scripts/fsrestore.sh, для восстановления просто |
отредактируйте пути внутри скрипта и запустите его. |
|
В случае частичного бэкапа файловой системы, без бэкапа файлов операционный |
системы, восстановить исходный набор установленных в момент бэкапа пакетов |
(должен быть разрешен запуск scripts/sysbackup.sh в create_backup.sh) поможет |
скрипт scripts/sysrestore.sh. После установки ОС, скрипт автоматически |
установит недостающие пакеты для FreeBSD и Linux. |
|
При бэкапе данных с SQL сервера PostgreSQL или Mysql, восстановление производится |
командами: psql -d template1 -f sqlbackupfile или mysql < sqlbackupfile. |
|
Таким образом можно привести типовой процесс полного восстановления системы: |
- базовая установка ОС (без дополнительных пакетов) |
- монтирование диска с бэкапом. |
- редактирование путей и запуск scripts/sysrestore.sh для установки нужных |
пакетов. |
- редактирование путей и запуск scripts/fsrestore.sh |
- запуск SQL сервера и восстановление баз. |
|
|
Назначение файлов при инкрементальном бэкапе (для не инкрементального - формат |
"имя.ext"): |
имя-время-том.tar.gz архив - бэкапа |
(имя_бэкапа-YYYY.MM.DD.HH.MM.SS-номер_тома.tar.gz). |
имя-время.del список удаленных с момента предыдущего бэкапа файлов |
имя-время.hash хэш таблица с контрольными суммами. |
имя-время.list список файлов в архиве. |
имя-время.dir команды для восстановления прав доступа и пустых директорий. |
|
|
--------------------------------------------------------------------------- |
Виды бэкапа: |
|
|
Вид бэкапа в файле конфигурации определяется параметром $cfg_backup_style: |
backup - инкрементальный бэкап в архив. Копируются только |
изменившиеся с момента последнего бэкапа файлы, уровень |
инкрементальности задается параметром $cfg_increment_level, |
параметр определяет через какого числа итераций файлы с |
инкрементальными копиями будут объединены в один файл. Например, |
при $cfg_increment_level = 7 - 6 раз будут помещаться только |
изменения, на 7 раз бэкап будет объединен в один файл. |
0 - сколько угодно раз, без объединения. Достоинства - возможность |
отследить изменения (и восстановить данные) на любой момент со |
времени первой итерации, в архив копируются только измененные и |
новые данные, что значительно экономит трафик и место на диске. |
Подходит для ежедневного бэкапа динамично меняющейся или критичной |
к потере информации. |
|
full_backup - полный бэкап в архив, без хэша. В бэкап всегда помещаются |
все файлы отмеченные в файле конфигурации для резервного |
копирования). На сервере где сохраняется бэкап рекомендуется |
проводить вторичное резервирование, например, в crontab раз |
в неделю дублировать бэкап в другую директорию. Недостатки - |
огромный трафик для копирования бэкапа по сети и высокие |
требования к объему хранилища бэкапа. Достоинство - экономия |
процессорных ресурсов и памяти на создание и поддерживание хэша. |
Прекрасно подходит для бэкапа маломощных машин с ограниченными |
ресурсами или при статичности резервируемых данных (например, |
бэкап выносных рутеров раз в месяц). |
|
sync - синхронизация дерева (только для типа хранилища ssh или local). |
Почти то же, что и full_backup или backup (в зависимости от задания |
ключа -c при запуске fsbackup.pl), за исключением того, что копия |
не хранится в архиве, а область файловой системы отмеченная для |
бэкапа полностью воссоздается в заданной директории на бэкап сервере. |
Предназначено для параллельного хранения (синхронизации дерева) |
исходных текстов, содержимого web-сервера, синхронизации проектов |
с рабочей машины разработчика на сервер и т.д. |
|
hash - только генерация хэша, без помещения файлов в архив (опция -h). |
Может применяться для пометки помещения файлов в бэкап, без |
физического их перемещения, для отслеживания изменений в файловой |
системе для обнаружения подмены файлов злоумышленниками и т.д. |
|
|
Скрипт fsbackup.pl, поддерживает ряд ключей задаваемых в командной строке: |
fsbackup.pl [-n|-f|-h|-c] файл_конфигурации |
-n - создаем новый архив независимо от состояния хэша. |
-f - full_backup - полный бэкап в архив, без хэша. |
-h - hash - только генерация хэша, без помещения файлов в архив. |
-c - clean - очистка хранилища с инкрементальным бэкапом и создание |
нового бэкапа. |
|
--------------------------------------------------------------------------- |
Типы хранилища для архива бэкапа: |
|
Определение типа хранилища для бэкапа определяется в файле конфигурации |
переменной $cfg_type. Поддерживается 3 типа хранилищ: local, remote_ssh |
и remote_ftp. |
|
- local - сохранение бэкапа в локальной файловой системе. |
Конфигурация: |
$cfg_type="local"; |
$cfg_local_path="/var/backup"; # Путь к хранилищу. |
|
- remote_ssh - сохранение бэкапа на удаленном компьютере, данные передаются |
через шифрованное соединение организованное с использованием SSH. |
На системе с которой производится бэкап должен быть установлен ssh клиент, |
на удаленном - ssh сервер. Метод remote_ssh является наиболее защищенным, |
но и достаточно ресурсоемким. Предварительно необходимо настроить доступ |
бэкап клиента на сервер с использованием шифрованных ключей, без ввода |
пароля. Это делается следующим образом: |
|
Примем: локальная машина - машина с которой будет производиться бэкап и |
на которой будем запускать скрипт fsbackup.pl. Удаленная машина - машина |
на которую будут копироваться файлы с бэкапом. |
Запускаем на локальной машине программу ssh-keygen, на все задаваемые |
вопросы принимаем значения по умолчанию (поле passphrase оставляем |
пустым). Далее, запускаем программу ssh-copy-id user@remotehost, где |
user - пользователь удаленной машины remotehost - адрес удаленной машины, |
( или вручную, на удаленной машине в директории ~/.ssh, создаем файл |
authorized_keys, куда копируем содержимое файла identity.pub с локальной |
машины). Для увеличения безопасности в файл ~/.ssh/authorized_keys на |
удаленной машине добавляем перед ключом (разделив пробелом) строку |
from="localhost", где localhost - адрес локальной машины |
(from="localhost" 1024 23 1343.....). |
|
Конфигурация: |
|
$cfg_type="remote_ssh"; |
$cfg_remote_host="server.remote.ru"; # Сервер на который будет копироваться бэкап. |
$cfg_remote_login="backup_login"; # Логин под которым будет сохранятся бэкап. |
$cfg_remote_path="/home/backup_login/backup"; # Директория куда должны помещаться файлы бэкапа, директория должна присутствовать. |
|
- remote_ftp - сохранение бэкапа на удаленном компьютере, данные передаются |
по протоколу ftp, на удаленном хосте должен быть запущен ftp сервер. |
Так как пароль хранится в файле конфигурации в открытом виде, желательно |
ограничить доступ к хосту к удаленному хосту через tcpwrapper или firewall, |
а так же ограничить вход пользователя, под которым будет храниться бэкап, |
только через chroot ftp. Положительными сторонами копирования по ftp, |
является высокая производительность закачки и небольшая нагрузка на CPU. |
|
Конфигурация: |
|
$cfg_type="remote_ftp"; |
$cfg_remote_host="server.remote.ru"; # Сервер на который будет копироваться бэкап. |
$cfg_remote_password="Test1234"; # пароль для входа по ftp. |
$cfg_remote_login="backup_login"; # Логин под которым будет сохранятся бэкап. |
$cfg_remote_path="/home/backup_login/backup"; # Директория куда должны помещаться файлы бэкапа, директория должна присутствовать. |
|
|
--------------------------------------------------------------------------- |
Шифрование бэкапа: |
|
Для шифрования бэкапа в системе должна быть установлена программа PGP шифрования |
GnuPG: http://www.gnupg.org (рекомендуется) или PGP: http://www.pgpi.org |
|
Далее: |
Локальная машина - машина на которой производится резервное копирование. |
Удаленная машина - машина куда сохраняется архив бэкапа. |
|
Рекомендации по работе с PGP программами для создания шифрованного бэкапа |
(для pgp2.6, pgp5.0, gnupg): |
|
Для создания публичного и секретного ключей наберите (на удаленной машине): |
pgp2.6> pgp -kg |
pgp5.0> pgpk -g |
gnupg> gpg --gen-key # если генерация ключа занимает слишком много времени |
воспользуйтесь ключом gpg --quick-random |
|
Экспортируйте созданный публичный ключ в файл (на удаленной машине): |
pgp2.6> pgp -akx <UserID> <файл куда будет записан ключ> |
pgp5.0> pgpk -ax <UserID> <файл куда будет записан ключ> |
gnupg> gpg --export -a <UserID> > <файл куда будет записан ключ> |
|
Затем, добавте созданный публичный ключ (на локальной машине): |
pgp2.6>pgp -ka <файл с ключом с удаленной машины> |
pgp5.0>pgpk -a <файл с ключом с удаленной машины> |
gnupg>gpg --import <файл куда будет записан ключ> |
# Для pgupg необходимо заверить ключ: |
gnupg>gpg --sign-key <имя ключа> |
|
Для расшифровки необходимо запустить (на удаленной машине): |
pgp2.6>cat encrypted.tar.gz | pgp -f -z'пароль' > расшифрованный.tar.gz |
pgp5.0>cat encrypted.tar.gz | pgpv -f -z'пароль' > расшифрованный.tar.gz |
gnupg>cat encrypted.tar.gz | gpg --decrypt > расшифрованный.tar.gz |
|
Для шифрования используется (на локальной машине): |
pgp2.6>cat input| pgp -ef userid > output |
pgp5.0>cat input| pgpe -f userid > output |
gnupg>cat input| gpg -e -r userid > output |
|
|
|
--------------------------------------------------------------------------- |
Благодарности: |
Alex Sokoloff. <sokoloff@mail.ru> |
- Предложение о введении уровней говорливости (verbose mode). |
- Изменить запуск программы (ввести проверку на длину |
письма), вынести ее в файл fsbackup.cron. |
- Написал небольшой скрипт fsfind.pl для поиска файла в архивах он |
просматривает файлы list в директории с архивами. Может кому-то |
будет полезен. Работает с локальными архивами. |
- скрипт для бэкапа Interbase баз. |
|
Oleg S. Gints <oleg@cec.amur.elektra.ru>: |
- Предложение по введению дополнительного резервирования при |
использовании инкрементального бэкапа. |
- Обнаружение ошибки в mysql_backup.sh (для варианта полного архива |
пропущен ключ --all-databases) |
- Сообщение о неправильном определении уровня инкрементальности для |
локального бэкапа. |
- Замечание об отсутствии лидирующих нулей в новом формате именования |
файлов в бэкапе. |
|
Носков Илья <phantom@highway.ru>, Сергей Баукин <teq@highway.ru>: |
- Идея разбивки слишком больших файлов на несколько частей, |
предложения и патчи по создания архивов занимающих несколько Гб. |
|
Aleksey Kuznetsov <ahk@spb.edu> |
- Сообщение о пропуске ключа --all-databases в mysql_backup.sh |
|
Pavel Stoliarov <admin@tzto.infopac.ru> |
- Исправление ошибки приводящей к некорректной работе при локальном |
бэкапе. |
- Предложение по сохранению старых бэкапов после инкремента. |
|
Alexandr Zhukov <sacha@ic.vrn.ru> |
- Замечание по неправильной работе правила для исключения |
директории из бэкапа. |
|
Zherdev Anatoly <tolyar@mx.ru> |
- Патч и идея введения директивы $cfg_stopdir_prune, для отключения |
рекурсивного просмотра директорий, запрещаемых для помещения в бэкап. |
|
Priamikov Alexei <apriam@info.novsu.ac.ru> |
- Обнаружение ошибки в fsrestore.sh |