FAQ - ОТВЕТЫ НА ЧАСТО-ЗАДАВАЕМЫЕ ВОПРОСЫ ------------------------------------------------------------------------------- Как увеличить быстродействие и снизить нагрузку на процессор при шифровании бэкапа ? При использовании шифрования через gpg, рекомендуется установить значение $prog_gzip="" (т.е. отключить сжатие архива), так как gpg перед шифрованием самостоятельно сжимает данные. Использование gzip приведет к двойному сжатию и лишней нагрузке на CPU. ------------------------------------------------------------------------------- Возникло опасение, что при большом количестве файлов fsbackup съест все ОЗУ. Ничего подобного, одним из достоинств fsbackup является очень экономные требования к памяти, за счет использования для хранения хэшей библиотеки DBM. По умолчанию, используется не более 4 Мб ОЗУ. ------------------------------------------------------------------------------- Как увеличить быстродействие и оптимизировать распределение памяти для бэкапа ? По умолчанию в памяти находится только 4 Мб индексов, остальное сбрасывается на диск. Быстродействие создания бэкапа можно _на_порядок_ увеличить, за счет увеличения размер кэша для размещения хэш таблицы в памяти. Для этого в fsbackup.pl нужно изменить значения константы: use constant DB_DEF_CACHE_SIZE => размер_кэша_в_байтах; Чем больше DB_DEF_CACHE_SIZE - тем лучше. ------------------------------------------------------------------------------- Собрался сменить fsbackup 1.0 на 1.1 (1.2). Не будет ли проблем с существующей конфигурацией, при переходе на новую версию ? Можно смело оставить старые файлы конфигурации, заменив только скрипты. При желании активировать новинки, появившиеся в 1.1 (1.2), загляните в CHANGES и добавьте новые переменные в старые конфиги. ------------------------------------------------------------------------------- Зачем было создавать свою систему бэкапа SQL таблиц, когда есть pg_dump и mysqldump ? Ни тот ни другой не умеют бэкапить все базы, с пропуском нескольких. Например, бэкап всех баз на MySQL сервере, кроме ненужной гигобайтовой базы словоформ для поисковика. fsbackup же опирается на три кита: полный бэкап всех баз, бэкап только указанных в backup_db_list баз данных и бэкап всех баз, кроме указанных в backup_db_list. Начиная с версии 1.2 fsbackup умеет производить бэкап (или исключать из бэкапа) не только отдельные базы, но и таблицы. ------------------------------------------------------------------------------- Как наиболее грамотно организовать бэкап сервера и большим объемом данных ? Рекомендуется, описать бэкап разных участков файловой системы в нескольких файлах конфигурации. Например, создать следующие конфигурации: server_etc.conf - описывает создание бэкапа директории /etc и секретных данных с использованием PGP шифрования; server_local.conf - бэкап /usr/local, за исключением временных файлов. server_sql.conf - бэкап БД. server_home.conf - бэкап директорий пользователей (/home или /usr/home) server_soft.conf - бэкап архива программ (без сжатия) Внимание, директории для сохранения бэкапа в каждом конфигурационном файле должны отличаться ($cfg_remote_path, $cfg_local_path), сохранение в одной и той же директории нескольких, описанных разными .conf файлами, бэкапов не допустимо. ------------------------------------------------------------------------------- Почему при указании переменной $cfg_maximum_archive_size=100, несжатые тома архива оказываются размером немного больше или меньше 100 Кб ? Переменная $cfg_maximum_archive_size учитывает реальный размер данных в файлах плюс примерный размер атрибутов файла или директории. При этом том завершается когда значение счетчика байт больше указанного в конфигурации значения. Например, если последним добавляется файл размером 70Кб и размер уже скомпонованного тома равен 90 Кб, то будет создан архивный файл размером 90 Кб, а файл размером 70 Кб. будет помещен в следующий том. Т.е. система старается создавать архивные тома размером чуть меньше, чем размер указанный в файле конфигурации, за исключением случая наличия файла размер которого больше лимита накладываемого на размер тома, в этом случае файл целиком помещается в архивный том, несмотря на его большой размер. Предотвратить создание архивных томов не помещающихся на накопитель, используемый для резервирования, можно определив максимально возможный размер файла для помещения в архив ($cfg_size_limit). ------------------------------------------------------------------------------- Как мне не архивировать файлы из таких - то каталогов, причем сами каталоги должны быть. Например, почтовые каталоги qmail, задаю маску: =!Maildir/cur/* в результате не создает в архиве каталогов cur в профилях пользователя. Достаточно указать: =!.*/Maildir/new/.* тогда все файлы внутри /Maildir/new/ не будут помещены в архив, а директория будет добавлена в .dir файл и при восстановлении будет воссоздана. В tar архив пустые директории не помещаются, только в .dir список. ------------------------------------------------------------------------------- Почему fsbackup не делает backup каталогов, если в них нет файлов ? Пустые каталоги просто не отражены в tar архиве (ровно как и права доступа на все каталоги). Для хранения полного списка каталогов и прав доступа к ним, используется .dir файл, выполненный в виде обычного shell сценария. При восстановлении данных из backup, необходимо не только раскрыть .tar архив, но и выполнить .dir сценарий. ------------------------------------------------------------------------------- Что можете порекомендовать для бэкапа нескольких серверов ? - Выделить старую машину с большим диском под backup-сервер. - Вынести backup-сервер с тех. площадки, рекомендуется в другое здание (например в удаленный офис), на случай пожара, грабежа и других форс-мажорных обстоятельств. Или периодически скидывать бэкапы с backup-сервера на переносной носитель (лента, CDROM и т.д.) и уносить домой. - Рекомендую производить бэкап по FTP, при грамотной организации, не менее безопасно, чем по SSH (при использовании PGP шифрования бэкапа и предотвращении возможности сниффинга), а главное более быстрый и менее ресурсоемкий способ. - На каждом из серверов, с которых будет производится бэкап, разграничить области файловой системы в зависимости от важности и объема данных. Каждую область описать в отдельном файле конфигурации (см. вопросы выше). Для самых важных данных (например, файлы паролей, секретная информация представляющая коммерческую тайну и т.д.), используйте PGP шифрование. Для текстовых данных большого объема и не требующих частого поднятия из бэкапа - используйте gzip сжатие. Если потребность в доступе к данным в бэкапе велика, можно ограничиться обычным tar архивом без сжатия. - Настроить ftp-сервер с доступом только c хостов с которых производится бэкап (например, через /etc/hosts.allow) и закрытым для внешнего мира. В конфигурации ftp сервера запретите выход за пределы домашней директории (/etc/ftpchroot). Дополнительно, через crontab, пропишите еженедельное дублирование резервной копии на бэкап-сервере на соседний диск (резервирование бэкапа). ------------------------------------------------------------------------------- Почему при создании бэкапа по FTP скрипт бэкапа "зависает" или вываливается по таймауту ? FTP сервер (windows, nowell netware) на первый взгляд работает. Некоторые ftp сервера или настройки фаервола не позволяют использовать активный режим FTP соединения, применяемый по умолчанию. Установите $cfg_remote_ftp_mode=1 в файле конфигурации. ------------------------------------------------------------------------------- Не получается создать бэкап с использованием pgp-шифрования. На удаленной и локальной машине создал\экспортировал\импортировал ключи так, как написано в README на локальной машине (с которой сливается бэкап) gpg --list-secret-key выдает: pub 1024D/06E192F6 2002-08-20 Aleksey sub 1024g/C3750174 2002-08-20 А когда запускаю fsbackup картина следующая: PGP: enabled ...... gpg: backup: skipped: public key not found gpg: [stdin]: encryption failed: public key not found Судя по всему ваш ключ назван "Aleksey", а в файле конфигурации (директива конфигурации $cfg_pgp_userid) в качестве имени публичного ключа указан "backup". Еще одна частая ошибка - забывают заверить публичный ключ (подписать, gpg --sign-key) на машине где производится бэкап. ------------------------------------------------------------------------------- Как посмотреть размер файлов и атрибутов помещенных в архив ? Архив получился слишком большой, нужно выяснить из-за какого файла так вырос размер. db_dump .hash db_dump185 .hash db2_dump .hash ------------------------------------------------------------------------------- Почему в архив не помещаются файлы примонтированных через samba или netware дисков. Попробуйте поместить в fsbackup.pl, после "use File::Find;" строку: $File::Find::dont_use_nlink = 1; ------------------------------------------------------------------------------- Можно ли реализовать через fsbackup архив файлов конфигурации. Т.е. бэкапить не раз в день, а допустим проверять раз в 5 минут и если есть изменения делать бэкап отражая в имени файла время изменения, в противном случае ничего не трогать ? Настройте работу в режиме инкрементального бэкапа и укажите заведомо большое число итераций (например, $cfg_increment_level=99999). fsbackup, если нет изменений по сравнению с прошлым инкрементом, сругается, что бэкапить нечего и не будет создавать лишних файлов. ------------------------------------------------------------------------------- Если задать бэкап по /, будут ли помещены в бэкап все примонтированные файловые системы ? Нет, нужно перечислить в конфигурации все точки монитрования. ------------------------------------------------------------------------------- На одной машине невозможно закачать по FTP архив (разбитый на тома по 800Мб) суммарным размером больше 2 Гб. Обновите версию perl модуля Net::FTP. ------------------------------------------------------------------------------- Почему файл с именем /tmp/test/c:\trace_b.txt не помещается в архив, пишет: /bin/tar: tmp/test/c\:\trace_b.txt: Cannot stat: No such file or direct Боюсь, что с этим трудно бороться, \t вполне резонно может быть воспринят как табуляция. Список файлов в tar передается как есть, без экранирования, и уже сам tar разбирая файл со списком принимает решение об экранировании при помещении в архив (что видно на примере экранирования ":"). Нужно почитать спецификацию на тип используемой вами файловой системы, вполне вероятно, что символ \ не может быть использован в имени файла. ------------------------------------------------------------------------------- fsbackup в сравнении с BackupPC ? Насколько я понимаю, это продукты для разных задач. Задача fsbackup - организовать бэкап только выборочных данных (гибкость задание масок) используя ftp или ssh, а BackupPC - ведение полного архива (прежде всего windows машин) на backup сервере на котором установлено специальное серверное ПО. Для Web-интерфейса BackupPC нужен suidperl, что не безопасно. И главное: fsbackup работает на стороне клиента (отправка с клиента на сервер бэкапа), а BackupPC на стороне сервера (сервер инициирует процесс бэкапа, на клиенте софт не устанавливается (rsync или tar через ssh/rsh/nfs), т.е. получив доступ к серверу бэкапа - автоматически получает полный доступ ко всем клиентам). ------------------------------------------------------------------------------- Хочу исключить из бэкапа файлы находящиеся в директории /etc/tinydns/log/main/. Использую правило "f!/etc/tinydns/log/main/.*", но файлы все равно помещаются в бэкап. "f[~!]" - маска только для имени файла, без директории, "d[~!]" - маска только для директории, '=[~!]' - маска для пути, '!' - исключение пути (не маска). Например, есть файл "/dir/file.txt". "f" видит только "file.txt", "d" видит только "/dir", а "=" видит "/dir/file.txt". Примеры правильного решения: !/etc/tinydns/log/main =!/etc/tinydns/log/main/.* ------------------------------------------------------------------------------- При создании архива с PGP-шифрованием из cron создаётся пустой tar (0 байт), почему? Опишу Вам для информации (может быть пригодится для FAQ) решение моей проблемы с шифрованием архива gpg по запуску из cron. Заметил что в корне системы есть папка .gnupg (теор. не должно быть ?) с пустым pubring. Переделал её в ссылку на ~/.gnupg, после чего файлы стали нормально создаваться (не пустые). Вывод: gpg, запускаемая cron из скрипта, не может обратиться к рутовой pubring, а обращается к корневой (общей ?). ------------------------------------------------------------------------------- install.pl ругается при установке одного из Perl модулей под AltLinux Master 2.4 В комплекте идут старые версии необходимых perl модулей, поэтому рекомендуется перед запуском скрипта установки, вручную становить более новые версии всех модулей: File::Find - входит в базовую поставку Perl (perl-base) Digest::MD5 - входит в базовую поставку Perl (perl-base) или в пакет perl-Digest-MD5 Net::FTP - пакет perl-libnet DB_File - пакет perl-DBM ------------------------------------------------------------------------------- Если я указываю параметр config_files="cfg_files1 cfg_files2", то делается backup по конфигу cfg_files1 и скрипт висит не выполняя ни каких действий(backup cfg_files2 не выполняется). Если отдельно прописывать по одному эти файлы конфигурации, то все ок. В скрипте create_backup.sh между запусками fsbackup стоит задержка в 10 минут. Закомментируйте строку "sleep 600" в конце файла. ------------------------------------------------------------------------------- Можно ли исключать MySQL таблицы из бэкапа по маске. Имена "tbl_01_2007" (по датам). В скрипте mysql_backup.sh для определения факта исключения используется строка: if [ "_$cur_ignore" = "_$cur_db:$cur_db_table" ]; then можно попробовать заменить ее например на grep_flag2=`echo "$cur_ignore"| grep -E "$cur_db:$cur_db_table"` if [ -n "$grep_flag2" ]; then Параметры задать как: backup_db_list='base2:tbl_[0-9][0-9]_20[0-9][0-9]' ------------------------------------------------------------------------------- Восстановление полного бэкапа всей системы в корень. Установил минимальный вариант FreeBSD. Явно указываю в /scripts/fsrestore.sh название моего бэкапа; место, где его брать и место, куда класть потом ("/"). Уже присутствующие файлы не заменяются новыми. Подозреваю, что не получается восстановиться именно потому, что я ведь загрузил систему freebsd. Корень её считается "/". И развернуть fsbackup пытается тоже в "/". Получается, что он пытается перезаписать файлы, которые банально открыты системой и у него не получается. Суть восстановления сводится к команде "tar -xpzf arc.tar.gz -C restore_path" и запуску .dir файлов как shell скриптов. Я не уверен, что вашем tar нет защиты от перетирания существующих файлов (в BSD tar нужно указывать опцию "-U") (не удивлюсь если в некоторых Linux дистрибутивах в пакет с tar включены патчи для защиты от раскрытия архива в корень). Попробуйте добавить в строку вызова tar в скрипте fsrestore.sh добавить опцию -U, например "tar -xpUzf". Но я бы восстановил бэкап в /var/backup, а потом аккуратно перенес оттуда частями в корень (не перенося /bin, /sbin и прочие уже установленные системные файлы). Самый правильный вариант - загрузиться с LiveCD (например штатный FreeBSD resque или Frenzy), разбить и отформатировать дисковые разделы руками, примонтировать в /mnt, скачать туда по ftp fsrestore.sh и архивы бэкапа, а затем запустить восстановление в /mnt. ------------------------------------------------------------------------------- Может ли fsbackup на FTP скопировать файлы не одним архивом, а по отдельности без архивирования. Возможно режим синхронизации можно для этого использовать, но он работает через ssh, так как по сути тот же tar передает, но только с раскрытием на удаленной стороне. На первый взгляд, я бы сделал копирование одним файлом, но на удаленной стороне в cron повесил скрипт, который бы следил за появлением новых файлов или обновлением существующих и затем разархивировал что нужно. Если просто синхронизировать нужно группу файлов, то лучше использовать rsync. fsbackup для синхронизации подходит только в ограниченных случаях, когда нужна особенно большая гибкость в выборе файлов или есть необходимость подключить свой обработчик копирования или фильтр. ------------------------------------------------------------------------------- Почему fsbackup не работает с tar из состава OpenBSD ? Для OpenBSD tar необходимо использовать вместо ключа -T ключ -l. Замените все строки "$prog_tar -c -f - -T" в fsbackup.pl на "$prog_tar -c -f - -l ". ------------------------------------------------------------------------------- После запуска скрипта для бэкапа СУБД, дамп базы оставляются локально, т.е. получается, что директории с дампом нужно дополнительно указывать в конфигурации fsbackup.pl для загрузки на удаленный сервер бэкапа ? Да, конечно. По умолчанию дампы в директорию fsbackup/sys_backup складываются, и бэкапятся вместе с fsbackup. В конфиге явно должно быть: __DATA__ ... /usr/local/fsbackup/sys_backup или /usr/local/fsbackup