		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

-------------------------------------------------------------------------------
При запуске ./fsbackup.pl my_cfg выдает ошибку:
"my_cfg did not return a true value at ./fsbackup.pl line 78"
В чем может быть проблема ?

   Посмотрите пример конфигурации, там чуть раньше блока __DATA__, есть
   строка "1;". В вашем конфигурационном файле, она, судя по всему, удалена.

-------------------------------------------------------------------------------
Можно ли сделать, так чтоб бекап mysql вместе с остальными данными
копировался по сети, а не сохранялся в катологе sys_backup ?

Подразумевается, что каталог sys_backup должен быть включен в бэкап копируемый по сети,
если вы конечно строку из примера файла конфигурации не удалили.
Т.е. резервирование баз проходит в два этапа:
1. Помещаем дамп базы в sys_backup
2. Копируем содержимое sys_backup на сервер бэкапов.
По моему опыту, чаще всего на сервере с СУД требуется последняя версия дампа 
базы, поэтому он и оставляется на локалньой машине.

-------------------------------------------------------------------------------
Поддерживает ли fsbackup ACL и сохранение данных о расширенных атрибутах ФС ?

Поддерживает ровно настолько, насколько их поддерживает tar,
установленный в вашей системе. Все операции по архивированию выполняются
через вызов программы tar. Из альтернативных реализаций tar, star точно 
поддерживает ACL.

-------------------------------------------------------------------------------
Как сохранять в архиве директории с исключённым содержимым?

Как вариант исключать не через !/dir/, а через более мягкий оператор
исключения  "d!/dir/.*". При этом исключенные директории будут учтены в
.dir файле. Другой вариант, использовать contrib/dir_sync.

