Максим Тимофеев
fsbackup: удобная и компактная утилита для резервного копирования
Архивирование данных – процесс обязательный. Смерть настигает каждый винчестер, независимо от его объема, производителя или количества кондиционеров в серверной. Вот и сейчас, пока вы листаете журнал, кто знает, быть может, крах угрожает и вашему серверу…
В настоящее время нет дефицита в программах резервного копирования и восстановления данных. Начиная от стандартных, входящих в состав операционной системы (dump/restore, tar, cpio), и заканчивая сложными (amanda, bacula), они позволяют создавать архивы, удовлетворяющие любым капризам пользователя. В журнале №9 за 2006 год была опубликована статья Сергея Яремчука, кратко описывающая эти системы. При этом в поле зрения автора не попала программа fsbackup, написанная нашим соотечественником Максимом Чирковым и предоставляющая хорошие возможности вкупе с небольшим размером.
Функциональность
Fsbackup – небольшая бесплатная утилита для создания резервных копий, представляет собой набор скриптов, позволяющих без усилий получить заархивированную копию необходимых файлов. Помимо файлов, fsbackup поддерживает бэкап баз данных MySQL, PostgreSQL и SQLite. Есть возможность шифрования создаваемых архивов программой gpg. Языки, на которых она написана (perl и sh), позволяют без изменений переносить эту программу между платформами, все необходимые для работы fsbackup библиотеки поставляются в одном архиве со скриптами.
Для создания архивов используются средства системы, а результат сохраняется в формате .tar.gz, что дает возможность впоследствии восстановить данные, не прибегая к помощи сторонних программ, пользуясь штатными средствами операционной системы.
Fsbackup поддерживает инкрементное копирование, похожее на то, что есть в программе dump, за тем лишь исключением, что возможно создание только двух уровней архива. При первом архивировании производится копирование всех файлов, после чего помещению в архив подлежат только файлы, претерпевшие изменения. После определенного в конфигурационном файле количества таких «мелких» резервных копий вновь создается полный архив, но уже с учетом произведенных изменений. Возможность синхронизации дерева может быть полезной в случае, когда нужно иметь копию области файловой системы в несжатом виде, например для хранения документов одновременно на нескольких компьютерах. Этот режим позволяет воспроизвести в месте хранения архива ту же структуру файлов и каталогов, что и на источнике. Еще один вид копирования – hash. На самом деле при работе с этим параметром никакого копирования не происходит, а генерируется лишь хэш-сумма файла, которая в дальнейшем может использоваться для отслеживания изменений в нем.
Помимо локальной машины fsbackup умеет делать архивы и на удаленной, передавая данные либо по протоколу SSH, либо по FTP, не используя специального сервера. Для передачи по FTP нужно указать данные сервера, логин и пароль в конфигурационном файле, что представляется не совсем безопасным, поэтому более предпочтительно использовать SSH со сгенерированными ранее ключами, чтобы программа не запрашивала пароль при каждом входе на сервер. Кроме этого, по FTP невозможна работа в режиме синхронизации. Этот вид хранилища может быть востребован в случае нехватки ресурсов, потому как является менее «прожорливым», чем SSH. Архивирование производится на стороне клиента, это удобно, если объем сжимаемых данных велик, а в качестве сервера выступает обычная рабочая станция и даже несколько сжимающих процессов способны занять все ресурсы системы.
Реализация
Основу fsbackup составляет perl-скрипт, который так и называется: fsbackup.pl. Единственным и обязательным его параметром является название конфигурационного файла. Формат файла настроек очень прост – это обычные perl-переменные, которым присваиваются необходимые значения. Еще одним плюсом утилиты является возможность организовать выборочное архивирование, помещая в архив лишь указанные файлы или каталоги, либо исключая ненужные. Секция с указанием этих правил называется «__DATA__» и располагается в конфигурационном файле сразу за списком переменных. Сами правила имеют вид простых регулярных выражений. Конфигурационный файл очень хорошо документирован автором на русском и английском языках, подробно объяснен каждый пункт настроек.
При копировании в каталоге-приемнике создается несколько файлов: сам архив (*.tar.gz); список файлов, удаленных с момента предыдущего копирования (*.del); shell-скрипт для создания пустых каталогов и установки необходимых атрибутов на файлы: время создания, владелец, права доступа (*.dir); контрольная сумма файлов (*.hash); список файлов, помещенных в архив (*.list).
Помимо основного скрипта в состав утилиты входят скрипты вспомогательные:
- create_backup.sh – скрипт, который следует поместить в crontab для регулярного запуска резервного копирования;
- fsrestore.sh – восстанавливает данные из инкрементного архива. Поочередно просматривает все архивы, извлекает нужные файлы и удаляет те, которые перечислены в файле *.del;
- sysbackup.sh – создает список пакетов, имеющихся в системе. Автоматически установить пакеты из этого списка поможет sysrestore.sh;
- mysql_backup.sh, pgsql_backup.sh, sqlite_backup.sh – эти скрипты предназначены для бэкапа соответствующих баз данных. Поддерживаются режимы полного копирования всех баз; копирования только указанных баз; копирования всех баз, кроме указанных.
Работа fsbackup зависит от множества параметров (аппаратное обеспечение, пропускная способность сети (если вид хранилища не local), тип и объем архивируемых данных, наличие или отсутствие шифрования), поэтому нагрузка на систему и время, затраченное на создание резервной копии, варьируется от компьютера к компьютеру.
Недочеты
Как обычно, в программе присутствуют и минусы. В первую очередь, это работа с многотомными архивами. Программа tar, используемая в fsbackup, не умеет разбивать файлы на несколько частей, поэтому при архивировании больших по объему файлов параметр максимального размера архива не работает. Вероятно, ситуацию можно исправить использованием утилиты split.
Не реализована возможность восстановления из резервной копии отдельных файлов, хотя не представляет никакой сложности сделать это при помощи утилиты tar. Например, для того чтобы извлечь файл /home/user/.bash_history из архива archive.tar.gz, нужно запустить архиватор со следующими параметрами:
tar xzf arch.tar.gz home/user/.bash_history
Таким же способом восстанавливаются целые каталоги.
В OpenBSD используется иная, чем в Linux и FreeBSD, версия tar, и для того чтобы заставить fsbackup работать в этой системе, необходимо отредактировать скрипт fsbackup.pl, заменяя параметр «-T» в вызовах программы tar на «-I».
С натяжкой к минусам можно отнести отсутствие графической оболочки для конфигурирования и управления утилитой, ведь многие пользователи предпочитают голой консоли более понятный и удобный вид. Но, с другой стороны, на сервере графическая часть совершенно ни к чему, поэтому утверждать, что данный пункт является минусом, некорректно.
В целом, fsbackup – это компактная, удобная и очень простая для понимания программа, которая исправно исполняет то, для чего предназначена.