FSBackup
ФоркИзбранное
0
0
Описание
Система инкрементального резервного копирования и синхронизации ФС
Языки
- Shell50,2%
- Perl49,8%
Alexander Molchanov
17 июл 2020, 01:09
13 лет назад
13 лет назад
13 лет назад
6 лет назад
13 лет назад
15 лет назад
13 лет назад
15 лет назад
13 лет назад
13 лет назад
13 лет назад
13 лет назад
13 лет назад
13 лет назад
11 лет назад
15 лет назад
13 лет назад
README
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"`uname -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"; # Директория куда должны помещаться файлы бэкапа, директория должна присутствовать.
$cfg_remote_ftp_mode=0; # Active (0) или Passive (1) соединение.
---------------------------------------------------------------------------
Шифрование бэкапа:
Для шифрования бэкапа в системе должна быть установлена программа 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 необходимо заверить ключ (gpg --gen-key на локльной машине не забудте):
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
Valeriy Zavolodko <vals@pa.ktts.kharkov.ua>
- Сообщение о недоработке при установке $cfg_root_path отличных от "/".
Руслан Стельмаченко <xak2000@gmail.com>
- Исправление досадной ошибки в скрипте бэкапа MySQL таблиц.