skindud / fsbackup Goto Github PK
View Code? Open in Web Editor NEWThis project forked from opennet/fsbackup
File system backup and synchronization utility
Home Page: http://www.opennet.ru/dev/fsbackup/
License: GNU General Public License v2.0
This project forked from opennet/fsbackup
File system backup and synchronization utility
Home Page: http://www.opennet.ru/dev/fsbackup/
License: GNU General Public License v2.0
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 <[email protected]> --------------------------------------------------------------------------- СОДЕРЖАНИЕ: Назначение. Комплект поставки. Выполняемые функции. Установка. Файл конфигурации. Восстановление данных. Виды бэкапа. Типы хранилища для архива бэкапа. Шифрование бэкапа. Благодарности. --------------------------------------------------------------------------- Назначение: Система 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. <[email protected]> - Предложение о введении уровней говорливости (verbose mode). - Изменить запуск программы (ввести проверку на длину письма), вынести ее в файл fsbackup.cron. - Написал небольшой скрипт fsfind.pl для поиска файла в архивах он просматривает файлы list в директории с архивами. Может кому-то будет полезен. Работает с локальными архивами. - скрипт для бэкапа Interbase баз. Oleg S. Gints <[email protected]>: - Предложение по введению дополнительного резервирования при использовании инкрементального бэкапа. - Обнаружение ошибки в mysql_backup.sh (для варианта полного архива пропущен ключ --all-databases) - Сообщение о неправильном определении уровня инкрементальности для локального бэкапа. - Замечание об отсутствии лидирующих нулей в новом формате именования файлов в бэкапе. Носков Илья <[email protected]>, Сергей Баукин <[email protected]>: - Идея разбивки слишком больших файлов на несколько частей, предложения и патчи по создания архивов занимающих несколько Гб. Aleksey Kuznetsov <[email protected]> - Сообщение о пропуске ключа --all-databases в mysql_backup.sh Pavel Stoliarov <[email protected]> - Исправление ошибки приводящей к некорректной работе при локальном бэкапе. - Предложение по сохранению старых бэкапов после инкремента. Alexandr Zhukov <[email protected]> - Замечание по неправильной работе правила для исключения директории из бэкапа. Zherdev Anatoly <[email protected]> - Патч и идея введения директивы $cfg_stopdir_prune, для отключения рекурсивного просмотра директорий, запрещаемых для помещения в бэкап. Priamikov Alexei <[email protected]> - Обнаружение ошибки в fsrestore.sh Valeriy Zavolodko <[email protected]> - Сообщение о недоработке при установке $cfg_root_path отличных от "/". Руслан Стельмаченко <[email protected]> - Исправление досадной ошибки в скрипте бэкапа MySQL таблиц.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.