Bacula — кроссплатформенное клиент-серверное программное обеспечение, позволяющее централизованно управлять резервным копированием, восстановлением, и проверкой данных по сети. Bacula также может работать на единственном сервере или, распределёно на нескольких, может записывать резервные копии на различные типы носителей, включая ленты, ленточные библиотеки, диски. Предлагает широкие возможности для управления хранилищами данных, облегчает поиск и восстановление потерянных или повреждённых файлов. Благодаря модульной структуре, Bacula легко масштабируемая система и может работать как в маленьких так и в крупных сетях. Дает возможность управления через CLI, GUI и веб-интерфейс.
Bacula разделена на несколько отдельных модулей это придает ей гибкости в работе:
Первое, что вы должны будете сделать это понять и описать кто, что и когда будет резервироваться. В нашем примере я буду использовать три сервера.
Как я сказал Bacula может быть распределена в сети и при грамотном ведении хозяйства и бюджета наша задача выглядит примерно так.
Примечание: чтобы не усложнять схему я специально убрал из неё трей-монитор, командную консоль, и БД каталога тк их можно поставить на другие машины. Пример
К слову сказать готовые ленты желательно переносить в другое здание (или помещение) тк от чрезвычайных случаев никто не застрахован. И вот еще я как и все вы живем в России обычно бюджет фирм на ИТ небольшой и приходиться выкручиваться самому так, что реальная схема часто выглядит так.
Для начала вам понадобится нарисовать простую таблицу примерно такого вида.
Так вы можете наглядно понять, что необходимо и как нужно сделать, дальше следуйте вашей схеме. В процессе схему можете дополнять и оптимизировать не забывая все документировать. Вы документируете свою работу ведь правда?
Дополнительно опишем типы резервного копирования их плюсы и минусы:
Предпочтителен Full backup но это"дорого" обходиться. Если данные не очень ценны или ресурсов мало то используйте Incremental backup. Differential backup это компромисс, но бывает что последняя копия приближается объему полного копирования так что следите за ним =). Есть еще и другие типы копирования такие как VirtualFull и Base вы можете познакомиться с ними сами.
Установка стандартна так что следуйте за белым кроликом...
# make search name=bacula-server Port: bacula-server-5.0.3 Path: /usr/ports/sysutils/bacula-server Info: The network backup solution (server) Maint: dan@langille.org B-deps: gettext-0.18.1.1 libiconv-1.13.1_1 postgresql-client-8.3.15,1 R-deps: gettext-0.18.1.1 libiconv-1.13.1_1 postgresql-client-8.3.15,1 WWW: _http://www.bacula.org/ # cd /usr/ports/sysutils/bacula-server # make config Options for bacula-server 5.0.3 [ ] SQLITE3 Use SQLite-3 database [X] MYSQL Use MySQL database [ ] POSTGRESQL Use PostgreSQL database [ ] MTX Install mtx for control of autochanger devices [X] NLS Native Language Support via gettext utilities [X] OPENSSL Enable OpenSSL for encrypted communication # make install clean You may use the following build options (or make config): WITH_CLIENT_ONLY=yes if you only want the file daemon. WITH_MTX=yes if you want to use mtx instead of chio for autochanger control. WITH_SQLITE3=yes if you want SQLite-3 as the database (not recommended). WITH_OPENSSL=yes Enable OpenSSL for encrypted communication. ~~~ ===> SECURITY REPORT: This port has installed the following files which may act as network servers and may therefore pose a remote security risk to the system. /usr/local/lib/libbac.so.5 This port has installed the following startup scripts which may cause these network services to be started at boot time. /usr/local/etc/rc.d/bacula-sd /usr/local/etc/rc.d/bacula-dir If there are vulnerabilities in these programs there may be a security risk to the system. FreeBSD makes no guarantee about the security of ports included in the Ports Collection. Please type 'make deinstall' to deinstall the port if this is a concern. For more information, and contact details about the security status of this software, see the following webpage: http://www.bacula.org/ ===> Cleaning for bacula-server-5.0.3
Для работы Bacula Director ему необходима база данных для накопления и оперирования всевозможными данными о собранных резервных копиях. Такая база называется Каталог (Catalog) и храниться она в СУРБД (MySQL, Postgres). Каталогов может быть несколько, в зависимости от потребностей. Перед запуском, необходимо подготовить хотя бы один.
Cоздадим базу данных в MYSQL, например BACULA_DB, и пользователя имеющего полные права на эту базу данных.
# mysqladmin -uADMIN_USER -pADMIN_PASS create BACULA_DB # mysql -uADMIN_USER -pADMIN_PASS -e"GRANT ALL ON BACULA_DB.* TO \ BACULA_USER@localhost IDENTIFIED BY 'BACULA_USER_PASS'" BACULA_DB
# /usr/local/share/bacula/make_mysql_tables -u BACULA_USER -pBACULA_USER_PASS Creation of Bacula MySQL tables succeeded.
Необходимо создать директорию (а лучше взять новый диск для хранения резервных копий и еще лучше это использовать ленточный накопитель) куда будем писать резервные копии, и даем доступ на запись пользователю bacula и примонтируем (в моем случае) диск для бекапов:
# mkdir /home/bacula/backup # chown bacula:bacula /home/bacula/backup # mount /dev/ad6s1d /home/bacula/backup
Добавим в fstab строчку про монтирование диска (в моем случае).
# cat /etc/fstab # Device Mountpoint FStype Options Dump Pass# /dev/mirror/gm0s1b none swap sw 0 0 /dev/mirror/gm0s1a / ufs rw 1 1 /dev/mirror/gm0s1f /home ufs rw 2 2 /dev/mirror/gm0s1d /usr ufs rw 2 2 /dev/mirror/gm0s1e /var ufs rw 2 2 /dev/ad6s1d /home/bacula/backup ufs rw 2 2 /dev/acd0 /cdrom cd9660 ro,noauto 0 0 tmpfs /tmp tmpfs rw 0 0
Необходимо создать конфигурационные файлы для DIR и SD на основе шаблонов и отредактировать их в соответствии с желаемой конфигурацией.
# cd /usr/local/etc # ll |grep bacula -r--r--r-- 1 root wheel 949B 11 май 11:56 bacula-barcodes.samples -rw-r----- 1 root bacula 8,8K 11 май 11:56 bacula-dir.conf.sample -rw-r----- 1 root wheel 5,8K 11 май 11:56 bacula-sd.conf.sample # cp bacula-dir.conf.sample bacula-dir.conf # cp bacula-sd.conf.sample bacula-sd.conf
Разберем дефолтный конфигурационный файл DIR:
# cat bacula-dir.conf # # Дефолтный файл конфигурации Bacula Director # # Единственное, что должно быть изменено, это добавить одну или # несколько имен файлов или директорий в директиве Include # набора FileSet. # # Для Bacula релиза 5.0.3 (04 августа 2010) - FreeBSD 8.2-RELEASE # # Вы также можете изменить адрес электронной почты по умолчанию # от root до вашего адреса. См. директивы "mail" и "operator" # в ресурсах сообщения. # Director { # Определим себя Name = thor.kmps.local-dir # Имя DIRport = 9101 # Порт который слушает DIR QueryFile = "/usr/local/share/bacula/query.sql" WorkingDirectory = "/var/db/bacula" # Рабочий каталог PidDirectory = "/var/run" Maximum Concurrent Jobs = 1 # Максимальное количество # параллельных заданий. Не рекомендуется # одновременно записывать # несколько заданий в один пул. Password = "SECRET" # Пароль для анонимной консоли (фулл контрол) Messages = Daemon # Набор настроек для отправки сообщений } JobDefs { # Дефолтное задание Name = "DefaultJob" # Имя задания Type = Backup # Тип (backup, restore и т.д.) Level = Incremental # Уровень бэкапа (Full, Incremental, Differential и тп) Client = thor.kmps.local-fd # Имя клиента FileSet = "Full Set" # Набора файлов для сохранения. Schedule = "WeeklyCycle" # Расписание Storage = File # Файловое хранилище Messages = Standard # Поведение уведомлений Pool = File # Пул, куда будем писать бэкапы Priority = 10 # Приоритет. Давая заданиям приоритеты # от 1 (max) до 10 (min), можно регулировать # последовательность выполнения. Write Bootstrap = "/var/db/bacula/%c.bsr" # Файл хранит информацию откуда извлекать # данные при восстановлении } # Определим основные ночные сохранения заданий резервного копирования # По умолчанию, работа резервного копирование будет на диске в /tmp Job { Name = "BackupClient1" JobDefs = "DefaultJob" } #Job { # Name = "BackupClient2" # Client = thor.kmps.local2-fd # JobDefs = "DefaultJob" #} # Резервное копирование каталога базы данных (после ночных сохранений) Job { Name = "BackupCatalog" JobDefs = "DefaultJob" Level = Full FileSet="Catalog" Schedule = "WeeklyCycleAfterBackup" # Это создает копию ASCII из каталога # Аргументы make_catalog_backup.pl являются: # make_catalog_backup.pl <catalog-name> RunBeforeJob = "/usr/local/share/bacula/make_catalog_backup.pl MyCatalog" # Это удаляет копию каталога RunAfterJob = "/usr/local/share/bacula/delete_catalog_backup" Write Bootstrap = "/var/db/bacula/%n.bsr" Priority = 11 # после основного резервного копирования } # # Стандартный шаблон восстановления, который может изменен консольной программой # Только одна такая работа необходима для всех Работа/Клиентов/Хранилищ... # [единственное я изменил путь к Where для клиента thor.kmps.local-fd # это куда Bacula будет складывать восстановленные из архивов файлы] Job { Name = "RestoreFiles" Type = Restore Client=thor.kmps.local-fd FileSet="Full Set" Storage = File Pool = Default Messages = Standard #Where = /tmp/bacula-restores Where = /home/bacula/bacula-restores } # Список файлов для резервного копирования FileSet { # Список файлов Name = "Full Set" # Имя списка файлов Include { Options { signature = MD5 # Тип сигнатур MD5\SHA1 } # # Поместить список файлов, вы можете предшествует 'File =', по одному на строку # или включить внешний список: # # File = <file-name # # Обратите внимание: "/" резервное копирование всего корневого раздела. # если у вас есть другие разделы, такие как "/usr" / или "/home" # вероятно, вы захотите, чтобы добавить их тоже. # # По умолчанию это определяется, чтобы указать для Bacula бинарный # каталог, чтобы дать набор файлов для резервного копирования на # диск во время начального тестирования. # File = /usr/local/sbin } # # Если вы сохраняете корневой каталог, следующие два исключения # файлов могут быть полезны # Exclude { # Исключения File = /var/db/bacula ##Исключаемые директории File = /tmp ## File = /proc ## File = /tmp ## File = /.journal ###Исключаемые файлы File = /.fsck ### } } # # Когда делать резервные копии, полную резервную копию в первое # воскресенье месяца, дифференциальный (т.е. дополнительные к полной) # каждые остальные воскресенья, так и инкрементный в другие дни. Schedule { # Планировщик Name = "WeeklyCycle" # Имя планировщика Run = Full 1st sun at 23:05 # Запуск полного бекапа в.. Run = Differential 2nd-5th sun at 23:05 # Запуск диф. бекапа в.. Run = Incremental mon-sat at 23:05 # Запуск инк. бекапа в.. } # Этот график для каталога. Он запускается после WeeklyCycle Schedule { Name = "WeeklyCycleAfterBackup" Run = Full sun-sat at 23:10 } # Это резервное копирование каталога Bacula [изменил из-за БД имя] FileSet { Name = "Catalog" Include { Options { signature = MD5 } #File = "/var/db/bacula/bacula.sql" File = "/var/db/bacula/BACULA_DB.sql" } } Client { Name = thor.kmps.local-fd # Имя клиента Address = thor.kmps.local # Адрес FDPort = 9102 # Порт на котором клиент сидит Catalog = MyCatalog # Каталог в MySQL Password = "SECRET" # пароль для FileDaemon File Retention = 30 days # 30 дней - период, на протяжении # которого в каталоге будет храниться # инфа о файлах этого клиента Job Retention = 6 months # 6 месяцев - тоже, но про задания AutoPrune = yes # Удаление истекших заданий/файлов } # # Второй клиент (File Services) для резервного копирования # Вы должны изменить имя, адрес и пароль, прежде чем использовать # #Client { # Name = thor.kmps.local2-fd # Address = localhost2 # FDPort = 9102 # Catalog = MyCatalog # Password = "SECRET" # пароль для FileDaemon 2 # File Retention = 30 days # 30 дней # Job Retention = 6 months # 6 месяцев # AutoPrune = yes # Удаление истекших заданий/файлов #} # Определение устройства хранения файлов Storage { Name = File # Имя. Используется в определениях job # Не используйте здесь "localhost" Address = thor.kmps.local # Здесь использовать полное имя SDPort = 9103 # Порт SD Password = "SECRET" # Пароль к SD Device = FileStorage # Устройство. Должно быть определено # в настройках секции Device сервера хранения Media Type = File # Файл, диск, лента } # Определение DDS ленточного устройство хранения данных #Storage { # Name = DDS-4 # Не используйте здесь "localhost" # Address = localhost # Здесь использовать полное имя # SDPort = 9103 # Порт SD # Password = "SECRET" # пароль для Storage daemon # Device = DDS-4 # должен быть таким же, как Device в Storage daemon # Media Type = DDS-4 # должен быть таким же, как MediaType в Storage daemon # Autochanger = yes # включить для авточейнджера устройства #} # Определение 8мм устройства хранения ленты #Storage { # Name = "8mmDrive" # Не используйте здесь "localhost" # Address = localhost # SDPort = 9103 # Password = "SECRET" # Device = "Exabyte 8mm" # MediaType = "8mm" #} # Определение DVD накопителя #Storage { # Name = "DVD" # Не используйте здесь "localhost" # Address = localhost # SDPort = 9103 # Password = "SECRET" # Device = "DVD Writer" # MediaType = "DVD" #} # Службы общего каталога Catalog { Name = MyCatalog # Раскомментируйте следующую строку, если вы хотите использовать dbi драйвера # dbdriver = "dbi:mysql"; dbaddress = 127.0.0.1; dbport = dbdriver = "dbi:mysql"; dbaddress = 127.0.0.1; dbport = 3306 dbname = "kmps_bacula"; dbuser = "kmps_bacula"; dbpassword = "PASSWORD" } # Умеренная доставки сообщения - отправить большинство сообщений на адрес # электронной почты и консоль Messages { Name = Standard # # ПРИМЕЧАНИЕ! Если вы отправляете на два почтовых адреса или более # адресов электронной почты, необходимо будет заменить %r в поле # (-f части) с одиним действительным адресом электронной почты в # обоих mailcommand, так и operatorcommand. Что это делает, он # устанавливает адрес электронной почты, сообщения электронной почты # будет отображаться в поле «ОТ», который является по умолчанию # такое же письмо, как они его передали. Однако если вы отправляете # сообщение на более чем один адрес, то вам придется вручную, # установить адреса на один адрес. Например, «no-reply@mydomain.com», # лучше так, что стремится сказать (большинству) людей, которые # его получат с автоматизированного источника рассылки сообщений. mailcommand = "/usr/local/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" / -s \"Bacula: %t %e of %c %l\" %r" operatorcommand = "/usr/local/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" / -s \"Bacula: Intervention needed for %j\" %r" mail = root@localhost = all, !skipped operator = root@localhost = mount console = all, !skipped, !saved # # ВНИМАНИЕ! Переменная указанная ниже создаст файл, который вам # нужно будет ротировать newsyslog'ом Однако, он также будет # держать все ваши сообщения, если они просматриваются # с консоли. append = "/var/db/bacula/log" = all, !skipped catalog = all } # # Доставка сообщений для демона сообщений (не работы). Messages { Name = Daemon mailcommand = "/usr/local/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" / -s \"Bacula daemon message\" %r" mail = root@localhost = all, !skipped console = all, !skipped, !saved append = "/var/db/bacula/log" = all, !skipped } # Определение пула по умолчанию # Pool - отдельное описание для каждого набора томов (лент, DVD, файлов) # используется при описании задания для указания пула из которого # должен быть взят том. В каждый пул может входить несколько томов. Pool { # Пул Name = Default # Имя пула Pool Type = Backup # Тип пула Recycle = yes # Bacula может автоматически рециркулировать тома (Volumes) AutoPrune = yes # Удалять из каталога записи о файлах и # заданиях, срок хранения которых истёк в # соответствии с Volume Retention, # при поиске доступного на запись тома. Volume Retention = 365 days # Через один год } # Определения пула файлов Pool { # Пул Name = File # Имя пула Pool Type = Backup # Тип пула Recycle = yes # Bacula может автоматически рециркулировать тома (Volumes) AutoPrune = yes # Удаление истекших томов (Volumes) Volume Retention = 365 days # через один год Maximum Volume Bytes = 50G # Ограничение размера тома Maximum Volumes = 100 # Ограничить количество томов в пуле } # Определения пула Scratch # Scratch зарезервировано для пула запасных том - при необходимости # система самостоятельно переводит том из него в требуемый пул Pool { Name = Scratch Pool Type = Backup } # # Ограниченная консоль, используемая в трей мониторе для получения # статуса директора DIR # Console { Name = thor.kmps.local-mon Password = "SECRET" CommandACL = status, .status } # Свои конфигурационные файлы #@/usr/local/etc/client_schedule.conf @/usr/local/etc/client_thor.conf @/usr/local/etc/client_srv1.conf @/usr/local/etc/client_srv2.conf
Что бы эффективно управлять системой резервного копирования, нужно как следует подумать и попрактиковаться, пока не придет понимание как эта система работает. В конфигурационном файле вы должны описать к примеру работу для одного клиента несколькими переменными такими как Job, Storage, Pool, Client, FileSet, Schedule. Каждой переменной присваивается понятное имя и далее в Job указываются необходимые имена переменных чтобы это было законченной задачей и могло работать согласно вашим указаниям. Рабочий клиент состоит из 6ти элементов:
Примечание: Все переменные вы можете использовать в различных комбинациях указав нужное имя в нужной работе к примеру Schedule с именем Weekly_1st можете использовать в разных работах которым необходимо одинаковое время и периодичность работ.
Создадим дополнительные конфигурационный файлы для трех серверов и включим их в bacula-dir.conf.
Клиент THOR
# cat client_thor.conf # Клиент Thor # Создаем задание thor_backup-job и указываем ресурсы. Job { Name = "thor_backup-job" # Имя задания Type = Backup # Тип (backup, restore и т.д.) Level = Full # Уровень бэкапа Client = thor-fd # Имя клиента FileSet = "thor-fileset" # Набора файлов для сохранения. Schedule = "Month-1hrs-sun" # Расписание Storage = backup-disk1 # Файловое хранилище Messages = Daemon # Поведение уведомлений Pool = thor-pool # Пул, куда будем писать бэкапы Priority = 10 # Приоритет. Давая заданиям приоритеты # от 1 до 10, можно регулировать # последовательность выполнения. Write Bootstrap = "/var/db/bacula/thor_backup-job.bsr" } # Определяем список резервируемых файлов FileSet { Name = "thor-fileset" # Имя списка Include { Options { signature = MD5 } File = /etc # Указываем каталоги, который будем бэкапить File = /home/Raven2000 } Exclude { # Исключим пару каталогов File = /home/Raven2000/www/tmp File = /home/Raven2000/www/log } } # Pool - описание набора устройств хранение # В каждый пул будет входить несколько томов. Регулировать, в какой конкретно # том бакула будет писать задание нельзя. Я хотел, чтобы каждое задание # у меня писалось в отдельный файл, поэтому на каждый backup job у меня # будет отдельный пул. Pool { Name = thor-pool # Имя пула Pool Type = Backup # Тип пула Recycle = yes # Автоматически менять тома. AutoPrune = yes # Автоматическое удаление из БД заданий с # истекшим сроком годности. Volume Retention = 365 days # Срок, по истечении которого тома будут # удаляться из пула. Maximum Volume Bytes = 50G # Ограничение размера тома Maximum Volumes = 100 # Ограничить количество томов в пуле Label Format = "thor-" # Шаблон для создания имени тома при # автоматическом создании метки тома # требует указания Label Media в # настройках сервера хранения. Recycle Oldest Volume = yes # Удаляем старые копии при нехватке места для новых } # Определения клиентов Client { Name = thor-fd # Имя клиента Address = thor.kmps.local # адрес FDPort = 9102 # Порт, на котором клиент нас ждет Catalog = "MyCatalog" # Каталог в MySQL Password = "SECRET" # Пароль к клиенту File Retention = 30 days # Период, на протяжении которого в каталоге # будет храниться инфа о файлах этого клиента Job Retention = 3 months # То же, только о заданиях этого клиента AutoPrune = yes # Удалять из каталога # данные о файлах и заданиях, срок хранения # которых истек. } # Определения файловых хранилищ. Storage { Name = backup-disk1 # Имя хранилища будет использоваться в # определениях job Address = thor.kmps.local # Адрес сервера хранения. Настоятельно не # рекомендуется использовать localhost SDPort = 9103 # Порт, где file storage нас ждет Password = "SECRET" # Пароль к нему Device = backup-disk1 # Устройство. Должно быть определено # в настройках секции Device сервера хранения Media Type = File # Файл, диск, лента и т.д. } # Планировщик Schedule { Name = "Month-1hrs-sun" Run = Full 1st sun at 1:00 Run = Differential 2nd-5th sun at 1:00 Run = Incremental mon-sat at 1:00 }
Клиент SRV1
# cat client_srv1.conf # Клиент SRV1 # Создаем задание srv1_backup-job и указываем ресурсы. Job { Name = "srv1_backup-job" Type = Backup Level = Full Client = srv1-fd FileSet = "srv1-fileset" Schedule = "Month-1hrs-sun-srv1" Storage = File-SRV1 Messages = Daemon Pool = srv1-pool Priority = 10 Write Bootstrap = "/var/db/bacula/srv1_backup-job.bsr" } FileSet { Name = "srv1-fileset" Enable VSS = YES # Использовать Volume Shadow Copy Service (VSS) для клиента Win32 # VSS позволяет Bacula копировать открытых файлы Include { Options { compression = GZIP # Сжатие производится на стороне клиента пофайлово в один поток signature = MD5 # Тип сигнатур MD5\SHA1 portable = no # переносимый формат сохраняет не все атрибуты NTFS noatime = yes # Позволяет читать файлы без изменения времён atime и ctime checkfilechanges = yes # Выдаётся предупреждение, если размер или время # модификации файла изменяется при резервном копировании Ignore Case = yes # Игнор-ть регистр букв при сопост-и шаблонов и рег-х выражений wildfile = "*.avi" # Шаблон wildfile = "*.wmv" # Шаблон wildfile = "*.mp3" # Шаблон wildfile = "pagefile.sys" # Шаблон wildfile = "hiberfil.sys" # Шаблон wilddir = "System Volume Information" # Шаблон wilddir = "TEMP" # Шаблон exclude = yes # Подошедшие под шаблоны файлы исключаются из списка } File = "D:/Shared_buch" # Что резервируем File = "E:/Backup/Windows" # Что резервируем } } Pool { Name = srv1-pool Pool Type = Backup Recycle = yes AutoPrune = yes Volume Retention = 365 days Maximum Volume Bytes = 50G Maximum Volumes = 100 Recycle Oldest Volume = yes # Удаляем старые копии при нехватке места для новых Label Format = "srv1-" # Шаблон для создания имени тома при # автоматическом создании метки тома # требует указания Label Media в # настройках сервера хранения. } Client { Name = srv1-fd Address = srv1.kmps.local FDPort = 9102 Catalog = MyCatalog Password = "QbTQzNv/823/spZGTu4buOxFuKT/tiBfg+ZlESr3R1lU" File Retention = 30 days Job Retention = 6 months AutoPrune = yes } Storage { Name = File-SRV1 Address = thor.kmps.local SDPort = 9103 Password = "SECRET" Device = FileStorage-srv1 Media Type = File } Schedule { Name = "Month-1hrs-sun-srv1" Run = Full 1st sun at 3:00 Run = Differential 2nd-5th sun at 3:00 Run = Incremental mon-sat at 3:00 }
Клиент SRV2
# cat client_srv2.conf # Клиент SRV2 # Создаем задание srv2_backup-job и указываем ресурсы. Job { Name = "srv2_backup-job" Type = Backup Level = Full Client = srv2-fd FileSet = "srv2-fileset" Schedule = "Month-1hrs-sun" Storage = backup-disk1 Messages = Daemon Pool = srv2-pool Priority = 10 Write Bootstrap = "/var/db/bacula/srv2_backup-job.bsr" } FileSet { Name = "srv2-fileset" Enable VSS = YES Include { Options { compression = GZIP signature = MD5 portable=no noatime = yes checkfilechanges = yes Ignore Case = yes wildfile = "*.avi" wildfile = "*.wmv" wildfile = "*.mp3" wildfile = "pagefile.sys" wildfile = "hiberfil.sys" wilddir = "System Volume Information" wilddir = "TEMP" exclude = yes } File = "D:/1SBase" File = "E:/Backup/Windows" } } Pool { Name = srv2-pool Pool Type = Backup Recycle = yes AutoPrune = yes Volume Retention = 365 days Maximum Volume Bytes = 50G Maximum Volumes = 100 Recycle Oldest Volume = yes # Удаляем старые копии при нехватке места для новых Label Format = "srv2-" # Шаблон для создания имени тома при # автоматическом создании метки тома # требует указания Label Media в # настройках сервера хранения. } Client { Name = srv2-fd Address = srv2.kmps.local FDPort = 9102 Catalog = MyCatalog Password = "MkfdcfGqds5qFoSL/W2uBG0DqIvY5bbVDWq/ZuHN39Ct" File Retention = 30 days Job Retention = 6 months AutoPrune = yes } Storage { Name = File-SRV2 Address = thor.kmps.local SDPort = 9103 Password = "SECRET" Device = FileStorage-srv2 Media Type = File } Schedule { Name = "Month-1hrs-sun-srv2" Run = Full 1st sun at 6:00 Run = Differential 2nd-5th sun at 6:00 Run = Incremental mon-sat at 6:00 }
Заметка: привыкайте делать включения в основной конфигурационный файл так будет аккуратней и проще в работе и эксплуатации.
Включим ваши конфиги в конец файла bacula-dir.conf
# cat bacula-dir.conf |grep client #@/usr/local/etc/client_schedule.conf @/usr/local/etc/client_thor.conf @/usr/local/etc/client_srv1.conf @/usr/local/etc/client_srv2.conf
Протестируем конфигурационный файл
# bacula-dir -t -d /usr/local/etc/bacula-dir.conf # bacula-dir -t -d /usr/local/etc/client_thor.conf # bacula-dir -t -d /usr/local/etc/client_srv1.conf # bacula-dir -t -d /usr/local/etc/client_srv2.conf
# vi bacula-sd.conf # # Дефолтный файл конфигурации Bacula Storage Daemon # # Для Bacula релиза 5.0.3 (04 августа 2010) — FreeBSD 8.2-RELEASE # # Может потребоваться изменить имя вашего накопителя в директиве # «Archive Device» в устройство ресурсов. Если изменить имя и/или # «Тип носителя» в ресурсе устройства, убедитесь, что bacula-dir.conf # имеет соответствующие изменения. # Storage { # Определим себя Name = thor.kmps.local-sd # Имя SDPort = 9103 # Порт, где ждать директора WorkingDirectory = "/var/db/bacula" Pid Directory = "/var/run" # Собственно PID Maximum Concurrent Jobs = 20 # Дополнительные ограничения } # # Список директоров, которым разрешается связаться с Демоном хранения (SD) # Director { Name = thor.kmps.local-dir # Имя директора Password = "SECRET" # Пароль } # # Ограниченный директор, используемые в трей мониторе # для получения статуса демона хранения # Director { Name = thor.kmps.local-mon # Имя директора Password = "SECRET" # Пароль Monitor = yes } # # Примечание, список дополнительных шаблонов устройств смотрите в # каталоге <bacula-source>/examples/devices # Или перейдите по следующей ссылке: # _http://bacula.svn.sourceforge.net/viewvc/bacula/trunk/bacula/examples/devices/ # # # Устройства записи, поддерживаемые данным Демоном хранения (SD) # это жесткий диск, ленточный накопитель, dvd. # Для подключения, устройства к директору в bacula-dir.conf # должны иметь то же Name и MediaType. # Device { Name = FileStorage # Имя Media Type = File # Укажем, что будем бекапить Archive Device = /tmp # Каталог для бекапов LabelMedia = yes; # разрешить Bacula размечать тома Random Access = Yes; AutomaticMount = yes; # когда устройство открыто, читать его RemovableMedia = no; AlwaysOpen = no; } # # Авточенджер с двумя дисками # #Autochanger { # Name = Autochanger # Device = Drive-1 # Device = Drive-2 # Changer Command = "/usr/local/share/bacula/mtx-changer %c %o %S %a %d" # Changer Device = /dev/sg0 #} #Device { # Name = Drive-1 # # Drive Index = 0 # Media Type = DLT-8000 # Archive Device = /dev/nst0 # AutomaticMount = yes; # когда устройство открыто, читать его # AlwaysOpen = yes; # RemovableMedia = yes; # RandomAccess = no; # AutoChanger = yes # # # # Включить команду Alert, только если у вас есть MTX пакет загрузки # # Обратите внимание, по-видимому, в некоторых системах, tapeinfo # # сбрасывает контроллер SCSI. Tаким образом если вы включаете это, # # убедитесь, что он не сбрасывает ваш контроллер SCSI. У меня # # никогда не было каких-либо проблем, и smartctl, по-видимому, # # не вызывают таких проблем. # # # Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'" # Если у вас есть smartctl, то он имеет больше информации, чем tapeinfo # Alert Command = "sh -c 'smartctl -H -l error %c'" #} #Device { # Name = Drive-2 # # Drive Index = 1 # Media Type = DLT-8000 # Archive Device = /dev/nst1 # AutomaticMount = yes; # когда устройство открыто, читать его # AlwaysOpen = yes; # RemovableMedia = yes; # RandomAccess = no; # AutoChanger = yes # # Включить команду оповещения, только если у вас есть MTX пакет загрузки # Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'" # Если у вас есть smartctl, то он имеет больше информации, чем tapeinfo # Alert Command = "sh -c 'smartctl -H -l error %c'" #} # # Linux или Solaris LTO-2 ленточный накопитель # #Device { # Name = LTO-2 # Media Type = LTO-2 # Archive Device = /dev/nrsa0 # AutomaticMount = yes; # когда устройство открыто, читать его # AlwaysOpen = yes; # RemovableMedia = yes; # RandomAccess = no; # Maximum File Size = 3GB ## Changer Command = "/usr/local/share/bacula/mtx-changer %c %o %S %a %d" ## Changer Device = /dev/sg0 ## AutoChanger = yes # # Включить команду оповещения, только если у вас есть MTX пакет загрузки ## Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'" ## Если у вас есть smartctl, то он имеет больше информации, чем tapeinfo ## Alert Command = "sh -c 'smartctl -H -l error %c'" #} # # Linux или Solaris LTO-3 ленточный накопитель # #Device { # Name = LTO-3 # Media Type = LTO-3 # Archive Device = /dev/nrsa0 # AutomaticMount = yes; # когда устройство открыто, читать его # AlwaysOpen = yes; # RemovableMedia = yes; # RandomAccess = no; # Maximum File Size = 4GB ## Changer Command = "/usr/local/share/bacula/mtx-changer %c %o %S %a %d" ## Changer Device = /dev/sg0 ## AutoChanger = yes # # Включить команду оповещения, только если у вас есть MTX пакет загрузки ## Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'" ## Если у вас есть smartctl, то он имеет больше информации, чем tapeinfo ## Alert Command = "sh -c 'smartctl -H -l error %c'" #} # # Linux или Solaris LTO-4 ленточный накопитель # #Device { # Name = LTO-4 # Media Type = LTO-4 # Archive Device = /dev/nrsa0 # AutomaticMount = yes; # когда устройство открыто, читать его # AlwaysOpen = yes; # RemovableMedia = yes; # RandomAccess = no; # Maximum File Size = 5GB ## Changer Command = "/usr/local/share/bacula/mtx-changer %c %o %S %a %d" ## Changer Device = /dev/sg0 ## AutoChanger = yes # # Включить команду оповещения, только если у вас есть MTX пакет загрузки ## Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'" ## Если у вас есть smartctl, то он имеет больше информации, чем tapeinfo ## Alert Command = "sh -c 'smartctl -H -l error %c'" #} # # FreeBSD ленточный накопитель # #Device { # Name = DDS-4 # Description = "DDS-4 for FreeBSD" # Media Type = DDS-4 # Archive Device = /dev/nsa1 # AutomaticMount = yes; # когда устройство открыто, читать его # AlwaysOpen = yes # Offline On Unmount = no # Hardware End of Medium = no # BSF at EOM = yes # Backward Space Record = no # Fast Forward Space File = no # TWO EOF = yes # IIf you have smartctl, enable this, it has more info than tapeinfo # Alert Command = "sh -c 'smartctl -H -l error %c'" #} # # Передать все сообщения директора, mount сообщения # также отправляются на адрес электронной почты # Messages { # Будем отправлять все сообщения DIR Name = Standard director = thor.kmps.local-dir = all }
Теперь соберем свой конфигурационный файл:
# cat bacula-sd.conf | grep -v ^# Storage { Name = thor.kmps.local-sd SDPort = 9103 WorkingDirectory = "/var/db/bacula" Pid Directory = "/var/run" Maximum Concurrent Jobs = 20 } Director { Name = thor.kmps.local-dir Password = "SECRET" } Director { Name = thor.kmps.local-mon Password = "SECRET" Monitor = yes } Device { Name = FileStorage Media Type = File Archive Device = /home/bacula/backup #Archive Device = /tmp LabelMedia = yes; Random Access = Yes; AutomaticMount = yes; RemovableMedia = no; AlwaysOpen = no; } Device { Name = backup-disk1 Media Type = File Archive Device = /home/bacula/backup LabelMedia = yes; Random Access = Yes; AutomaticMount = yes; RemovableMedia = no; AlwaysOpen = no; } Device { Name = FileStorage-srv1 Media Type = File Archive Device = /home/bacula/SRV1 LabelMedia = yes; Random Access = Yes; AutomaticMount = yes; RemovableMedia = no; AlwaysOpen = no; } Device { Name = FileStorage-srv2 Media Type = File Archive Device = /home/bacula/SRV2 LabelMedia = yes; Random Access = Yes; AutomaticMount = yes; RemovableMedia = no; AlwaysOpen = no; } Messages { Name = Standard director = thor.kmps.local-dir = all }
Протестируем
# bacula-sd -t /usr/local/etc/bacula-sd.conf
Настроим консоль
# cd /usr/local/etc # cp bconsole.conf.sample bconsole.conf # cat bconsole.conf # # Bacula User Agent (or Console) Configuration File # Director { Name = thor.kmps.local-dir DIRport = 9101 address = localhost Password = "SECRET" }
Посмотрим, что она может и отработаем несколько операций:
# /usr/local/sbin/bconsole Connecting to Director localhost:9101 1000 OK: thor.kmps.local-dir Version: 5.0.3 (04 August 2010) Enter a period to cancel a command. *help Command Description ======= =========== add Добавить новый том к пулу в каталоге; для форматирования тома используйте команду label autodisplay Выдаётся извещение о наличии новых сообщений от директора automount Лента монтируется автоматически после форматирования командой label cancel Отменить задание create Создать запись Пула в БД из описания ресурса в файле delete Удалить из каталога информацию о задании, томе или пуле вместе со всеми зависимостями disable Запретить автоматическое планирование работы задания enable Разрешить автоматическое планирование работы задания estimate Считает приблизительный объём сохраняемых данных до сжатия, листинг дает полный список exit Прекращение сессии Bconsole gui Не интерактивный режим gui help Печать справки по определенной команде label Добавить новый том к пулу в БД и форматировать том; предварительно может потребоваться размонтировать ленту; если лента уже отформатирована, то требуется выполнить команды purge и relabel list Список объектов из каталога БД llist Полный или длинный список, как список команд messages вывести накопившиеся сообщения от директора memory Вывести текущее использование памяти DIR mount Монтировать хранилище prune Удалить из БД информацию о файлах, заданиях или томах с истёкшим сроком хранения и всё с нею связанное purge Очистка записей из каталога о файлах, заданиях или томах с истёкшим сроком хранения и всё с нею связанное python Команда управления Python quit Прекращение сессии Bconsole query Запрос каталога restore Восстановить файлы relabel Заново отформатировать старый том (должен быть в состоянии Purged или Recycle) release перемотать ленту (перед следующим использованием заново прочесть метку) reload Перечитать заново конфигурационный файл bacula-dir.conf run Запустить задание\работу status Отчет о состоянии setdebug Устанавить уровень отладки setip Установить новый адрес клиента - если рзрешено show Показать текущее значение ресурсов файла настройки sqlquery Использование SQL для запроса каталога time Показать текущее временя trace Включение / выключение трассировки в файл unmount Размонтирование хранилища umount Размонтировать - для старых Unix парней, см. unmount =) update Обновить информацию томов, пула или статистики use Использовать каталог xxx var Подстановка переменных version Показать версию DIR wait Ждать завершения задания В режиме ввода команд, введите точку что бы отменить командный режим Вам сообщение.
Добавим новый том и отформатируем его (это при условии что вы не выставили в Pool, Label Format = "ИМЯ_ТОМА" при этом том автоматически форматируется и добавляется). Для этого выберем нужный SD (backup-disk1) укажем название Тома (как он будет сохраняться на HDD) и выберем нужный Пул.
# bconsole Connecting to Director localhost:9101 1000 OK: thor.kmps.local-dir Version: 5.0.3 (04 August 2010) Enter a period to cancel a command. *label Automatically selected Catalog: MyCatalog Using Catalog "MyCatalog" The defined Storage resources are: 1: File 2: backup-disk1 3: File-SRV1 4: File-SRV2 Select Storage resource (1-4): 3 Enter new Volume name: srv1_volume Defined Pools: 1: Default 2: Scratch 3: thor-pool 4: File 5: srv2-pool 6: srv1-pool Select the Pool (1-6): 6 Connecting to Storage daemon File-SRV1 at thor.kmps.local:9103 ... Sending label command for Volume "srv1_volume" Slot 0 ... 3000 OK label. VolBytes=213 DVD=0 Volume="srv1_volume" Device="FileStorage-srv1" (/home/bacula/SRV1) Catalog record for Volume "srv1_volume", Slot 0 successfully created. Requesting to mount FileStorage-srv1 ... 3906 File device "FileStorage-srv1" (/home/bacula/SRV1) is always mounted. You have messages. *label The defined Storage resources are: 1: File 2: backup-disk1 3: File-SRV1 4: File-SRV2 Select Storage resource (1-4): 4 Enter new Volume name: srv2_volume Defined Pools: 1: Default 2: Scratch 3: thor-pool 4: File 5: srv2-pool 6: srv1-pool Select the Pool (1-6): 5 Connecting to Storage daemon File-SRV2 at thor.kmps.local:9103 ... Sending label command for Volume "srv2_volume" Slot 0 ... 3000 OK label. VolBytes=213 DVD=0 Volume="srv2_volume" Device="FileStorage-srv2" (/home/bacula/SRV2) Catalog record for Volume "srv2_volume", Slot 0 successfully created. Requesting to mount FileStorage-srv2 ... 3906 File device "FileStorage-srv2" (/home/bacula/SRV2) is always mounted. *label The defined Storage resources are: 1: File 2: backup-disk1 Select Storage resource (1-2): 2 Enter new Volume name: thor_volume Defined Pools: 1: Default 2: File 3: Scratch 4: thor-pool Select the Pool (1-4): 4 Connecting to Storage daemon backup-disk1 at thor.kmps.local:9103 ... Sending label command for Volume "thor_volume" Slot 0 ... 3000 OK label. VolBytes=213 DVD=0 Volume="thor_volume" Device="backup-disk1" (/home/bacula/backup) Catalog record for Volume "thor_vol", Slot 0 successfully created. Requesting to mount backup-disk1 ... 3906 File device "backup-disk1" (/home/bacula/backup) is always mounted.
Как видим создался Том thor_volume
# ll /home/bacula/backup/ total 8450 -rw-r----- 1 bacula bacula 8,2M 17 май 23:50 FileDefault -rw-r----- 1 bacula bacula 213B 18 май 14:59 thor_volume
Установим клиента на UNIX машине:
# cd /usr/ports/sysutils/bacula-client # make config Options for bacula-client 5.0.3 [ ] WXCONSOLE Build with wxGTK based GUI console: deprecated [ ] SFDAEMON Build with staticly compiled file daemon [X] NLS Native Language Support via gettext utilities [X] OPENSSL Enable OpenSSL for encrypted communication # make install clean ~~ ################################################################################ NOTE: Sample files are installed in /usr/local/etc: bconsole.conf.sample, bacula-barcodes.sample, bacula-fd.conf.sample Please read this file: /usr/local/share/doc/bacula/ReleaseNotes as installed by docs port for the upgrade procedure. Read the ReleaseNotes for further information. ################################################################################ ===> Running ldconfig /sbin/ldconfig -m /usr/local/lib ===> Registering installation for bacula-client-5.0.3 ===> SECURITY REPORT: This port has installed the following files which may act as network servers and may therefore pose a remote security risk to the system. /usr/local/lib/libbac.so.5 This port has installed the following startup scripts which may cause these network services to be started at boot time. /usr/local/etc/rc.d/bacula-fd If there are vulnerabilities in these programs there may be a security risk to the system. FreeBSD makes no guarantee about the security of ports included in the Ports Collection. Please type 'make deinstall' to deinstall the port if this is a concern. For more information, and contact details about the security status of this software, see the following webpage: http://www.bacula.org/ ===> Cleaning for bacula-client-5.0.3
# cp /usr/local/etc/bacula-fd.conf.sample /usr/local/etc/bacula-fd.conf
Разберемся что внутри:
#cat/usr/local/etc/bacula-fd.conf # # Дефолтный файл конфигурации Bacula File Daemon # # Для Bacula релиза 5.0.3 (04 августа 2010) — FreeBSD 8.2-RELEASE # # Тут не так много, чтобы менять здесь, за исключением, возможно, # Имени File Daemon # # #Список директоров, которым разрешено связаться с этим File Daemon # Director { Name = thor.kmps.local-dir Password = "sIad48UBgVYD2gNAh6mRWKahMFtzjwRWNjtL8p28ma3Z" } # # Ограничение директора, используемого в tray-monitor, # для получения статуса File Daemon # Director { Name = thor.kmps.local-mon Password = "GkSSv/HoUCX7Y7Pi5m62xRD0cnykZnzaYTinCqdhM8t3" Monitor = yes } # # "Глобальные" спецификации конфигурации File daemon # FileDaemon { # Определим FD Name = thor.kmps.local-fd # Имя FD FDport = 9102 # Где слушать директора WorkingDirectory = /var/db/bacula Pid Directory = /var/run Maximum Concurrent Jobs = 20 # Максимальное кол-во заданий } # Отправить все сообщения, за исключением пропущенных файлов # обратно Директору Messages { Name = Standard director = thor.kmps.local-dir = all, !skipped, !restored
Теперь соберем свой конфигурационный файл:
# cat bacula-fd.conf | grep -v ^# Director { Name = thor.kmps.local-dir Password = "SECRET" } Director { Name = thor.kmps.local-mon Password = "SECRET" Monitor = yes } FileDaemon { Name = thor.kmps.local-fd FDport = 9102 WorkingDirectory = /var/db/bacula Pid Directory = /var/run Maximum Concurrent Jobs = 20 } Messages { Name = Standard director = thor.kmps.local-dir = all, !skipped, !restored }
Проверим на наличие ошибок и добавим в rc.conf для запуска при старте ОС.
# bacula-fd -t -d /usr/local/etc/bacula-fd.conf # echo 'bacula_fd_enable="YES"' >> /etc/rc.conf # /usr/local/etc/rc.d/bacula-fd start Starting bacula_fd. # sockstat | grep bacula root bacula-fd 9295 3 tcp4 *:9102 *:* bacula bacula-sd 97221 3 tcp4 *:9103 *:* bacula bacula-dir 97212 4 tcp4 *:9101 *:*
Загружаем программу клиент Win32_64 и запускаем установку программы там указываем следующее.
Тип установки:
Instalation Type: Automatic (так же вы можете поставить только fd без консоли и доков.)
Указываем характеристики DIR:
DIR name: thor.kmps.local-dir
DIR Password: SECRET
DIR Adress: thor.kmps.local
В конце установки предложили сохранить файл C:\srv2-fd.conf такого содержания:
# Client (File Services) to backup Client { Name = srv2-fd Address = srv2.kmps.local FDPort = 9102 Catalog = MyCatalog Password = "MkfdcfGqds5qFoSL/W2uBG0DqIvY5bbVDWq/ZuHN39Ct" # password for FileDaemon File Retention = 30 days # 30 days Job Retention = 6 months # six months AutoPrune = yes # Prune expired Jobs/Files }
Для автоматического запуска DIR, SD и FD сервисов при запуске сервера необходимо добавить строчки в /etc/rc.conf:
# echo 'bacula_dir_enable="YES"' >> /etc/rc.conf # echo 'bacula_sd_enable="YES"' >> /etc/rc.conf # echo 'bacula_fd_enable="YES"' >> /etc/rc.conf
Запуск сервисов:
# /usr/local/etc/rc.d/bacula-dir.sh start # /usr/local/etc/rc.d/bacula-sd.sh start # /usr/local/etc/rc.d/bacula-fd start # ps -ax | grep bacula 2060 ?? Is 0:00,19 /usr/local/sbin/bacula-fd -u root -g wheel -v -c /usr/local/etc/bacula-fd.conf 56766 ?? Is 0:19,37 /usr/local/sbin/bacula-sd -u bacula -g bacula -v -c /usr/local/etc/bacula-sd.conf 61339 ?? Ss 0:00,14 /usr/local/sbin/bacula-dir -u bacula -g bacula -v -c /usr/local/etc/bacula-dir.conf 64965 0 S+ 0:00,00 grep bacula # sockstat | grep bacula bacula bacula-dir 61339 5 tcp4 *:9101 *:* bacula bacula-dir 61339 6 dgram -> /var/run/log bacula bacula-sd 56766 4 tcp4 *:9103 *:* root bacula-fd 2060 3 tcp4 *:9102 *:*
Автоматическое сохранение данных уже настроено и поэтому вы должны следить чтобы все работы шли без ошибок, проверять оставшееся место на HDD. Если вы выполните команду run без параметров она вам выдаст все созданные задачи и вы можете выбрать и запустить нужную. Вы можете сразу запустить нужную задачу с указанным именем задачи *run job=имя-задания.
*run A job name must be specified. The defined Job resources are: 1: BackupClient1 2: BackupCatalog 3: RestoreFiles 4: thor_backup-job 5: srv1_backup-job 6: srv2_backup-job Select Job resource (1-6): 6 Run Backup job JobName: srv2_backup-job Level: Full Client: srv2-fd FileSet: srv2-fileset Pool: srv2-pool (From Job resource) Storage: File-SRV2 (From Job resource) When: 2011-05-20 23:56:51 Priority: 10 OK to run? (yes/mod/no): yes Job queued. JobId=79
*status dir thor.kmps.local-dir Version: 5.0.3 (04 August 2010) amd64-portbld-freebsd8.2 freebsd 8.2- Daemon started 20-май-11 23:32, 5 Jobs run since started. Heap: heap=0 smbytes=102,439 max_bytes=237,812 bufs=365 max_bufs=395 ~~~~~~~~ Terminated Jobs: JobId Level Files Bytes Status Finished Name ==================================================================== 75 Full 831 717.5 M OK 20-май-11 23:34 srv1_backup-job 76 831 800.9 M OK 20-май-11 23:39 RestoreFiles 77 1 6.825 K OK 20-май-11 23:44 RestoreFiles 78 1 6.825 K OK 20-май-11 23:48 RestoreFiles 79 Full 109 29.67 M OK 20-май-11 23:57 srv2_backup-job ====
И так с имитируем следующую ситуацию потеря\удаления файла\директории. Восстановим из архива данный файл с помощью bconsole. Директория E:/SIT_v1.1 утеряна вся.
Управление при перемещении и маркировки файлов в этом режиме довольно необычны так, что привыкайте.
*restore Automatically selected Catalog: MyCatalog Using Catalog "MyCatalog" Сначала выберите один или несколько JobIds, которые содержат файлы которые должны быть восстановлены. Вам будет предложен ряд методов указания JobIds. Тогда вам будет разрешено выбрать, какие файлы из этих JobIds должны быть восстановлены. To select the JobIds, you have the following choices: 1: List last 20 Jobs run 2: List Jobs where a given File is saved 3: Enter list of comma separated JobIds to select 4: Enter SQL list command 5: Select the most recent backup for a client 6: Select backup for a client before a specified time 7: Enter a list of files to restore 8: Enter a list of files to restore before a specified time 9: Find the JobIds of the most recent backup for a client 10: Find the JobIds for a backup for a client before a specified time 11: Enter a list of directories to restore for found JobIds 12: Select full restore to a specified Job date 13: Cancel Select item: (1-13): 1 +-------+--------------------+---------------------+----------+----------+-------------+ | JobId | Client | StartTime | JobLevel | JobFiles | JobBytes | +-------+--------------------+---------------------+----------+----------+-------------+ | 79 | srv2-fd | 2011-05-20 23:56:55 | F | 109 | 29670528 | | 75 | srv1-fd | 2011-05-20 23:32:37 | F | 831 | 717551775 | | 74 | srv1-fd | 2011-05-20 23:30:46 | F | 0 | 0 | | 73 | srv2-fd | 2011-05-20 23:29:24 | F | 109 | 29670528 | | 72 | srv2-fd | 2011-05-20 23:26:51 | F | 109 | 29670528 | +-------+--------------------+---------------------+----------+----------+-------------+ Для выбора JobIds, у вас есть следующие варианты [дальше лучше без перевода]: 1: List last 20 Jobs run 2: List Jobs where a given File is saved 3: Enter list of comma separated JobIds to select 4: Enter SQL list command 5: Select the most recent backup for a client 6: Select backup for a client before a specified time 7: Enter a list of files to restore 8: Enter a list of files to restore before a specified time 9: Find the JobIds of the most recent backup for a client 10: Find the JobIds for a backup for a client before a specified time 11: Enter a list of directories to restore for found JobIds 12: Select full restore to a specified Job date 13: Cancel Select item: (1-13): 3 Enter JobId(s), comma separated, to restore: 79 You have selected the following JobId: 79 Building directory tree for JobId(s) 79 ... ++++++++++++++++++++++++++++++++ 97 files inserted into the tree. Сейчас вы работаете в режиме выбора файла, где вы добавляете (mark) и удалять (unmark) файлы, котоfрые будут восстановлены. Нет изначально добавленных файлов, вы можете использовать ключевое слов "all" в командной строке чтобы отметить всё. Введите "done ", чтобы завершить этот режим. cwd is: / $ ls E:/ $ cd E:/ cwd is: E:/ $ ls SIT_v1.1/ $ mark SIT_v1.1 109 files marked. $ done Bootstrap records written to /var/db/bacula/thor.kmps.local-dir.restore.4.bsr The job will require the following Volume(s) Storage(s) SD Device(s) =========================================================================== srv2_volume File-SRV2 FileStorage-srv2 Volumes marked with "*" are online. 109 files selected to be restored. Defined Clients: 1: srv1-fd 2: srv2-fd 3: thor-fd 4: thor.kmps.local-fd Select the Client (1-4): 2 Run Restore job JobName: RestoreFiles Bootstrap: /var/db/bacula/thor.kmps.local-dir.restore.4.bsr Where: /home/bacula/bacula-restores Replace: always FileSet: Full Set Backup Client: srv2-fd Restore Client: srv2-fd Storage: File-SRV2 When: 2011-05-21 00:01:10 Catalog: MyCatalog Priority: 10 Plugin Options: *None* OK to run? (yes/mod/no): yes Job queued. JobId=80
Посмотрим статус директора и что он сказал на эту работу:
*status dir thor.kmps.local-dir Version: 5.0.3 (04 August 2010) amd64-portbld-freebsd8.2 freebsd 8.2- Daemon started 20-май-11 23:32, 6 Jobs run since started. Heap: heap=0 smbytes=103,909 max_bytes=240,228 bufs=366 max_bufs=395 ~~~ Terminated Jobs: JobId Level Files Bytes Status Finished Name ==================================================================== ~~~ 78 1 6.825 K OK 20-май-11 23:48 RestoreFiles 79 Full 109 29.67 M OK 20-май-11 23:57 srv2_backup-job 80 109 29.67 M OK 21-май-11 00:01 RestoreFiles ====
Заходим на srv2.kmps.local и на диске C:\ появляется с восставленная директория.
C:\home\bacula\bacula-restores\E\SIT_v1.1
Восстановление файлов на Unix клиентах рассматривать не буду в виду аналогичной работы.
Я сторонник простых и надежных решений, а так же дублирующих систем. К примеру у меня как и у всех стоит RAID-1 на всех серверах и это хорошо. Идем дальше у меня до бакулы на серверах был отдельный раздел\слайс\жеский диск созданный специально для бекапов и туда резервные копии складывает утилита или скрипт. К примеру:
Бакула дополнила существующую схема:
Пул это описание для набора томов. Тома это файлы, ленты и DVD. Он используется при описании задания для указания нужного тома.
Аутентификация и авторизация доступа к директору может быть 3 типов:
Права доступа для именованной консоли по умолчанию - права отсутствуют, восстанавливать можно только в место по умолчанию.
Описание расписания запуска заданий и переопределения ресурсов Level, Pool, Storage, Messages для задания. Используется в описании задания для указания времени автоматического запуска.
Остальные переменные буду добавлять по надобности.
Воспользуемся Webacula это PHP (Zend Framework) веб-интерфейс для мониторинга и восстановление файлов.
Основные особенности программы:
Для начала скачаем Webacula и ZendFramework к ней. (следите за новыми версиями и сами корректируйте линки для fetch). Установим последнюю версию, распакуем и дадим нужные права.
# cd /usr/local/www/ # fetch _http://sourceforge.net/projects/webacula/files/webacula/5.5.0/webacula-5.5.tar.gz # fetch _http://framework.zend.com/releases/ZendFramework-1.11.6/ZendFramework-1.11.6-minimal.tar.gz # tar zxvf webacula-5.5.tar.gz # mv webacula-5.5 webacula # tar zxvf ZendFramework-1.11.6-minimal.tar.gz # cd ZendFramework-1.11.6-minimal/library/ # ls Zend # cp -R Zend/ /usr/local/www/webacula/library/Zend/ # cd /usr/local/www/ # chown -R www:www webacula/ # rm webacula-5.5.tar.gz ZendFramework-1.11.6-minimal.tar.gz
Проверим необходимые модули
# cd /usr/local/www/webacula/install/ # php-cgi check_system_requirements.php sqlite3: not found X-Powered-By: PHP/5.3.6 Content-type: text/html Webacula check System Requirements... Current MySQL version = 5.0.92 OK Current PostgreSQL version = 8.4.7 OK Current PHP version = 5.3.6 OK php pdo installed. OK php gd installed. OK php xml installed. OK php dom installed. OK php pdo_mysql installed. OK Warning. PHP extension pdo_pgsql not installed. Warning. PHP extension pdo_sqlite not installed. php-dom, php-xml installed. OK
Отредактируем конфигурационный файл webacula:
# cat /usr/local/www/webacula/application/config.ini [general] db.adapter = PDO_MYSQL db.config.host = localhost db.config.username = BACULA_USER db.config.password = BACULA_USER_PASS db.config.dbname = BACULA_DB def.timezone = "Europe/Moscow" locale = "ru" bacula.sudo = "/usr/local/bin/sudo" bacula.bconsole = "/usr/local/sbin/bconsole" bacula.bconsolecmd = "-n -c /usr/local/etc/bconsole.conf" [timeline] fontsize = 10 [webacula] email.to_admin = root@localhost email.from = webacula@localhost [feed] feed_title = "My Bacula backup server #1" feed_desc = "Description feed here" [layout] path = "default"
Отредактируем конфигурационный файл DB:
# vi /usr/local/www/webacula/install/db.conf db_name="BACULA_DB" db_user="BACULA_USER" db_pwd="BACULA_USER_PASS" # Веб аккаунт 'root', а пароль к нему укажите ниже # webacula_root_pwd="WEB_WEBACULA_PASSWORD"
В новой версии Webacula 5.5 таблицы Bacula и Webacula совмещены те располагаются в одной БД.
Теперь нам необходимо добавить нужные таблицы и заполнить ACL:
# cd /usr/local/www/webacula/install/MySql/ # sh ./10_make_tables.sh Creation of webacula MySQL tables succeeded. # sh ./20_acl_make_tables.sh Creation of Webacula ACLs MySQL tables succeeded.
Добавим права на запуск /usr/sbin/bconsole от имени www.
# visudo WWW_USER ALL=NOPASSWD: /usr/local/sbin/bconsole
Я слинковал публичный html в нужную мне директорию своего веб сервера:
# cd /home/serv/www/data/ # ll lrwxr-xr-x 1 root serv 20B 5 авг 2010 glpi -> /usr/local/www/glpi/ lrwxr-xr-x 1 root serv 26B 5 авг 2010 phpMyAdmin -> /usr/local/www/phpMyAdmin/ -rw-r--r-- 1 serv serv 21B 5 авг 2010 phpinfo.php lrwxr-xr-x 1 root serv 27B 5 авг 2010 phpldapadmin -> /usr/local/www/phpldapadmin lrwxr-xr-x 1 root serv 20B 17 авг 2010 sarg -> /usr/local/www/sarg/ drwxr-xr-x 3 serv serv 512B 12 авг 2010 sqstat lrwxr-xr-x 1 root serv 29B 27 май 09:17 webacula -> /usr/local/www/webacula/html/
Отредактировал .htaccess
# vi /usr/local/www/webacula/html/.htaccess SetEnv APPLICATION_ENV development SetEnv APPLICATION_ENV production #php_flag magic_quotes_gpc off #php_flag register_globals off RewriteEngine On # edit RewriteBase if necessary RewriteBase /webacula RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L]
Запускаем:
http://webserver.local/webacula
Для мониторинга и удобной работы с бакулой есть несколько утилит доступных в Unix системах:
BAT (Bacula Admin Tool) - графический интерфейс к бакуле скриншоты
Port: bacula-bat-5.0.3 Path: /usr/ports/sysutils/bacula-bat Info: The network backup solution (GUI) Maint: dan@langille.org B-deps: expat-2.0.1_1 fixesproto-4.1.2 fontconfig-2.8.0,1 freetype2-2.4.4... R-deps: expat-2.0.1_1 fixesproto-4.1.2 fontconfig-2.8.0,1 freetype2-2.4.4... WWW: _http://www.bacula.org/
tray-monitor - это Bacula KDE/GNOME tray monitor applet. Она вам показывает статус работы сервера.
Заметка: в опциях bacula-client еще есть WXCONSOLE Build with wxGTK based GUI console: deprecated.
Web интерфейсы - их достаточное количество и на любой вкус список.
В) У меня не работают встроенные задания (к примеру BackupCatalog)
О) Проверьте разрешение на чтение пользователем bacula.
# ll bacula-dir.conf -rw-r----- 1 root bacula 9,4K 26 май 16:12 bacula-dir.conf # ll bacula-sd.conf -rw-r----- 1 root bacula 6,7K 24 май 14:05 bacula-sd.conf # ll bconsole.conf -rw-r----- 1 root bacula 279B 17 май 11:52 bconsole.conf
В) В самом начале статье было упоминание о утилите ntbackup где, для чего вы ее применяете.
О) До бакулы я сохранял образ системы с помощью этой утилиты с периодичностью раз в месяц и мне не хотелось ломать установленный порядок. Так же я настроил теневое копирование с переодичностью 1 раз в 4 часа для БД и расшаренных директорий и пользователи могут откатывать нужные файлы на нужную дату и время.
В) Что делать если сервер Windows\Unix сломался и не загружаться, но есть резервные копии диска C:\ (файл ntbackup) и\или дампы ФС.
О) Попробуем описать ход работы:
а1) Запускаете Recovery Console (Консоль Восстановления) с диска ОС в нем восстанавливаете загрузочные файлы и при удачном раскладе загружаетесь. Далее вытаскиваете из архива бакулы файл ntbackup для этого клиента и заливаете на него. Далее через “Мастер восстановления” утилиты ntbackup все разворачиваете обратно.
а2) Бывает что вариант а1 не работает никак не удается загрузить систему. Есть вариант с ASR, но требуется создание аварийной дискеты в ntbackup для этой машины. Восстановите файл ntbackup на любую машину с последующим копированием этого файла на сдохший сервер (возьмите любую LiveCD сбору WinPE\Linux) и далее запускаете CD c ОС выбирается восстановление ASR вставляете дискету и выполняете работу.
а3) Disast Recove Using Bacula (bacula rescue disk)
б1) Для Unix пытайтесь загрузиться или воспользуйтесь Unix LiveCD и подмонтируйте фс с последующим разворотом архивов\файлов в нужные слайсы.
ДЕМО ЧИСТО ДЛЯ КОНФИГА. СТАТЬЯ БУДЕТ ДОПИСАНА ПОЗЖЕ
===
# vi /etc/make.conf # MySQL .if ${.CURDIR} == ${PORTSDIR}/databases/mysql50-server #BUILD_OPTIMIZED=yes #BUILD_STATIC=yes WITH_CHARSET=cp1251 WITH_COLLATION=cp1251_bin #WITHOUT_INNODB=yes WITH_ARCHIVE=yes .endif # MySQL client .if ${.CURDIR} == ${PORTSDIR}/databases/mysql50-client #BUILD_OPTIMIZED=yes #BUILD_STATIC=yes WITH_CHARSET=cp1251 WITH_COLLATION=cp1251_bin .endif
Создание дампа
# mysqldump -uUser -h127.0.0.1 -p Name_DB> Name_DB.sql
Ресторинг дампа
# cat Name_DB.sql | mysql -uUser -pUser_password Name_DB
Вложение | Размер |
---|---|
my.cnf | 2.84 КБ |
Network UPS Tools - набор программ, которые обеспечивают интерфейс для сетевого мониторинга и управления UPS оборудованием. NUT позволяет работать нескольким серверам с одним UPS и позволяет штатно отключать необходимые серверы в случае разрядки батареи, а так же возможен мониторинг текущего состояния UPS (нагрузка/зарядка/входная мощность). В данной статье рассматривается использование ПО Network UPS Tools для обеспечения бесперебойной работы трех серверов от одного UPS с мониторингом через веб-интерфейс и снятием статистики в Cacti.
Инвентарь:
Рассмотрим разные примеры подключения UPS. Их несколько видов и все они стандартные.
Один UPS подключен к одному компьютеру. Эту конфигурацию используют большинство пользователей, но в серверной среде такая конфигурация редко встречается. Вам потребуется только upsd и upsmon.
Один UPS питает несколько серверов. Только один сервер из них подключен кабелем управления к ИБП это и есть "Master" система с демонами upsd и upsmon в режиме мастера. Остальные системы это "Slave" для них необходимы только upsmon в подчиненном режиме. Все команды от мастер системы подчиненные получают по сети. Это полезно, когда у вас есть очень мощный ИБП который может "вытянуть" несколько серверов.
Некоторые системы имеют несколько источников питания. Как правило, это высокопроизводительные сервера. Некоторые с горячей заменой БП и другими причудами. В этом случае используйте несколько драйверов (по одному на UPS) один upsd и upsmon (как мастер для UPS 1 и 2)
По этой причине, каждому UPS присваивается "энергетическая ценность" - количество блоков питания для питания системой. Общий объем доступной "энергетической ценности" является (по сравнению с минимумом) необходимым для этого оборудования. Например, если у вас есть 3 источника питания и 3 ИБП, но только 2 блока должна быть запущена в любой момент времени этот минимум будет составлять 2. Это означает, что вы можете спокойно потерять один ИБП и NUT будет обрабатывать это правильно.
Серия UPS подключены последовательным портом с одним "Master" сервером который раздает команды остальным и таких UPS может быть с десяток.
В состав APC Smart-UPS 2200VA входил COM кабель им мы и воспользуемся. Так же есть возможность докупить USB кабель, но с USB бывают проблемы подключения которые можно решить при некотором упорстве. Посмотрим, что нашлось:
# dmesg -a | grep sio0 sio0: <16550A-compatible COM port> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0 sio0: type 16550A sio0: [FILTER]
Посмотрим в устройствах.
% ls /dev/cuau* /dev/cuau0 /dev/cuau0.init /dev/cuau0.lock
Найдем и установим порт, а так же выберем необходимые опции.
# cd /usr/ports && make search name='nut-2' Port: nut-2.4.1_6 Path: /usr/ports/sysutils/nut Info: Network UPS Tools Maint: itetcu@FreeBSD.org B-deps: autoconf-2.68 autoconf-wrapper-20101119... R-deps: expat-2.0.1_1 gettext-0.18.1.1 libiconv-1.13.1_1... WWW: _http://www.networkupstools.org/ # cd /usr/ports/sysutils/nut && make config ?????????????????????????????????????????????????????????????????????? ? Options for nut 2.4.1_6 ? ? ?????????????????????????????????????????????????????????????????? ? ? ? [X] SERIAL SERIAL support ? ? ? ? [ ] USB USB support ? ? ? ? [ ] SNMP SNMP support ? ? ? ? [X] NEON NEON XML/HTTP support ? ? ? ? [ ] PDU Powerman PDU support ? ? ? ? [ ] HAL HAL support ? ? ? ? [ ] IPV6 IPV6 support ? ? ? ? [X] CGI Web CGI interface ? ? ? ?????????????????????????????????????????????????????????????????? ? ? [ OK ] Cancel ? ??????????????????????????????????????????????????????????????????????
# cd /usr/ports/sysutils/nut && make install clean ~~~~~~~~~~~ This port has installed the following startup scripts which may cause these network services to be started at boot time. /usr/local/etc/rc.d/nut_upsmon /usr/local/etc/rc.d/nut_upslog /usr/local/etc/rc.d/nut If there are vulnerabilities in these programs there may be a security risk to the system. FreeBSD makes no guarantee about the security of ports included in the Ports Collection. Please type 'make deinstall' to deinstall the port if this is a concern. For more information, and contact details about the security status of this software, see the following webpage: _http://www.networkupstools.org/
Найдем драйвер APC Smart-UPS в списке поддерживаемого оборудования NUT.
# cd /usr/local/etc/nut # cat driver.list | grep Smart-UPS ## <manufacturer> <model name> <model extra> <driver> ## "APC" "Smart-UPS" "" "apcsmart" "APC" "Smart-UPS USB" "USB" "usbhid-ups"
Все конфигурационные файлы находятся в директории "/usr/local/etc/nut"
В этом конфигурационном файле вы указываете настройки подключения UPS.
Скопируем дефолтный конфигурационном файл.
# cd /usr/local/etc/nut # cp ups.conf.sample ups.conf
Добавим свой UPS и настроим подключение к нему.
[APC] driver = apcsmart port = /dev/cuau0 cable = 940-1524C desc = "APC Smart-UPS 2200"
Опишим некоторые параметры для использования:
Служит для контроля доступа к серверу и для установки других значений конфигурации. Этот файл содержит подробные сведения об предоставления доступа, таким образом, обеспечивается безопасность. В идеальном случае, только процесс upsd должен иметь возможность прочитать данные из этого файла.
Создадим конфигурационный файл.
# cp upsd.conf.sample upsd.conf
Добавим следующие значения для прослушивания следующих IP для запросов о состоянии UPS клиентов:
LISTEN 127.0.0.1 LISTEN 192.168.0.6
Опишем параметры:
Контроль доступа для UPS демона (профили пользователей). Именно в этом файле вы указываете, кто и в какой мере будет работать с NUT.
# cp upsd.users.sample upsd.users # cat upsd.users [admin] password = upsadminpass actions = SET instcmds = ALL [monmaster] password = upsmonmasterpass upsmon master [monslave] password = upsmonslavepass upsmon slave
Значения:
Каждый UPS монитор может определяться как один из трех возможных типов:
upsmon master - полные полномочия управлением питания подключенных к системе. UPS под управлением этого upsmon и отвечает за выключение разряженного аккумулятора. Выключение происходит после безопасного выключения всех slave мониторов. Если ваш UPS подключен непосредственно к системе через последовательный порт, то для upsmon этой системы следует определить его как master.
upsmon slave - эта система, под управлением upsmon master и она не выключается непосредственно. Операционная система будет выключена перед отключением питания master. Используйте этот режим при запуске монитора на других серверах работающих на том же UPS. И очевидно, что только один сервер может быть подключен к последовательному порту на UPS, коим будет является master. Все остальные сервера будут slave.
upsmon monitor-only - при этом режиме будут создаваться уведомления о состоянии или изменении работы батареи, переключении на линию и т.д., но не будет завершать работу системы.
actions - Действия пользователя с применением upsd.
- SET - изменить значения определенных переменных в UPS
- FSD - установка флага "принудительного выключения" для UPS
instcmds - разрешения пользователю на инициирование конкретных команд. Применяя "ALL" вы разрешаете использовать все команды, Существует множество команд выполните "upscmd -l" чтобы увидеть, что ваше оборудование поддерживает. Вот, к примеру, несколько команд.
Этот конфигурационный файл предоставляет основные функции в программе мониторинга UPS, например это безопасное завершений работы при сбое питания, уведомления и другие переменные. В многоуровневой схеме утилиты NUT это клиент.
# cp upsmon.conf.sample upsmon.conf # cat upsmon.conf | grep -v ^# MONITOR APC@localhost 1 monmaster upsmonmasterpass master MINSUPPLIES 1 SHUTDOWNCMD "/sbin/shutdown -p +0" POLLFREQ 5 POLLFREQALERT 5 HOSTSYNC 15 DEADTIME 15 POWERDOWNFLAG /etc/killpower NOTIFYFLAG ONLINE SYSLOG+WALL NOTIFYFLAG ONBATT SYSLOG+WALL NOTIFYFLAG LOWBATT SYSLOG+WALL NOTIFYFLAG SHUTDOWN SYSLOG+WALL RBWARNTIME 43200 NOCOMMWARNTIME 300 FINALDELAY 5
Мы добавили значения MONITOR в котором необходимо добавить свое значение. Формат таков:
MONITOR [system] [powervalue] [username] [password] [type]
Рассмотрим некоторые значения переменных:
Проверьте разрешения на директорию "/var/db/nut" текущий пользователь должен быть uucp (или другой NUT_USER) и права 0750:
# ls -ld /var/db/nut/ drwxr-x--- 2 uucp uucp 512 18 июн 22:21 /var/db/nut/ # ls -ls /var/db/nut/ total 8 0 srw-rw---- 1 uucp uucp 0 18 июн 22:21 apcsmart-APC 2 -rw-r--r-- 1 uucp uucp 5 18 июн 22:21 apcsmart-APC.pid 2 -rw-r--r-- 1 uucp uucp 5 18 июн 22:21 upsd.pid 2 -rw-r--r-- 1 root uucp 5 18 июн 22:21 upslog.pid 2 -rw-r--r-- 1 root uucp 5 18 июн 22:21 upsmon.pid
Измените разрешения на конфигурационные файлы: они должны читаться пользователем uucp (или другим пользователем NUT_USER):
# cd /usr/local/etc/nut/ # chown uucp:wheel upsd.conf upsd.users upsmon.conf # chmod 0640 upsd.conf upsd.users upsmon.conf # ls -l *.conf -rw-r--r-- 1 root wheel 1106 17 авг 2010 hosts.conf -rw-r--r-- 1 uucp wheel 3750 17 авг 2010 ups.conf -rw-r----- 1 uucp wheel 36 5 авг 2010 upsd.conf -rw-r----- 1 uucp wheel 12068 23 авг 2010 upsmon.conf -rw-r--r-- 1 root wheel 1416 17 авг 2010 upsset.conf
Запустим в ручную
# /usr/local/etc/rc.d/nut start Network UPS Tools - UPS driver controller 2.4.1 Network UPS Tools - APC Smart protocol driver 2.00 (2.4.1) APC command table version 2.0 Broadcast Message from root@thor.kmps.local (no tty) at 12:51 MSD... Communications with UPS APC@localhost lost Detected Smart-UPS 2200 RM [JS0605026405] on /dev/cuau0 Starting nut. Network UPS Tools upsd 2.4.1 listening on 192.168.0.6 port 3493 listening on 127.0.0.1 port 3493 Connected to UPS [APC]: apcsmart-APC Broadcast Message from root@thor.kmps.local (no tty) at 12:51 MSD... Communications with UPS APC@localhost established
Проверим, все ли в порядке.
# ps -ax | grep nut 1030 ?? Ss 0:06,30 /usr/local/libexec/nut/apcsmart -a APC 12400 1 S+ 0:00,00 grep nut # ps -ax | grep ups 1032 ?? Ss 0:01,43 /usr/local/sbin/upsd 1040 ?? Is 0:00,04 /usr/local/bin/upslog -s myups@localhost -l /var/log/ups.log -i 300 1048 ?? Is 0:00,00 /usr/local/sbin/upsmon localhost 1050 ?? S 0:00,46 /usr/local/sbin/upsmon localhost 12414 1 S+ 0:00,00 grep ups
Проверим как живет UPS
# upsc APC@localhost battery.alarm.threshold: 0 battery.charge: 100.0 battery.charge.restart: 15 battery.date: 01/28/06 battery.packs: 000 battery.runtime: 2820 battery.runtime.low: 120 battery.voltage: 54.54 battery.voltage.nominal: 048 driver.name: apcsmart driver.parameter.cable: 940-1524C driver.parameter.pollinterval: 2 driver.parameter.port: /dev/cuau0 driver.version: 2.4.1 driver.version.internal: 2.00 input.frequency: 50.00 input.quality: FF input.sensitivity: H input.transfer.high: 253 input.transfer.low: 208 input.transfer.reason: S input.voltage: 224.6 input.voltage.maximum: 224.6 input.voltage.minimum: 224.6 output.voltage: 224.6 output.voltage.nominal: 230 ups.delay.shutdown: 180 ups.delay.start: 000 ups.firmware: 665.6.I ups.id: UPS_IDEN ups.load: 018.8 ups.mfr: APC ups.mfr.date: 01/28/06 ups.model: Smart-UPS 2200 RM ups.serial: JS0605026405 ups.status: OL ups.temperature: 035.1 ups.test.interval: 1209600 ups.test.result: NO
Если кому-то нужен более краткий отчет, то выполните следующую команду.
# upsc APC@localhost ups.status OL
Можно посмотреть общий монитор.
# upsmon Network UPS Tools upsmon 2.4.1 UPS: APC@localhost (master) (power value 1) Using power down flag file /etc/killpower
Для запуска NUT при старте FreeBSD добавляем в /etc/rc.conf следующее:
nut_enable="YES" nut_upslog_enable="YES" nut_upsmon_enable="YES"
Перезагрузим FreeBSD и увидим при загрузке следующее.
Network UPS Tools - UPS driver controller 2.4.1 Network UPS Tools - APC Smart protocol driver 2.00 (2.4.1) APC command table version 2.0 Detected Smart-UPS 2200 RM [JS0605026405] on /dev/cuau0 Starting nut. Network UPS Tools upsd 2.4.1 listening on 192.168.0.6 port 3493 listening on 127.0.0.1 port 3493 Connected to UPS [APC]: apcsmart-APC Starting nut_upslog. Network UPS Tools upslog 2.4.1 logging status of myups@localhost to /var/log/ups.log (300s intervals) Starting nut_upsmon. Network UPS Tools upsmon 2.4.1 UPS: APC@localhost (master) (power value 1) Using power down flag file /etc/killpower
Подключим сервера Windows 2003 в качестве клиентов. Для этого необходимо установить и настроить необходимое ПО. Список клиентских программ смотрите тут Client projects. Мне был необходим WinNUT. Программу необходимо скачать и установить, а так же настроить его под свои параметры. После установки начинаете редактировать конфигурационный файл через WinNUT Configuration Tool
Конфигурационный файл будет представлять следующее:
MONITOR APC@192.168.0.6 1 monslave upsmonslavepass slave MINSUPPLIES 1 NOTIFYCMD "c:\\Program Files\\WinNUT\\alertPopup.exe" POLLFREQ 5 POLLFREQALERT 5 HOSTSYNC 15 DEADTIME 15 RBWARNTIME 43200 NOCOMMWARNTIME 300 FINALDELAY 5
Web-интерфейс проверки статуса UPS и изменения некоторых параметров батареи. Как вы помните при установке NUT вам было предложенно установить CGI - Web CGI interface надеюсь вы его выбрали для установки. И так вы можете посмотреть, что upsstats может нам предложить.
# man 8 upsstats.cgi
# cd /usr/local/etc/nut # cp upsset.conf.sample upsset.conf # cp upsstats.html.sample upsstats.html # cp upsstats-single.html.sample upsstats-single.html
Раскоментируем строчку.
# cat upsset.conf I_HAVE_SECURED_MY_CGI_DIRECTORY
В конфигурационный файл Apache добавим следующее:
<VirtualHost *:80> ServerName ups.kmps.local ServerAlias ups ServerAdmin admin@localhost Options Indexes FollowSymlinks MultiViews +ExecCGI AddHandler cgi-script .cgi DocumentRoot /usr/local/www/nut/ #AccessFileName .htaccess </VirtualHost>
Перезапустите Apache и зайдите на http://ups И при переходе на ваш адрес у вас должна отобразится страница Network UPS Tools с вкладками:
Статистика и краткая характеристика:
Наглядный график с обновлением через F5 ):
Настройки доступны после ввода логина и пароля указанных в конфигурационных файлов (admin).
Обратите внимание на параметр "Minimum battery level for restart after power off (percent)" при каком заряде батареи подавать питание.
Для сбора статистики вы можете использовать кактус для этого нужно следующее:
1. Скачать скрипт cacti-nut.0.5.tar_.gz (новая версия cacti-nut.0.6.tar_.gz) и распаковать.
Скопируйте файл scripts/ss_nut_ups_status.php в директорию cacti/scripts/
Скопируйте файл resource/nut_ups_status.xml в директорию cacti/resource/script_server/
2. Импортировать шаблон из архива
Console > Import Templates > Views [cacti_data_query_nut_ups_statistics.xml]
3. Создать данные. В разделе Console > Devices > [сервер с NUT] и на панели Associated Data Queries добавляем Data Query: NUT — UPS Statistics > Add. В добавленной строчке в столбце status должны увидеть:
Success [2 Items, 1 Row]
4. Создать график для этих данных на странице параметров устройств строка Create Graphs for this Host. Там мы есть Data Query [NUT — UPS Statistics] в строке которой расположены наши UPS. Отмечаем галочкой нужный и выбираем graph type:
Нажимаем Create и через некоторое время мы уведем такой график:
Обязательным составляющим будет проверка работы NUT сначала программная, а потом реальное отключения питания.
К примеру, когда upsmon необходимо быстро выключить локальную систему, она устанавливает флаг "FSD" (forced shutdown - принудительное отключение) для любых UPS, на котором она выполняется в master режиме. Данная возможность используется и для синхронизации slaves компьютеров в том случае, если master UPS передает событие и всем рассылается сообщение о немедленном прекращении работы. Можно вручную вызвать этот режим на master upsmon, запустив другой экземпляр с флагом '-c fsd '. Это полезно, когда вы хотите инициировать shutdown перед критическим этапом. Эмулируем падение мощности:
# upsmon -c fsd
Проведем практические испытания - выключим электричество на входе UPS'а и посмотрим, как отреагирует сервер и клиент. В моем случае как и было задумано, сперва штатно выключились два сервера Windows 2003 (при зарядке батареи 10%), а затем - FreeBSD (при зарядке батареи 5%)
June 19 14:04:03 thor upsmon[770]: UPS APC@localhost on battery June 19 14:41:43 thor upsmon[770]: UPS APC@localhost battery is low June 19 14:41:43 thor upsmon[770]: Executing automatic power-fail shutdown Broadcast Message from root@thor.kmps.local (no tty) at 14:41 MSD... UPS APC@localhost battery is low Broadcast Message from root@thor.kmps.local (no tty) at 14:41 MSD... Executing automatic power-fail shutdown June 19 14:41:43 thor upsmon[770]: Auto logout and shutdown proceeding Broadcast Message from root@thor.kmps.local (no tty) at 14:41 MSD... Auto logout and shutdown proceeding *** FINAL System shutdown message from root@thor.kmps.local *** System going down IMMEDIATELY June 19 14:41:48 thor shutdown: halt by root: June 19 14:42:20 thor rc.shutdown: 30 second watchdog timeout expired. Shutdown terminated.
Подключаем UPS
# usbconfig ugen0.1: <OHCI root HUB SiS> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=SAVE ugen1.1: <OHCI root HUB SiS> at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=SAVE ugen2.1: <EHCI root HUB SiS> at usbus2, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE ugen0.2: <Smart-UPS 1000 FW652.19.I USB FW11.03 American Power Conversion> at usbus0, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON
Находим точный адрес ugen0.2.
# ll /dev/ugen0.2 lrwxr-xr-x 1 root wheel 9B 23 май 02:14 /dev/ugen0.2 -> usb/0.2.0 # ll /dev/usb/0.2.0 crw------- 1 uucp operator 0, 106 23 май 02:14 /dev/usb/0.2.0
Далее ищем и добавляем строку с chown с нужным портом.
# vi /usr/local/etc/rc.d/nut nut_prestart() { chown -h uucp /dev/usb/0.2.0 ${nut_prefix}/libexec/nut/upsdrvctl start }
Добавляем в конфигурационный файл NUT свой UPS.
# vi /usr/local/etc/nut/ups.conf [APC] driver = usbhid-ups port = auto desc = "APC Smart-UPS 1000"
В) Как после включения питания автоматически запускать сервера?
О) В BIOS серверов укажите включение при появление питания. А так же в веб интерфейсе NUT во вкладке настройка укажите необходимый процент"Minimum battery level for restart after power off (percent)" для подачи питания на машины.
В)Можно ли настроить nut, чтобы он выключал компы сразу, как только уровень заряда батареи достигнет какого-то определенного значения, например, при 60% заряда?
О) Можно поиграться с настройками (в веб морде)
Remaining battery runtime when UPS switches to LB (Оставшееся время работы от батареи в сек, когда ИБП переходит в LB (LB - система работает от севшей батареи (low battery)) отсюда и отключение клиентов и как следственно увеличение обьема оставшегося заряда на упсе.
Вложение | Размер |
---|---|
cacti-nut.0.6.tar_.gz | 7.89 КБ |
По просьбам трудящихся, из-за отсутствия простого мануала для всех начинающих, светлых администраторов UNIX, и внедрению технологий светлых в тыл компаний и корпораций использующих темные силы Микрософта - посвящается сие писание =).
Необходимо:
На любом предприятии рано или поздно возникает вопрос о централизованном хранилище электронных адресов, принтеров и тп. Это все может реализовать с помощью OpenLDAP. В данной статье, я опишу основные параметры необходимые для работы OpenLDAP в качестве адресной книги и по дополнительным просьбам я расширю и дополню, если вам будет чего либо не хватать. Но я уверен, что вы и сами сможете расширить функционал OpenLDAP без лишних просьб, а лишь чтением манов и гуглением.
OpenLDAP Software - открытая реализация LDAP, разработанная проектом OpenLDAP Project. Распространяется под собственной лицензией, называемой OpenLDAP Public License. LDAP - платформенно-независимый протокол. В числе прочих есть реализации для различных модификаций BSD, а также GNU/Linux, AIX, HP-UX, Mac OS X, Solaris, Microsoft Windows (2000, XP) и z/OS.
LDAP (Lightweight Directory Access Protocol) представляет средства доступа к логически иерархической БД. Каталог (БД) состоит из записей (объектов). Иерархическая совокупность объектов (вложение контейнеров) определяет дерево каталога. Правила связывания определяются набором правил, который называется схемой каталога (в схему входят также описания классов). Дерево начинается от корневого объекта (класс Top в Active Directory).
Тип объекта (класс) определяется набором атрибутов: имя, тип значения, обязательность. Строки в кодировке UTF-8. Объект может ассоциироваться с несколькими классами. Класс может быть расширением другого класса (наследование). Кроме простых объектов имеются контейнеры (группировка объектов и контейнеров), псевдонимы (символьные ссылки), переадресация клиента к другому каталогу (переход по ссылкам, chasing referrals).
Каждый объект имеет относительное отличительное имя (Relative Distinguished Name). Полное отличительное имя объекта (DN) образуется конкатенацией RDN объекта с DN объекта верхнего уровня (порядок записи - от младшего к старшему, разделитель - точка). Каждый объект имеет владельца. В качестве идентификатора аутентификации также используется DN (cn=,dc=). Имеется выделенный администратор каталога, обладающий корневыми полномочиями. Для аутентификации используется расширяемый механизм SASL.
Поиск объекта в иерархии производится с помощью составного имени с корня вниз (как в DNS). Есть возможность анонимного доступа. Права доступа - чтение и запись и поддерживается репликация LDAP сервера.
Общие имена атрибутов:
Возможности клиента:
Открытое программное обеспечение OpenLDAP состоит из нескольких основных компонентов:
Также содержится для OpenLDAP проекта:
Установка OpenLDAP стандартна и поэтому, вкратце пройдемся по ней:
Мы нашли две версии этого порта 2.3 и 2.4, и я остановился на 2.4 ввиду ее перспективности.
# cd /usr/ports # make search name=openldap-server Port: openldap-server-2.3.43 Path: /usr/ports/net/openldap23-server Info: Open source LDAP server implementation Maint: delphij@FreeBSD.org B-deps: db44-4.4.20.4 libltdl-1.5.26 libtool-1.5.26 openldap-client-2.3.43 R-deps: db44-4.4.20.4 libltdl-1.5.26 openldap-client-2.3.43 WWW: <a href="http://www.OpenLDAP.org/</p> <p>Port:" title="http://www.OpenLDAP.org/</p> <p>Port:">http://www.OpenLDAP.org/</p> <p>Port:</p></a> openldap-server-2.4.17 Path: /usr/ports/net/openldap24-server Info: Open source LDAP server implementation Maint: delphij@FreeBSD.org B-deps: db46-4.6.21.4 libltdl-1.5.26 libtool-1.5.26 openldap-client-2.4.17 R-deps: db46-4.6.21.4 libltdl-1.5.26 openldap-client-2.4.17 WWW: http://www.OpenLDAP.org/
Сконфигурируем и выберем необходимые модули:
# cd /usr/ports/net/openldap24-server/ && make config ---------------------------------------------------------------------¬ ¦ Options for openldap-server 2.4.17 ¦ ¦ -----------------------------------------------------------------¬ ¦ ¦ ¦ [ ] SASL With (Cyrus) SASL2 support ¦ ¦ ¦ ¦ [ ] DYNACL Run-time loadable ACL (experimental) ¦ ¦ ¦ ¦ [ ] ACI Per-object ACI (experimental) ¦ ¦ ¦ ¦ [ ] DNSSRV With Dnssrv backend ¦ ¦ ¦ ¦ [ ] PASSWD With Passwd backend ¦ ¦ ¦ ¦ [ ] PERL With Perl backend ¦ ¦ ¦ ¦ [ ] RELAY With Relay backend ¦ ¦ ¦ ¦ [ ] SHELL With Shell backend (disables threading) ¦ ¦ ¦ ¦ [ ] SOCK With Sock backend ¦ ¦ ¦ ¦ [ ] ODBC With SQL backend ¦ ¦ ¦ ¦ [ ] RLOOKUPS With reverse lookups of client hostnames ¦ ¦ ¦ ¦ [ ] SLP With SLPv2 (RFC 2608) support ¦ ¦ ¦ ¦ [ ] SLAPI With Netscape SLAPI plugin API ¦ ¦ ¦ ¦ [X] TCP_WRAPPERS With tcp wrapper support ¦ ¦ ¦ ¦ [X] BDB With BerkeleyDB support ¦ ¦ ¦ ¦ [ ] ACCESSLOG With In-Directory Access Logging overlay ¦ ¦ ¦ ¦ [ ] AUDITLOG With Audit Logging overlay ¦ ¦ ¦ ¦ [ ] COLLECT With Collect overy Services overlay ¦ ¦ ¦ ¦ [ ] CONSTRAINT With Attribute Constraint overlay ¦ ¦ ¦ ¦ [ ] DDS With Dynamic Directory Services overlay ¦ ¦ ¦ ¦ [ ] DEREF With Dereference overlay ¦ ¦ ¦ ¦ [ ] DYNGROUP With Dynamic Group overlay ¦ ¦ ¦ ¦ [ ] DYNLIST With Dynamic List overlay ¦ ¦ ¦ ¦ [ ] LASTMOD With Last Modification overlay ¦ ¦ ¦ ¦ [ ] MEMBEROF With Reverse Group Membership overlay ¦ ¦ ¦ ¦ [ ] PPOLICY With Password Policy overlay ¦ ¦ ¦ ¦ [ ] PROXYCACHE With Proxy Cache overlay ¦ ¦ ¦ ¦ [ ] REFINT With Referential Integrity overlay ¦ ¦ ¦ ¦ [ ] RETCODE With Return Code testing overlay ¦ ¦ ¦ ¦ [ ] RWM With Rewrite/Remap overlay ¦ ¦ ¦ ¦ [X] SEQMOD Sequential Modify overlay ¦ ¦ ¦ ¦ [X] SYNCPROV With Syncrepl Provider overlay ¦ ¦ ¦ ¦ [ ] TRANSLUCENT With Translucent Proxy overlay ¦ ¦ ¦ ¦ [ ] UNIQUE With attribute Uniqueness overlay ¦ ¦ ¦ ¦ [ ] VALSORT With Value Sorting overlay ¦ ¦ ¦ ¦ [ ] SMBPWD With Samba Password hashes overlay ¦ ¦ ¦ ¦ [X] DYNAMIC_BACKENDS Build dynamic backends ¦ ¦ +-L------------------------------------------------------------------+ ¦ [ OK ] Cancel ¦ L---------------------------------------------------------------------
Начнем установку:
# cd /usr/ports/net/openldap24-server/ && make install clean ~~~~~ ************************************************************* The OpenLDAP server package has been successfully installed. In order to run the LDAP server, you need to edit /usr/local/etc/openldap/slapd.conf to suit your needs and add the following lines to /etc/rc.conf: slapd_enable="YES" slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://0.0.0.0/"' slapd_sockets="/var/run/openldap/ldapi" Then start the server with /usr/local/etc/rc.d/slapd start or reboot. Try `man slapd' and the online manual at <a href="http://www.OpenLDAP.org/doc/<br /> for" title="http://www.OpenLDAP.org/doc/<br /> for">http://www.OpenLDAP.org/doc/<br /> for</a> more information. slapd runs under a non-privileged user id (by default `ldap'), see /usr/local/etc/rc.d/slapd for more information. ************************************************************ ===> Installing rc.d startup script(s) ===> Running ldconfig /sbin/ldconfig -m /usr/local/libexec/openldap ===> Installing ldconfig configuration file ===> Registering installation for openldap-server-2.4.17 ===> SECURITY REPORT: This port has installed the following files which may act as network servers and may therefore pose a remote security risk to the system. /usr/local/libexec/slapd This port has installed the following startup scripts which may cause these network services to be started at boot time. /usr/local/etc/rc.d/slapd If there are vulnerabilities in these programs there may be a security risk to the system. FreeBSD makes no guarantee about the security of ports included in the Ports Collection. Please type 'make deinstall' to deinstall the port if this is a concern. For more information, and contact details about the security status of this software, see the following webpage: http://www.OpenLDAP.org/
Приступим к настройке OpenLDAP.
Внесем в /etc/rc.conf следующее:
slapd_enable="YES" slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://0.0.0.0/"' slapd_sockets="/var/run/openldap/ldapi"
slapd_enable="YES" slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://127.0.0.1/ ldap://192.168.0.2/"' slapd_sockets="/var/run/openldap/ldapi"
# cd /usr/local/etc/openldap/ # cp slapd.conf.default slapd.conf
Отредактируем slapd.conf.
# cat slapd.conf include /usr/local/etc/openldap/schema/core.schema include /usr/local/etc/openldap/schema/cosine.schema include /usr/local/etc/openldap/schema/inetorgperson.schema pidfile /var/run/openldap/slapd.pid argsfile /var/run/openldap/slapd.args modulepath /usr/local/libexec/openldap moduleload back_bdb access to * by * read access to attr=userPassword by self write by anonymous auth by * none database bdb suffix "dc=ampul,dc=local" rootdn "cn=root,dc=ampul,dc=local" rootpw {SSHA}Password directory /var/db/openldap-data index objectClass eq index cn eq
Пройдемся по конфигурационному файлу:
include - подключаемые схемы; в поставке OpenLDAP их довольно много. И вы подключите только те, которые будете использовать. В принципе, схемы являются частью конфигурационного файла, но для наглядности они вынесены в отдельные фрагменты. С указанием пути откуда они берутся.
modulepath и moduleload - запускаемый сервис и модуль используемого способа хранения данных.
access - для управления доступом используются списки доступа ACL. В данном примере приводятся два списка — в первом из них ограничивается доступ к атрибуту userPassword (полный доступ к нему могут иметь только сам объект либо администратор базы; для всех остальных доступ запрещён). Второе правило гласит, что всем даётся доступ на чтение любых данных (кроме ограниченного предыдущим правилом).
database - способ хранения данных используемый нами.
suffix - корнем иерархической структуры будет являться некоторый объект например dc=example,dc=com (я буду использовать для примера суффикс
dc=ampul,dc=local) у вас он соответственно будет другим. Суффикс для каталога можно взять любой.
rootdn - DN, описывающий администратора
rootpw - хешированый SSHA пароль администратора (см. slappasswd(8))
Утилита slappasswd позволяет создавать хеш пароля для дальнейшего использования в качестве значения атрибута userPassword или опции rootpw файла slapd.conf.
Параметры:
-v - многословный режим
-u - (пока по умолчанию; создавать хеш для userPassword в формате, определённом RFC 2307)
-s - пароль (если не задан здесь или с помощью ключа -T, то запрашивается в диалоге)
-T - имя файла с паролем
-h - схема ({SSHA}; метод хеширования пароля: {CRYPT}, {MD5}, {SMD5}, {SSHA}, {SHA}, {CLEARTEXT})
-c - формат (формат как в sprintf(3) для преобразования случайной строки символов из диапазона [A-Za-z0-9./]; например, "%.2s" даёт соль для стандартной функции crypt(3); "$1$%.8s" приводит к использованию функцией crypt(3) алгоритма MD5, так что результат можно использовать в /etc/shadow)
Создать хешированный пароль для пользователя root можно так:
# slappasswd -s root {SSHA}Password
После изменение slapd.conf запускаем сервис и проверяем работу.
# /usr/local/etc/rc.d/slapd start # ps -ax | grep slap 35430 ?? Is 0:00,01 /usr/local/libexec/slapd -h ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://127.0.0.1/ ldap://192.168.0.2/ -u ldap -g ldap 35544 p0 S+ 0:00,00 grep slap # netstat -nap tcp | grep 389 tcp4 0 0 192.168.0.2.389 *.* LISTEN tcp4 0 0 127.0.0.1.389 *.* LISTEN
Сейчас нам необходимо создать корень:
# cat ampul.local.ldif dn: dc=ampul,dc=local objectClass: top objectClass: dcObject objectClass: organization dc: ampul o: FSI Ust-Luga Branch dn: ou=addressbook,dc=ampul,dc=local objectClass: top objectClass: organizationalUnit ou: addressbook
Добавим нашу схему в OpenLDAP.
# ldapadd -x -h localhost -f ampul.local.ldif -D "cn=root,dc=ampul,dc=local" -W Enter LDAP Password: **** adding new entry "dc=ampul,dc=local" adding new entry "ou=addressbook,dc=ampul,dc=local"
Я давно подсел на web приложения потому, что я могу запускать их отовсюду и из любой системы будь то *NIX, Windows, Linux и т.п. Простота в обслуживании, обновлении, единая точка входа и управления и т.п. Для OpenLDAP есть несколько приложений которые могут помочь в администрировании OpenLDAP - мой выбор остановился на phpLDAPadmin.
# cd /usr/ports/ # make search name=phpLDAPadmin Port: phpldapadmin-1.1.0.7,1 Path: /usr/ports/net/phpldapadmin Info: A set of PHP-scripts to administer LDAP over the web Maint: m.seaman@infracaninophile.co.uk B-deps: R-deps: gettext-0.17_1 libiconv-1.13 libxml2-2.7.3 openldap-client-2.4.16.. WWW: <a href="http://phpldapadmin.sourceforge.net/</p> <p>#" title="http://phpldapadmin.sourceforge.net/</p> <p>#">http://phpldapadmin.sourceforge.net/</p> <p>#</p></a> cd /usr/ports/net/phpldapadmin;make install clean phpldapadmin-1.1.0.7,1 has been installed into: /usr/local/www/phpldapadmin Please edit config.php to suit your needs. To make phpLDAPadmin available through your web site, I suggest that you add something like the following to httpd.conf: Alias /phpldapadmin/ "/usr/local/www/phpldapadmin/htdocs/" <Directory "/usr/local/www/phpldapadmin/htdocs"> Options none AllowOverride none Order Deny,Allow Deny from all Allow from 127.0.0.1 .example.com </Directory> Please note: if you are upgrading from version 0.9.7 or earlier, the layout of the phpldapadmin-1.1.0.7,1 files has been completely reworked. You will need to modify your apache configuration and merge the settings from your original configuration file: /usr/local/www/phpldapadmin/config.php to /usr/local/www/phpldapadmin/config/config.php ===> Registering installation for phpldapadmin-1.1.0.7,1 ===> Cleaning for phpldapadmin-1.1.0.7,1
Alias /phpldapadmin/ "/usr/local/www/phpldapadmin/htdocs/" <Directory "/usr/local/www/phpldapadmin/htdocs"> Options none AllowOverride none Order Deny,Allow Deny from all Allow from 127.0.0.1 .example.com </Directory>
Есть несколько программных продуктов, которые позволяют управлять LDAP серверами, но они, в основном, платные. Я остановился на LDAP Admin, он быстрый, бесплатный и простой, что позволяет его использование обычному пользователю. Настроить его очень легко см скриншоты.
Mozilla Thunderbird
Thunderbird использует LDAPv3. Добавим LDAP-сервер в адресную книгу.
Введем корректный адрес и данные сервера OpenLDAP
Поиск производится при введении строки поиска в поле (ничего нажимать не надо, поиск производится по мере ввода) по cn, givenName, sn и считывает следующий список атрибутов: modifytimestamp, xmozillausehtmlmail, description, notes, custom4, custom3, custom2, custom1, birthyear, homeurl, workurl, nscpaimscreenname, countryname, company, o, departmentnumber, department, orgunit, ou, title, zip, postalcode, region, st, locality, l, streetaddress, postofficebox, carphone, cellphone, mobile, pagerphone, pager, facsimiletelephonenumber, fax, homephone, telephonenumber, xmozillasecondemail, mail, xmozillanickname, displayname, commonname, cn, surname, sn, givenname.
Outlook Express.
Outlook Express использует LDAPv2. Добавим LDAP-сервер в адресную книгу для этого выбираем в меню Сервис -> Учётные записи -> Добавить -> Служба каталогов -> Сервер каталогов (LDAP).
Затем изменить свойствах созданной службы каталогов во вкладке Дополнительно вставте свою Основу поиска например (ou=addressbook,dc=ampul,dc=local).
Поиск производится по нажатию кнопки "Поиск людей", вводу параметров и нажатию кнопки "Найти". Предварительно опрашивается список возможности сервера: subschemaSubentry, dsServiceName, namingContexts, defaultNamingContext, schemaNamingContext, configurationNamingContext, rootDomainNamingContext, supportedControl, supportedLDAPVersion, supportedLDAPPolicies, supportedSASLMechanisms, dnsHostName, ldapServiceName, serverName, supportedCapabilities.
По умолчанию поиск по атрибутам cn, givenName, sn, но можно искать по "имя и адрес" (cn), "электронная почта" (mail), имени (givenName), фамилии (sn), организации (o). Считывает следующий список атрибутов: display-name, cn, commonName, mail, otherMailbox, givenName, sn, surname, st, c, co, organizationName, o, ou, organizationalUnitName, URL, homePhone, facsimileTelephoneNumber, otherFacsimileTelephoneNumber, OfficeFax, mobile, otherPager, OfficePager, pager, info, title, telephoneNumber, l, homePostalAddress, postalAddress, streetAddress, street, department, comment, postalCode, physicalDeliveryOfficeName, initials, conferenceInformation, userCertificate;binary, userSMIMECertificate;binary, labeledURI, Manager, Reports, IPPhone.
Чтобы сохранять всю необходимую информацию о человеке его запись должна иметь классы: top, person, organizationalPerson, inetOrgPerson, residentialPerson.
Outlook 2003
Схема подключения Outlook 2003 к OpenLDAP см прикрепленные файлы к статье.
В) Как в адресной книге вывести всех клиентов у которых есть электронная почта
O) Ввести в поле поиска символ "@"
В) Какой порт использует LDAP сервер
О) Стандартный TCP порт LDAP сервера - 389. Для защиты соединения может использоваться TLS (SSL) (порт 636).
В) Я использую php-5.2.10 и у меня при заходе в ПО показывает ошибку
Declaration of AJAXTree::draw_dn() should be compatible with that of PLMTree::draw_dn()
draw_dn($dn,$level,$first_child=true,$last_child=true)
В) Какой почтовый клиент может записывать информацию в адресную книгу?
О) Единственный почтовый клиент который может писать в LDAP это Evolution.
Вложение | Размер |
---|---|
Схема подключения Outlook 2003 к OpenLDAP.zip | 251.11 КБ |
S.M.A.R.T. (англ. Self Monitoring Analysing and Reporting Technology) — технология оценки состояния жёсткого диска встроенной аппаратурой самодиагностики, а также механизм предсказания времени выхода его из строя.
Мне было необходимо контролировать работу 4х SATA дисков на одном из серверов с заблаговременным предупреждением о проблемах. Я воспользовался замечательной утилитой smartmontools.
Содержание:
# pkg_info |grep smartmontools smartmontools-5.38_7 S.M.A.R.T. disk monitoring tools bsd# make search name=smartmontools Port: smartmontools-5.38_8 Path: /usr/ports/sysutils/smartmontools Info: S.M.A.R.T. disk monitoring tools Maint: marck@FreeBSD.org B-deps: gettext-0.17_1 gmake-3.81_3 libiconv-1.13.1 R-deps: WWW: _http://smartmontools.sourceforge.net # cd /usr/ports/sysutils/smartmontools;make install clean ~~~~ smartmontools has been installed To check the status of drives, use the following: /usr/local/sbin/smartctl -a /dev/ad0 for first ATA drive /usr/local/sbin/smartctl -a /dev/da0 for first SCSI drive To include drive health information in your daily status reports, add a line like the following to /etc/periodic.conf: daily_status_smart_devices="/dev/ad0 /dev/da0" substituting the appropriate device names for your SMART-capable disks. To enable drive monitoring, you can use /usr/local/sbin/smartd. A sample configuration file has been installed as /usr/local/etc/smartd.conf.sample Copy this file to /usr/local/etc/smartd.conf and edit appropriately To have smartd start at boot echo 'smartd_enable="YES"' >> /etc/rc.conf ===> Installing rc.d startup script(s) ===> Compressing manual pages for smartmontools-5.38_8 ===> Registering installation for smartmontools-5.38_8 ===> Cleaning for smartmontools-5.38_8
Сначала вы убедитесь включен ли у вас SMART в BIOS и существует ли поддержка этой технологии у нужного жесткого диска. Возьмем для примера мой жеский диск ad4. У вас наименование может быть другим смотрите свой dmesg -a.
# atacontrol cap ad4 Protocol SATA revision 2.x device model SAMSUNG HD120IJ serial number S0AEJ1OA103537 firmware revision ZL100-33 cylinders 16383 heads 16 sectors/track 63 lba supported 234441648 sectors lba48 supported 234441648 sectors dma supported overlap not supported Feature Support Enable Value Vendor write cache yes yes read ahead yes yes Native Command Queuing (NCQ) yes - 31/0x1F Tagged Command Queuing (TCQ) no no 31/0x1F SMART yes yes microcode download yes yes security yes no power management yes yes advanced power management no no 0/0x00 automatic acoustic management yes no 0/0x00 254/0xFE
# /usr/local/sbin/smartctl -a /dev/ad4 smartctl version 5.38 [i386-portbld-freebsd7.2] Copyright (C) 2002-8 Bruce Allen Home page is _http://smartmontools.sourceforge.net/ === START OF INFORMATION SECTION === Model Family: SAMSUNG SpinPoint P80 SD series Device Model: SAMSUNG HD120IJ Serial Number: S0AEJ1OA103537 Firmware Version: ZL100-33 User Capacity: 120 034 123 776 bytes Device is: In smartctl database [for details use: -P show] ATA Version is: 7 ATA Standard is: ATA/ATAPI-7 T13 1532D revision 4a Local Time is: Wed Oct 14 13:48:08 2009 MSD SMART support is: Available - device has SMART capability. SMART support is: Enabled === START OF READ SMART DATA SECTION === SMART overall-health self-assessment test result: PASSED General SMART Values: Offline data collection status: (0x82) Offline data collection activity was completed without error. Auto Offline Data Collection: Enabled. Self-test execution status: ( 0) The previous self-test routine completed without error or no self-test has ever been run. Total time to complete Offline data collection: (2729) seconds. Offline data collection capabilities: (0x5b) SMART execute Offline immediate. Auto Offline data collection on/off support. Suspend Offline collection upon new command. Offline surface scan supported. Self-test supported. No Conveyance Self-test supported. Selective Self-test supported. SMART capabilities: (0x0003) Saves SMART data before entering power-saving mode. Supports SMART auto save timer. Error logging capability: (0x01) Error logging supported. General Purpose Logging supported. Short self-test routine recommended polling time: ( 1) minutes. Extended self-test routine recommended polling time: ( 45) minutes. SCT capabilities: (0x003f) SCT Status supported. SCT Feature Control supported. SCT Data Table supported. SMART Attributes Data Structure revision number: 16 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x000f 100 100 051 Pre-fail Always - 0 3 Spin_Up_Time 0x0007 100 100 025 Pre-fail Always - 6080 4 Start_Stop_Count 0x0032 100 100 000 Old_age Always - 197 5 Reallocated_Sector_Ct 0x0033 253 253 010 Pre-fail Always - 0 7 Seek_Error_Rate 0x000f 253 253 051 Pre-fail Always - 0 8 Seek_Time_Performance 0x0025 253 253 015 Pre-fail Offline - 0 9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 24004 10 Spin_Retry_Count 0x0033 253 253 051 Pre-fail Always - 0 11 Calibration_Retry_Count 0x0012 253 002 000 Old_age Always - 0 12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 177 190 Airflow_Temperature_Cel 0x0022 130 067 000 Old_age Always - 36 194 Temperature_Celsius 0x0022 130 067 000 Old_age Always - 36 195 Hardware_ECC_Recovered 0x001a 100 100 000 Old_age Always - 16044483 196 Reallocated_Event_Count 0x0032 253 253 000 Old_age Always - 0 197 Current_Pending_Sector 0x0012 253 253 000 Old_age Always - 0 198 Offline_Uncorrectable 0x0030 253 253 000 Old_age Offline - 0 199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0 200 Multi_Zone_Error_Rate 0x000a 100 100 000 Old_age Always - 0 201 Soft_Read_Error_Rate 0x000a 100 100 000 Old_age Always - 0 202 TA_Increase_Count 0x0032 253 253 000 Old_age Always - 0 SMART Error Log Version: 1 No Errors Logged SMART Self-test log structure revision number 1 No self-tests have been logged. [To run self-tests, use: smartctl -t] SMART Selective Self-Test Log Data Structure Revision Number (0) should be 1 SMART Selective self-test log data structure revision number 0 Warning: ATA Specification requires selective self-test log data structure revision number = 1 SPAN MIN_LBA MAX_LBA CURRENT_TEST_STATUS 1 0 0 Not_testing 2 0 0 Not_testing 3 0 0 Not_testing 4 0 0 Not_testing 5 0 0 Not_testing Selective self-test flags (0x0): After scanning selected spans, do NOT read-scan remainder of disk. If Selective self-test is pending on power-up, resume after 0 minute delay.
Много информации, но вам необходимо внимательно изучить таблицу Vendor Specific SMART Attributes with Thresholds.
Для разбора, что к чему изучите вот этот документ:
Главным образом на работу жесткого диска влияют несколько важных параметров в которых вы должны сразу определять проблему.
Типы атрибутов:
Приступим к созданию конфигурационного файла:
# cd /usr/local/etc/ # cp smartd.conf.sample smartd.conf # cat smartd.conf # cat smartd.conf Пример файла конфигурации для smartd. См. man smartd.conf. # Домашняя страница: _http://smartmontools.sourceforge.net # $Id: smartd.conf,v 1.45 2006/11/12 23:39:04 dpgilbert Exp $ # smartd будет перечитывать конфигурационный файл, если он получает сигнал HUP # signal # Файл предоставляет список устройств для мониторинга используемого smartd, # с одним устройством в каждой строке. Текст после решетки (#) игнорируется, # и вы можете использовать пробелы и табуляцию для свободного пространства. # Вы можете использовать '\' для продолжения линии. # Вы можете определить, какие обычно жесткие дискови есть на компьютере, # Заглянув в /proc/ide и /proc/scsi. (повеяло линусячиной =) ) # Переменная DEVICESCAN заставит игнорировать оставшиеся линий в этом # конфигурационном файле: и укажет для smartd сканировать все # ATA и SCSI устройств. DEVICESCAN может следовать любое из # Для найденных устройств будут применены нижеперечисленные директивы. # Для большинства пользователей рекомендуется закомментировать DEVICESCAN # и четко вывести список устройств, которые вы хотели бы контролировать. #DEVICESCAN # Альтернативные настройки для игнорирования температуры и включения числа # часов, проведённых во включенном состоянии записываемых отчетов в syslog. #DEVICESCAN -I 194 -I 231 -I 9 # Альтернативные настройки отчетов с более полезным значений температуры # записываемого в syslog #DEVICESCAN -R 194 -R 231 -I 9 # Альтернативные настройки для отчетов значения изменения # температуры >= 5 по Цельсию и мин/макс температуры. #DEVICESCAN -I 194 -I 231 -I 9 -W 5 # Первый (primary) ATA/IDE жесткий диск. Следить за всеми атрибутами, позволяющие # автоматически онлайново собирать данные, автоматическое автосохранение # атрибутов, и запуском короткой самодиагностики каждый день с 2-3 утра # , и полный тест в субботам с 3-4 утра. #/dev/hda -a -o on -S on -s (S/../.././02|L/../../6/03) # Мониторинг SMART статуса, ATA журнала ошибок, Self-Test # (короткой самодиагностики) журнала, а также отслеживать # изменения всех атрибутов, за исключением атрибута 194 #/dev/hdb -H -l error -l selftest -t -I 194 # Мониторинг всех атрибутов, кроме нормированной температуры (обычно 194), # но отслеживать изменения температуры >= 4 по Цельсию, отчет температуры # >= 45 по Цельсию, а изменения в Raw значения Reallocated_Sector_Ct (5). # И отправлять письмо об отказах SMART или при температуре >= 55 по Цельсию. #/dev/hdc -a -I 194 -W 4,45,55 -R 5 -m admin@example.com # Диск ATA может выглядеть как устройства SCSI в операционной системе. # Если к SCSI ATA перевода (SAT) слой между ОС и устройство, а затем # Это может быть помечено "-d sat 'опцией. Эта ситуация может # стать общей с дисками SATA в SAS и FC среды. # /dev/sda -a -d sat # Тихий тест. Рапортует лишь в случае, если SMART выдает # ошибку. И шлёт рапорт на почту. #/dev/hdc -H -C 0 -U 0 -m admin@example.com # Первых два SCSI диска. Это будет следить за всем, что может smartd # проверить. Начать расширенный тест по средам с 6-7 вечера и # воскресенье 1-2. #/dev/sda -d scsi -s L/../../3/18 #/dev/sdb -d scsi -s L/../../7/01 # Мониторинг 4х ATA дисков, подключенных к контроллеру 3Ware 6/7/8000 которая # использует 3W-XXXX драйвер. Начало длинного теста по воскресеньям с 1-2, # 2-3, 3-4 и 4-5 часов утра. #/dev/sdc -d 3ware,0 -a -s L/../../7/01 #/dev/sdc -d 3ware,1 -a -s L/../../7/02 #/dev/sdc -d 3ware,2 -a -s L/../../7/03 #/dev/sdc -d 3ware,3 -a -s L/../../7/04 # Мониторинг 4х ATA дисков, подключенных к контроллеру 3Ware 9000, который # использует 3W-9xxx драйвера (Linux, FreeBSD) # Начало длинного теста по вторникам с 1-2 и 3-4 утра. #/dev/twa0 -d 3ware,0 -a -s L/../../2/01 #/dev/twa0 -d 3ware,1 -a -s L/../../2/03 # То же самое для Windows. Опция "-d 3ware,N 'не является необходимым, # Диск (порт) номер, указанный в имени устройства. # ПРИМЕЧАНИЕ: В Windows DEVICESCAN работает также для контроллеров 3Ware. #/dev/hdc,0 -a -s L/../../2/01 #/dev/hdc,1 -a -s L/../../2/03 # Мониторинг 3 ATA диски напрямую связано с HighPoint RocketRAID. # Начало долгого теста по воскресеньям с 1-2, 2-3 и 3-4 утра. #/dev/sdd -d hpt,1/1 -a -s L/../../7/01 #/dev/sdd -d hpt,1/2 -a -s L/../../7/02 #/dev/sdd -d hpt,1/3 -a -s L/../../7/03 # Мониторинг 2х ATA дисках, подключенных к той же PMPort которые связаны с # HighPoint RocketRAID. Начало большого теста по вторникам между 1-2 и 3-4 м. #/dev/sdd -d hpt,1/4/1 -a -s L/../../2/01 #/dev/sdd -d hpt,1/4/2 -a -s L/../../2/03 # Добавляем свои диски /dev/ad0 -a -m admin@ampul.local -o on -S on -s (S/../.././22|L/../../6/23) /dev/ad1 -a -m admin@ampul.local -o on -S on -s (S/../.././22|L/../../6/23) # Вот список директив в этом файле конфигурации. # См. smartd.conf и man для деталей # # -d TYPE Тип устройства: ata, scsi, marvell, removable, 3ware,N, hpt,L/M/N # -T TYPE допустимое отклонение: normal, permissive # -o VAL Включает/выключает автоматические оффлайн тесты (on/off) # -S VAL Включает/выключает автосохранение атрибутов (on/off) # -n MODE Не проверять. Один из режимов: never, sleep, standby, idle # -H Мониторить SMART статус, уведомлять только при ошибках. # -l TYPE Мониторить SMART логи. Режимы: error, selftest # -f Монитор отказа для любых атрибутов 'Usage' # -m ADD Письмо с варнингами на ADD для -H, -l error, -l selftest, and -f # -M TYPE Изменение поведения отсыла е-майлов (см. ман) # -s REGE Запустить тест когда дата совпадает с регулярным выражением (см. ман) # -p Сообщать о изменениях в 'Prefailure' атрибутах # -u ообщать о изменениях в 'Usage' атрибутах # -t Эквивалентно -p и -u директивам # -r ID Также сообщать 'RAW' значения атрибутов ID с -p, -u или -t # -R ID Следить за изменениями в атрибуте ID 'Raw' значения -p, -u or -t # -i ID Игнорировать атрибут ID для -f директивы # -I ID Игнорировать атрибут ID для -p, -u или -t директивы # -C ID Рапортовать если счётчик `ждущих` секторов не равен нулю # -U ID Рапортовать если счётчик `некорректируемых` секторов не равен нулю # -W D,I,C Monitor Temperature D)ifference, I)nformal limit, C)ritical limit # -v N,ST Mодифицировать метку для атрибута N (для нестандартных атрибутов) # -a Дефолт: эквивалентно -H -f -t -l error -l selftest -C 197 -U 198 # -F TYPE Для ошибок в прошивке. Значения: none, samsung # -P TYPE Предустановки для диска: use, ignore, show, showall # # Комментарии: текст после него игнорируется # \ Продолжения строки # Идентификатор атрибута является десятичное целое число 1 <= ID <= 255 # за исключением -C и -U, где ID = 0 выключает их. # Все биты -d, -m и -M директивы реализуются только для устройств ATA.
Настроим syslog:
# cat /etc/syslog.conf |grep smart !smartd *.* /var/log/smartd.log
Создадим лог файл:
# touch /var/log/smartd.log
Перезапустим syslog:
# killall -1 syslogd
Запустим smartmontools:
# /usr/local/etc/rc.d/smartd start Starting smartd.
Проверим работу:
# ps -ax | grep smart 664 ?? I 0:00,02 /usr/local/sbin/smartd -p /var/run/smartd.pid --interval=400 3790 ?? I 0:00,01 smartd 9597 p0 S+ 0:00,00 grep smart
Включим запуск демона при запуски системы и включением проверки с частотой опроса через 400 секунд:
# echo 'smartd_enable="YES"' >> /etc/rc.conf # echo 'smartd_flags="--interval=400"' >> /etc/rc.conf
Посмотрим лог файл:
# tail -10 /var/log/smartd.log Oct 14 14:21:35 bsd smartd[664]: Device: /dev/ad4, SMART Usage Attribute: 194 Temperature_Celsius changed from 130 to 124 Oct 14 14:26:35 bsd smartd[664]: Device: /dev/ad4, SMART Usage Attribute: 190 Airflow_Temperature_Cel changed from 124 to 130 Oct 14 14:26:35 bsd smartd[664]: Device: /dev/ad4, SMART Usage Attribute: 194 Temperature_Celsius changed from 124 to 130 Oct 14 14:30:54 bsd smartd[3790]: Device: /dev/ad4, SMART Usage Attribute: 190 Airflow_Temperature_Cel changed from 124 to 130 Oct 14 14:30:54 bsd smartd[3790]: Device: /dev/ad4, SMART Usage Attribute: 194 Temperature_Celsius changed from 124 to 130 Oct 14 14:30:54 bsd smartd[3790]: Device: /dev/ad6, SMART Usage Attribute: 194 Temperature_Celsius changed from 107 to 108 Oct 14 14:56:34 bsd smartd[664]: Device: /dev/ad4, SMART Usage Attribute: 190 Airflow_Temperature_Cel changed from 130 to 124 Oct 14 14:56:34 bsd smartd[664]: Device: /dev/ad4, SMART Usage Attribute: 194 Temperature_Celsius changed from 130 to 124 Oct 14 15:01:34 bsd smartd[664]: Device: /dev/ad4, SMART Usage Attribute: 190 Airflow_Temperature_Cel changed from 124 to 130 Oct 14 15:01:34 bsd smartd[664]: Device: /dev/ad4, SMART Usage Attribute: 194 Temperature_Celsius changed from 124 to 130
Ну вот и все. Теперь жеские диски контролируются. И самое главное поменьше вам писем от smartmontools ;).
Сегодня будем разбирать логи Squid и присваивать тариф "Имеемый" человеку стоящему на первом месте в статусе "Загружено мегабайт".
Установка банальна и тривиальна.
# make search name=sarg Port: sarg-2.2.7.1_2 Path: /usr/ports/www/sarg Info: Squid log analyzer and HTML report generator Maint: garga@FreeBSD.org B-deps: expat-2.0.1_1 fontconfig-2.8.0,1 freetype2-2.4.2 gd-2.0.35_7,1 R-deps: expat-2.0.1_1 fontconfig-2.8.0,1 freetype2-2.4.2 gd-2.0.35_7,1 WWW: _http://sarg.sourceforge.net/ # cd /usr/ports/www/sarg # make config Options for sarg 2.2.7.1_2 [X] GD Enable GD support # make install clean
Настроим по вкусу Sarg я укажу свои настройки вы можете поэкспериментировать:
# cd /usr/local/etc/sarg/ # cp sarg.conf.default sarg.conf # cat sarg.conf # Укажем нужный язык language Russian_koi8 # Указываем путь до логов Squid access_log /var/log/squid/access.log # Включаем построение графиков graphs yes graph_days_bytes_bar_color orange title "Squid User Access Reports" font_face Tahoma,Verdana,Arial header_color darkblue header_bgcolor blanchedalmond font_size 12px header_font_size 12px title_font_size 14px text_bgcolor lavender logo_text_color #000000 image_size 80 45 temporary_dir /tmp # Куда складывать отчеты. output_dir /usr/local/www/sarg/ # Преобразовывать IP в имя по DNS. При большом парке машин # или проблема с DNS рекомендую отключать эту опцию. resolve_ip yes # Сортировка юзеров в выводе по USER CONNECT BYTES TIME topuser_sort_field BYTES reverse user_sort_field BYTES reverse date_format e remove_temp_files yes index yes overwrite_report yes topsites_num 100 index_sort_order D max_elapsed 28800000 # Разнообразные типы отчетов, включим все. report_type topusers topsites sites_users users_sites date_time denied auth_failures site_user_time_date downloads date_time_by elap charset Koi8-r show_sarg_info no download_suffix "zip,arj,bzip,gz,ace,doc,iso,adt,bin,cab,com,dot,drv$,lha,lzh,md b,mso,ppt,rtf,src,shs,sys,exe,dll,mp3,avi,mpg,mpeg"
Добавляем задачу в Cron каждую пятницу в 23.00 парсим логи и каждый месяц прибираем Squid
# SARG 0 23 * * 5 /usr/local/bin/sarg > /dev/null 2>&1 # Moved Old Squid Log 0 0 1 * * /root/scripts/squid_log_moved > /dev/null 2>&1
Скрипт очисти логов Squid:
# cat /scripts/squid_log_moved #!/bin/sh # current_year=`date '+%Y'` current_month=`date '+%m'` current_date=`date '+%d'` ## Создаем директорию для логов log_dir="/var/squid/old_logs/${current_year}/${current_month}" mkdir -p ${log_dir} 2>/dev/null ## Очищаем логи SQUID cat /var/squid/logs/access.log > /tmp/log.tmp cat /dev/null > /var/squid/logs/access.log gzip -c /tmp/log.tmp > ${log_dir}/squid.log.gz #gzip -c ${log_dir}/squid.log > ${log_dir}/squid.log.gz #rm -R /usr/local/www/sarg/*
В вашей директории технического сайта сделайте символическую ссылку.
% cd /home/serv/www/data # ln -s /usr/local/www/sarg/ sarg # ll total 4 lrwxr-xr-x 1 root serv 20B 5 авг 11:32 glpi -> /usr/local/www/glpi/ lrwxr-xr-x 1 root serv 26B 5 авг 11:17 phpMyAdmin -> /usr/local/www/phpMyAdmin/ -rw-r--r-- 1 serv serv 21B 5 авг 10:51 phpinfo.php lrwxr-xr-x 1 root serv 27B 5 авг 12:23 phpldapadmin -> /usr/local/www/phpldapadmin lrwxr-xr-x 1 root serv 20B 17 авг 13:16 sarg -> /usr/local/www/sarg/ drwxr-xr-x 3 serv serv 512B 12 авг 13:19 sqstat
Анализируем логи, заходим на технический сайт и смотрим:
# sarg SARG: Records in file: 8717, reading: 100.00% SARG: Отчет успешно сгенерирован в: /usr/local/www/sarg//01Feb2011-01Feb2011
Кто тут интернет активный? 192.168.0.56 самый работящий!
Офис должен работать и заниматься делом! Вот как тут и надо бы выписать ему премию. =)
Появилась необходимость иногда смотреть, кто в данный момент сидит в интернете через Squid и на каких сайтах. Для этого нашел следующее ПО.
SqStat - это PHP скрипт, позволяющий просматривать из web браузера активные соединения proxy сервера Squid. Для получения данных используется протокол cachemgr.
Скачиваем и распаковываем SqStat в любую директорию хоста, где Apache может запусть этот скрипт.
# fetch _http://samm.kiev.ua/sqstat/sqstat-1.20.tar.gz sqstat-1.20.tar.gz 100% of 10 kB 161 kBps # tar zxvf sqstat-1.20.tar.gz x sqstat-1.20 x sqstat-1.20/docs x sqstat-1.20/config.inc.php.defaults x sqstat-1.20/sqstat.class.php x sqstat-1.20/sqstat.php x sqstat-1.20/sqstat.css x sqstat-1.20/zhabascript.js x sqstat-1.20/arrow.gif x sqstat-1.20/docs/FAQ x sqstat-1.20/docs/TODO x sqstat-1.20/docs/README x sqstat-1.20/docs/LICENSE x sqstat-1.20/docs/CHANGES # rm sqstat-1.20.tar.gz # mv sqstat-1.20/ sqstat
# cd sqstat/ # cp config.inc.php.defaults config.inc.php # vi config.inc.php
Смотрим что внутри конфигурационного файла и при необходимости меняем значения:
<?php /* Глобальные настройки */ $use_js=true; // Использование JavaScript для инструментов HTML // Максимальная длина URL для отображения в колонке таблицы URI DEFINE("SQSTAT_SHOWLEN",60); /* Параметры прокси-сервера */ /* Прокси-сервер Squid IP-адрес или имя хоста */ $squidhost[0]="127.0.0.1"; /* Порт Squid прокси-сервера */ $squidport[0]=3128; /* сachemgr_passwd в squid.conf. Оставьте пустым, чтобы отключить разрешение */ $cachemgr_passwd[0]=""; /* Преобразовывать IP адреса пользователей или показывать только номера [true|false] */ $resolveip[0]=false; /* Раскомментируйте следующую строку, если вы хотите использовать хосты, как файл. See hosts.txt.dist. */ // $hosts_file[0]="hosts.txt" /* Группа пользователей с именем хоста - "host" или пользователя - "username". Имя пользователя работать только с squid 2.6 + */ $group_by[0]="host"; /* Вы можете указать более одного прокси-сервера в файле конфигурации, например: */ // $squidhost[1]="192.168.0.2"; // $squidport[1]=3129; // $cachemgr_passwd[1]="secret"; // $resolveip[1]=true; // $hosts_file[1]="otherhosts.txt" ?>
Создадим символическую ссылку для того чтобы Apache автоматически запускал скрипт при вхождении в директорию SqStat.
# ln -s sqstat.php index.php
Потребовалась отправка логов на нужный е-майл. Раскуривал штатный Sendmail, но выходило довольно монструозно (+ мне нужно было менять заголовки отправителя). Ставить Exim для этой мелочи тоже не хотелось. Посему остановился на утилите ssmtp. Она элементарна и проста в эксплуатации.
# cd /usr/ports/ # make search name=ssmtp Port: ssmtp-2.62.3 Path: /usr/ports/mail/ssmtp Info: Extremely simple MTA to get mail off the system to a mail hub Maint: aragon@phat.za.net B-deps: gettext-0.17_1 gmake-3.81_3 libiconv-1.13.1_1 R-deps: WWW: _http://packages.debian.org/stable/mail/ssmtp # cd /usr/ports/mail/ssmtp; make install clean ~~ ===> SECURITY REPORT: This port has installed the following binaries which execute with increased privileges. /usr/local/sbin/ssmtp If there are vulnerabilities in these programs there may be a security risk to the system. FreeBSD makes no guarantee about the security of ports included in the Ports Collection. Please type 'make deinstall' to deinstall the port if this is a concern. For more information, and contact details about the security status of this software, see the following webpage: _http://packages.debian.org/stable/mail/ssmtp ===> Cleaning for gmake-3.81_3 ===> Cleaning for ssmtp-2.62.3
Создадим и настроим конфигурационные файлы:
# cd /usr/local/etc/ssmtp/ # ll total 4 -rw-r----- 1 root ssmtp 200 Apr 22 11:53 revaliases.sample -rw-r----- 1 root ssmtp 1286 Apr 22 11:53 ssmtp.conf.sample # cp ssmtp.conf.sample ssmtp.conf # cp revaliases.sample revaliases
Переведем основной конфигурационный файл:
# cat ssmtp.conf # /etc/ssmtp.conf -- конфигурационный файл для sSMTP sendmail. # # Пользователь, который получает всю почту для userids < 1000 # Сделайте пустым для отключения перезаписи. Или укажите пользователя. # А также вы можете указать нужный е-майл на который будет # приходить почта для root. root=postmaster # Место, где идет почта. Настоящее имя машины не требуются # MX записи. Обычно mailhosts является именем mail.domain.com # Например если вы находитесь в domain.com ваш mailhub с таким же именем. mailhub=mail # Пример для SMTP портом 2525 # mailhub=mail.your.domain:2525 # Пример для SMTP портом 25 (Standard/RFC) # mailhub=mail.your.domain # Пример для SSL шифрованного соединения # mailhub=mail.your.domain:465 # От кого якобы должна приходить почта? rewriteDomain= # Полное имя машины hostname=_HOSTNAME_ # Установите это чтобы никогда не переписывать "From:" (если не указано) и # использовать этот адрес в "from line" оболочки. #FromLineOverride=YES # Использовать SSL/TLS, чтобы отправить безопасные сообщения на сервер. #UseTLS=YES # Использовать SSL/TLS сертификат для аутентификации на SMTP-хосте. #UseTLSCert=YES # Используйте этот сертификат RSA. #TLSCert=/usr/local/etc/ssmtp/ssmtp.pem # Получить расширенное (* действительно * расширенную) отладочную информацию в логах # Если вы хотите иметь отладке в конфигурационных отпарсенных файлах, переместите этот # параметр в начало файла конфигурации и раскомментируйте #Debug=YES
Мой тестовый конфигурационный файл:
# grep -v '^#' ssmtp.conf |grep -v ^\$ root=Raven2000@lissyara.su mailhub=mail.ignix.ru hostname=raven.local
Revaliases нужен для создания псевдонимов (например как файл /etc/mail/aliases для sendmail). Переведем конфигурационный файл:
# cat revaliases # sSMTP псевдонимы # # Формат: local_account:outgoing_address:mailhub # # Пример: root:your_login@your.domain:mailhub.your.domain[:port] # где [:port] – это дополнительный номер порта, который по умолчанию 25.
Настроим соответствующим образом:
# grep -v '^#' revaliases |grep -v ^\$ root:root@raven.local:mail.ignix.ru
Остановите Sendmail и приведите конфигурационные файлы к этому виду:
# cat /etc/rc.conf |grep sendmail sendmail_enable="NONE" # grep -v ^# /etc/mail/mailer.conf |grep -v ^\$ sendmail /usr/local/sbin/ssmtp send-mail /usr/local/sbin/ssmtp mailq /usr/local/sbin/ssmtp newaliases /usr/local/sbin/ssmtp hoststat /usr/local/sbin/ssmtp purgestat /usr/local/sbin/ssmtp
Отправим письмо руту:
# mail root Subject: test ssmtp test ssmtp . EOT
А если не пришло то это проблема =).
Для начала нам нужно обнаружить проблемное место. Для этого в конфигурационном файле ssmtp.conf Добавляем в самое начало конфига строчку:
Debug=YES
# tail -f /var/log/maillog Apr 23 11:38:43 bsd sSMTP[72138]: Sent mail for root@raven.local (221 Bye) uid=0 username=root outbytes=296 Apr 23 11:38:51 bsd sSMTP[72143]: Set Root="Raven2000@lissyara.su" Apr 23 11:38:51 bsd sSMTP[72143]: Set MailHub="mail.ignix.ru" Apr 23 11:38:51 bsd sSMTP[72143]: Set RemotePort="25" Apr 23 11:38:51 bsd sSMTP[72143]: Set HostName="raven.local" Apr 23 11:38:51 bsd sSMTP[72143]: Set MailHub="mail.ignix.ru" Apr 23 11:38:51 bsd sSMTP[72143]: via SMTP Port Number="25" Apr 23 11:38:51 bsd sSMTP[72143]: 220 MailServer 2005 Apr 23 11:38:51 bsd sSMTP[72143]: HELO raven.local Apr 23 11:38:52 bsd sSMTP[72143]: 250 ignix.ru Apr 23 11:38:52 bsd sSMTP[72143]: MAIL FROM:<root@raven.local> Apr 23 11:38:52 bsd sSMTP[72143]: 250 Ok Apr 23 11:38:52 bsd sSMTP[72143]: RCPT TO:<Raven2000@lissyara.su> Apr 23 11:38:52 bsd sSMTP[72143]: 250 Ok Apr 23 11:38:52 bsd sSMTP[72143]: DATA Apr 23 11:38:52 bsd sSMTP[72143]: 354 End data with <CR><LF>.<CR><LF> Apr 23 11:38:52 bsd sSMTP[72143]: Received: by raven.local (sSMTP sendmail emulation); Fri, 23 Apr 2010 11:38:51 +0400 Apr 23 11:38:52 bsd sSMTP[72143]: From: "Charlie &" <root@raven.local> Apr 23 11:38:52 bsd sSMTP[72143]: Date: Fri, 23 Apr 2010 11:38:51 +0400 Apr 23 11:38:52 bsd sSMTP[72143]: To: Raven2000@lissyara.su Apr 23 11:38:52 bsd sSMTP[72143]: Subject: test ssmtp2 Apr 23 11:38:52 bsd sSMTP[72143]: Apr 23 11:38:52 bsd sSMTP[72143]: test ssmtp2 Apr 23 11:38:53 bsd sSMTP[72143]: . Apr 23 11:38:53 bsd sSMTP[72143]: 250 Ok: queued as 50A392BC12D Apr 23 11:38:53 bsd sSMTP[72143]: QUIT Apr 23 11:38:53 bsd sSMTP[72143]: 221 Bye Apr 23 11:38:53 bsd sSMTP[72143]: Sent mail for root@raven.local (221 Bye) uid=0 username=root outbytes=331
VNSTAT служит для подсчёта трафика проходящего через сетевой интерфейс, и отображает статистику загрузки в разные периоды времени.
Установим vmstat из портов:
cd /usr/ports/net/vnstat && make install clean
Полное разъяснение установки находится в "/usr/local/share/doc/vnstat/INSTALL_BSD"
Создадим конфигурационный файл:
cp /usr/local/etc/vnstat.conf.sample /usr/local/etc/vnstat.conf
Необходимо отредактировать конфигурационный файл, указав свой сетевой интерфейс:
cat /usr/local/etc/vnstat.conf|grep Interface Interface "rl0" #интерфейс
Cоздадим каталог для базы данных vnstat:
mkdir -p /var/db/vnstat && chmod +x /var/db/vnstat/
Добавим задание в cron чтобы наш vnstat обновлял информацию о трафике:
crontab -l | grep vnstat */5 * * * * /usr/local/bin/vnstat -u
Проверим как работает сбор информации. Введем сетевой интерфейс в работу:
vnstat -D -u -i rl0
vnstat Database updated: Mon Sep 27 10:35:00 2010 rl0 since 09/27/10 rx: 1.75 MiB tx: 294 KiB total: 2.04 MiB monthly rx | tx | total | avg. rate ------------------------+-------------+-------------+--------------- Sep '10 1.75 MiB | 294 KiB | 2.04 MiB | 0.01 kbit/s ------------------------+-------------+-------------+--------------- estimated -- | -- | -- | daily rx | tx | total | avg. rate ------------------------+-------------+-------------+--------------- today 1.75 MiB | 294 KiB | 2.04 MiB | 0.44 kbit/s ------------------------+-------------+-------------+--------------- estimated -- | -- | -- |
Для того чтобы можно было смотреть статистику через веб интерфейс нужно установить vnstat PHP frontend.
Сконфигурируем Apache. Добавим Alias в файл конфигурации веб сервера:
vi /usr/local/etc/apache22/httpd.conf
Alias /vnstat "/usr/local/www/vnstat/" <Directory "/usr/local/www/vnstat"> Options Indexes FollowSymlinks MultiViews AllowOverride All Order allow,deny Allow from all </Directory>
создаём каталог для vnstat PHP frontend
cd /usr/local/www/ ; mkdir -p /usr/local/www/vnstat
wget -c http://www.sqweek.com/sqweek/files/vnstat_php_frontend-1.5.1.tar.gz
fetch http://www.sqweek.com/sqweek/files/vnstat_php_frontend-1.5.1.tar.gz
tar xzf vnstat_php_frontend-1.5.1.tar.gz
mv ./vnstat_php_frontend-1.5.1/* ./vnstat
cat ./config.php | grep -v "//"
<?php error_reporting(E_ALL | E_NOTICE); $locale = 'ru_RU.UTF-8'; $language = 'ru'; $iface_list = array('rl0'); $iface_title['rl0'] = 'Internet'; $vnstat_bin = '/usr/local/bin/vnstat'; $data_dir = './dumps'; $graph_format='svg'; define('GRAPH_FONT',dirname(__FILE__).'/VeraBd.ttf'); define('SVG_FONT', 'Verdana'); define('DEFAULT_COLORSCHEME', 'light'); ?>
Качаем русский язык для vnstat PHP frontend и распаковываем:
cd /usr/local/www/vnstat/lang/ wget -c <a href="http://www.ignix.ru/system/files/ru.php_.tar.gz<br /> tar" title="http://www.ignix.ru/system/files/ru.php_.tar.gz<br /> tar">http://www.ignix.ru/system/files/ru.php_.tar.gz<br /> tar</a> xzf ./ru.php_.tar.gz
В: У меня ошибка в веб интерфейсе связанное с временной зоной.
О: У меня оказывается не было файла php.ini или если в нём не указана временная зона то надо сделать файл настройки php путём копирования дефолтного файла под другим именем.
cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini
cat /usr/local/etc/php.ini | grep Kiev date.timezone = Europe/Kiev
/usr/local/etc/rc.d/apache22 restart
Для того чтобы посмотреть статистику необходимо будет в строке браузера ввести
"http://<адрес сервера где установлен apache>/vnstat/"
по моему всё =)
Скриншоты:
Сводка.
По часам.
Вложение | Размер |
---|---|
ru.php_.tar.gz | 624 байта |
Для организации NAT с помощью PF нам понадобится следующее:
Включить pf (packet filter)
vi /etc/rc.conf
gateway_enable="YES" #Разрешает серверу быть шлюзом pf_enable="YES" #Запуск pf pflog_enable="YES" #не обязательно, возможность писать логи pf pf_rules="/etc/pf.conf" #Пуьт к правилам pf pf_program="/sbin/pfctl" #Путь к программе управления pf pf_flags="" #Необходимо для pfctl defaultrouter="192.168.1.254" #Шлюз провайдера
No ALTQ support in kernel ALTQ related functions disabled
cp /usr/src/sys/i386/conf/GENERIC /usr/src/sys/i386/conf/ROUTER-PF vi /usr/src/sys/i386/conf/ROUTER-PF
# pf device pf device pflog device pfsync options ALTQ options ALTQ_CBQ # Class Bases Queuing (CBQ) options ALTQ_RED # Random Early Detection (RED) options ALTQ_RIO # RED In/Out options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC) options ALTQ_PRIQ # Priority Queuing (PRIQ) options ALTQ_NOPCC # Required for SMP build
vi /etc/pf.conf
ext_if="rl1" #Внешний интерфейс (смотрит к провайдеру WAN) int_if="rl0" #Внутренний интерфейс (смотрит в нашу сеть LAN) set skip on lo0 #пропускаем проверку на петле scrub in all #собираем все части пакета перед отправкой nat on $ext_if from $int_if:network to any -> ($ext_if) block all #запретим все отовсюду pass in on $int_if from any to any #разрешаем всё из локальной сети pass out on $ext_if from $ext_if to any #разрешаем серверу доступ в интернет pass in on $ext_if proto tcp from any to $ext_if port ssh #разрешаем ssh pass in inet proto icmp all icmp-type echoreq #разрешаем ping
Готово!
Осталось прочитать правила pf
pfctl -f /etc/pf.conf
pfctl -e #включить pf pfctl -d #выключить pf
vi /etc/pf.conf
ext_if="rl1" #Внешний интерфейс (смотрит к провайдеру WAN) int_if="rl0" #Внутренний интерфейс (смотрит в нашу сеть LAN) table <pf-allow-pc> file "/etc/pf-allow-pc" set skip on lo0 #пропускаем проверку на петле scrub in all #собираем все части пакета перед отправкой nat on $ext_if from <pf-allow-pc> to any -> ($ext_if) block all #запретим все отовсюду pass in on $int_if from any to any #разрешаем всё из локальной сети pass out on $ext_if from $ext_if to any #разрешаем серверу доступ в интернет pass in on $ext_if proto tcp from any to $ext_if port ssh #разрешаем ssh pass in inet proto icmp all icmp-type echoreq #разрешаем ping
vi /etc/pf-allow-pc
192.168.0.2 192.168.0.3 192.168.0.5
В случае если на сервере не запущен named то на клиентских компьютерах надо в поле DNS указать пограничный DNS сервер, или настраивать named самим
vi /etc/rc.conf
named_enable="YES"
vi /etc/namedb/named.conf
listen-on { 127.0.0.1; 192.168.1.1;}; forwarders { 127.0.0.1; 192.168.1.1;};