И так... статья....
====================================================
Установка и настройка сервера резервного копирования Amanda на FreeBSD.
Цель- создавать бэкапы юниксовых серверов в хранилище на жестком диске.
Аманду ставим из портов.
Думаю излишне будет напоминать что для начала неплохо бы их обновить.
Код: Выделить всё
asterisk# cd /usr/ports/misc/amanda-server/
asterisk# make install cleanТут уж смотрите по вашему вкусу и потребностям.
Amanda-server автоматически потянет за собой amanda-client.
Никаких сложностей в процессе установки возникнуть не должно. Всё быстро и стандартно.
Следующий этап - конфигурация нашего сервера...
Править будем 4 файла:
amanda.conf
disklist
.amandahosts
inetd.conf
Файлы конфигурации Amanda расположены в директории /usr/local/etc/amanda/DailySet1.
Кроме того нам нужно создать директорию где будут храниться наши "архивы" (бэкапы).
У меня это - /opt/amanda_backups.
А также проверить наличие директорий:
/var/log/amanda/DailySet1 ;
/tmp/amanda ;
/var/hold (это если будете использовать hold-disk,
кстати разместить его можете где угодно, на ваше усмотрение).
Если чего то нет- создать.
Пользователь от имени которого работает сервер- operator,
группа- operator.
Следовательно все директории (и их содержимое), необходимые для работы сервера,
должны принадлежать "operator".
Проверяем и если это не так- меняем:
Код: Выделить всё
asterisk# chown -R operator:operator /usr/local/etc/amanda 
asterisk# chown -R operator:operator /opt/amanda_backups
asterisk# chown -R operator:operator /var/log/amanda
asterisk# chown -R operator:operator /var/hold
asterisk# chown -R operator:operator /tmp/amandaКод: Выделить всё
asterisk# pw user mod operator -s /bin/shИ так, начнем.
Файл amanda.conf
Код: Выделить всё
org "Company"            # имя вашей компании, используется в отчетах e-mail
mailto "root@localhost"  # собственно сам e-mail для отчетов
inparallel 4             # количество одновременно работающих процессов dumper
netusage 100000          # какую пропускную способность канала использовать
dumpcycle 5 days         # цикл за который создается бэкап 0 -уровня
tapecycle 7              # число лент, используемых в цикле (dumpcycle), 
                         # неплохо иметь некоторый запас
usetimestamps            # параметр который можно указать на период отладки и тестирования
                         # без него Аманда будет слать алерты о том,
                         # что amdump запускается чаще чем один раз в сутки 
runspercycle 5           # сколько раз за цикл (dumpcycle) будет запущен amdump
runtapes 1               # сколько лент будет использовано за один запуск amdump
tpchanger "chg-disk"     # чейнджер для смены виртуальных лент на жестком диске
changerfile "/usr/local/etc/amanda/DailySet1/changer" # служебный файл чейнджера, 
                                                      # создавать его не надо
tapedev "file:/opt/amanda_backups"                    # устройство вывода
logdir "/var/log/amanda/DailySet1"                    # куда писать логи
indexdir "/usr/local/etc/amanda/DailySet1/index"      # директория для служебных index-файлов
infofile "/usr/local/etc/amanda/DailySet1/curinfo"    # директория для служебных info-файлов
diskfile "/usr/local/etc/amanda/DailySet1/disklist"   # в этом файле указываем что бэкапить
tapelist "/usr/local/etc/amanda/DailySet1/tapelist"   # служебный файл управления лентами 
                                                      # создайте пустым
# Параметры необходимые для процесса восстановления
amrecover_do_fsf yes
amrecover_check_label yes
amrecover_changer "chg-disk"
# Описание ленточных накопителей
tapetype HARD-DISK                 # тип накопителя;
labelstr "^ARCHIVE-[0-9][0-9]*$"   # шаблон для маркировки лент;
# "характеристики" накопителя; для архивации на жесткий диск достаточно минимума;
define tapetype HARD-DISK {
comment "On Hard Disk"  
length 3000 mbytes                 # объем накопителя
}
# Глобальные опции
define dumptype global {
comment "Global definitions"
index yes                        # создавать ли индекс бэкапа;
record yes                       # изменять ли информацию в файлах dumpdates 
                                 # или gnutar-lists во время тестов;
ignore no                        # пропускать ли бэкапирование;
priority high                    # приоритет;
}
# Параметры архивации с использованием TAR
define dumptype hard-disk-tar {
global
comment "Backup to hard disk- using tar"
compress none
dumpcycle 5
program "GNUTAR"
holdingdisk yes   # используем "резервный" временный носитель
                  # если лента по какой либо причине не доступна;
}
# Параметры архивации с использованием DUMP
define dumptype hard-disk-dump {
global
comment "Backup to hard disk- using dump"
compress none
dumpcycle 5
program "DUMP"
holdingdisk yes
}
# Характеристики hold-диска
# hold-disk выступает в качестве резервного накопителя, 
# на случай если по какой то причине ленты будут не доступны
# архивация будет все равно выполнена; после устранения неполадок, 
# архив автоматически будет записан на ленту
holdingdisk hd1 {
    comment "For holding disk"
    directory "/var/hold"
    use 7 g             # максимальный используемый объем
    chunksize 1 g       # на части какого размера разбивать архивы
}
# Описание сетевых интерфейсов
define interface local {
comment "a local disk"
use 100000 kbps
}
define interface xl0 {
comment "100 Mbps ethernet"
use 100 Mbps
}
Аманда имеет массу других опций и настроек.
За дополнительной информацией обращайтесь man amanda(8).
Теперь укажем Аманде что мы хотим архивировать.
Файл disklist.
Код: Выделить всё
# ахивируем нужные каталоги с самого сервера с Амандой
# клиент       диск              профиль       интерфейс
amanda.mydomain.com   /etc    hard-disk-tar -1 xl0   
# архивируем нужную информацию с серверов-клиентов в локальной сети
mxs.mydomain.com    /var/spool/domain  hard-disk-tar -1 xl0
#.. и так далее.....и пустой файл tapelist.
В файле amanda-client.conf в последствии можно выполнить более тонкую настройку клиентов (см. man).
Код: Выделить всё
asterisk# touch /usr/local/etc/amanda/DailySet1/amanda-client.confКод: Выделить всё
asterisk# ln -s /usr/local/etc/amanda/DailySet1/amanda-client.conf \
/usr/local/etc/amanda/amanda-client.confКод: Выделить всё
asterisk# touch /usr/local/etc/amanda/DailySet1/tapelist
На клиенте в корневой директории создаем файл .amandahosts
Код: Выделить всё
asterisk# touch /.amandahosts
Мы должны разрешить коннект серверу Аманда.
Пишем следующее:
(пример файла .amandahosts, расположенного на самом сервере с Амандой)
Код: Выделить всё
## хост          пользователь          опции
localhost            operator      amindexd amidxtaped amdump
amanda.mydomain.com  operator      amindexd amidxtaped amdump
# и для рута; нужно для восстановления
localhost             root         amindexd amidxtaped 
amanda.mydomain.com   root         amindexd amidxtaped Код: Выделить всё
## разрешаем коннект серверу Аманда для снятия дампа с клиента
amanda.mydomain.com  operator      amindexd amidxtaped amdump
# собственно этого вполне достаточно
# но если вы решите производить какие либо действия со стороны клиента, 
#то добавтье это:
client.mydomain.com     root         amindexd amidxtaped
Выставляем права на файл "600" и не забываем сменить владельца (operator).
Amanda запускается inet'ом, поэтому в файл /etc/inetd.conf нужно дописать:
Код: Выделить всё
amanda dgram udp wait operator /usr/local/libexec/amanda/amandad amandad \
-auth=bsd amdump amindexd amidxtaped
amandaidx stream tcp nowait operator /usr/local/libexec/amanda/amindexd amindexd \
-auth=bsd amdump amindexd amidxtaped
amidxtape stream tcp nowait operator /usr/local/libexec/amanda/amidxtaped amidxtaped \
-auth=bsd amdump amindexd amidxtapedКод: Выделить всё
asterisk# /etc/rc.d/inetd startКод: Выделить всё
asterisk# netstat -a | grep amanda
tcp4       0      0  *.amandaidx     *.*    LISTEN
udp4       0      0  *.amanda        *.*
Теперь выполним некоторые действия по настройке сервера.
Прежде всего нам нужно создать "виртуальные ленты".
В директории /opt/amanda_backups создадим несколько дополнительных поддиректорий,
которые и будут нашими лентами.
Их количество должно соответствовать значению tapecycle, указанному в файле amanda.conf
В нашем случае это "7".
Код: Выделить всё
asterisk# mkdir /opt/amanda_backups/slot1
asterisk# mkdir /opt/amanda_backups/slot2
asterisk# mkdir /opt/amanda_backups/slot3
asterisk# mkdir /opt/amanda_backups/slot4
asterisk# mkdir /opt/amanda_backups/slot5
asterisk# mkdir /opt/amanda_backups/slot6
asterisk# mkdir /opt/amanda_backups/slot7Код: Выделить всё
asterisk# ln -s /opt/amanda_backups/slot1 /opt/amanda_backups/datap.s. не забываем менять владельца на "operator".
Теперь их (ленты) нужно промаркировать.
Код: Выделить всё
asterisk# su operator
asterisk$ amlabel DailySet1 ARCHIVE-1 slot 1
asterisk$ amlabel DailySet1 ARCHIVE-2 slot 2
asterisk$ amlabel DailySet1 ARCHIVE-3 slot 3
asterisk$ amlabel DailySet1 ARCHIVE-4 slot 4
asterisk$ amlabel DailySet1 ARCHIVE-5 slot 5
asterisk$ amlabel DailySet1 ARCHIVE-6 slot 6
asterisk$ amlabel DailySet1 ARCHIVE-7 slot 7Код: Выделить всё
asterisk$ amtape DailySet1 show 
slot 1: date Х label ARCHIVE-1
slot 2: date Х label ARCHIVE-2
slot 3: date Х label ARCHIVE-3
slot 4: date Х label ARCHIVE-4
slot 5: date Х label ARCHIVE-5
slot 6: date Х label ARCHIVE-6
slot 7: date Х label ARCHIVE-7Код: Выделить всё
asterisk$ amcheck -s DailySet1
Amanda Tape Server Host Check
-----------------------------
Holding disk /var/hold: 7680740 kB disk space available, that's plenty
amcheck-server: slot 1: date X        label ARCHIVE-1 (new tape)
NOTE: skipping tape-writable test
Tape ARCHIVE-1 label ok
Server check took 0.107 secondsКод: Выделить всё
asterisk$ amcheck -c DailySet1
--------------------------------
Client check: 1 host checked in 0.041 seconds, 0 problems foundКод: Выделить всё
asterisk$ amdump DailySet1а Аманда отрапортует вам о проделанной работе на емайл.
Следующий этап- Восстановление.
Для восстановления в Аманде используются утилиты amrecover и amrestore.
Мы будем использовать amrecover,
т.к. amrestore используется в основном с ленточными накопителями
для извлечения архива с ленты на жесткий диск и последующего восстановления.
Если восстановить информацию нужно с локалхоста, то переходим в каталог,
который нужно восстановить и даем команду amrecover
(работаем от пользователя root).
Пример:
Код: Выделить всё
asterisk# cd /etc
asterisk# amrecover
AMRECOVER Version 2.5.1p3. Contacting server on asterisk.mydomain.com ...
220 asterisk AMANDA index server (2.5.1p3) ready.
Setting restore date to today (2008-05-05)
200 Working date set to 2008-05-05.
200 Config set to DailySet1.
200 Dump host set to asterisk.mydomain.com.
Use the setdisk command to choose dump disk to recover
amrecover>Код: Выделить всё
amrecover> sethost asterisk.mydomain.com # хост информацию с которого нужно восстановить
200 Dump host set to asterisk.mydomain.com
amrecover> setdisk /etc       # директория которую нужно восстановить
200 Disk set to /etc
amrecover> add *             # восстановить всё что есть в архиве
Added dir /zfs/ at date 2008-05-05-09-35-00
Added file /ttys
Added file /termcap
Added file /syslog.conf
Added file /sysctl.conf.bak
Added file /sysctl.conf
Added dir /ssl/ at date 2008-05-05-09-35-00
Added dir /ssh/ at date 2008-05-05-09-35-00
Added file /spwd.db
....
amrecover> extract
Extracting files using tape drive chg-disk on host asterisk.mydomain.com.
The following tapes are needed: ARCHIVE-1
Restoring files into directory /etc
WARNING: Existing entry /etc/aliases will be deleted
WARNING: Existing file /etc/amandates will be overwritten
WARNING: Existing file /etc/amd.map will be overwritten
WARNING: Existing file /etc/apmd.conf will be overwritten
WARNING: Existing file /etc/auth.conf will be overwritten
WARNING: All existing files in /etc/bluetooth will be deleted.
WARNING: Existing file /etc/crontab will be overwritten
....
Continue [?/Y/n]?     # запрос на подтверждение; жмем "y"
amrecover> quit
200 Good bye.
asterisk#
то лучше создать временную директорию для распаковки архива.
Код: Выделить всё
asterisk# mkdir /tmp/recover
asterisk# cd /tmp/recover
asterisk# amrecover
.....
amrecover> sethost mxs.mydomain.com
......
и далее по аналогии.можно отбирать шелл у operator'а
Код: Выделить всё
asterisk# pw user mod operator -s /sbin/nologinКод: Выделить всё
16 0 * * 1-5   operator /usr/local/sbin/amcheck -m DailySet1
18 0 * * 1-5   operator /usr/local/sbin/amdump DailySet1P.S. Некоторые полезные команды для работы с сервером Amanda.
Код: Выделить всё
amtape DailySet1 show        # показать состояние
amtape DailySet1 current     # показать текущую ленту
amtape DailySet1 slot next   # загрузить следующую ленту
amtape DailySet1 slotX       # загрузить указанную ленту (где Х- это номер)
amcheck DailySet1            # проверить настройки серверной и клиентской части
amcheck -s DailySet1         # проверить только серверную часть
amcheck -с DailySet1         # проверить только клиентскую часть
amcheck -c DailySet1 my.server.com   # проверить указанного клиента
amdump DailySet1             # запустить бэкапирование
amdump DailySet1 my.server.com /etc  # запустить бэкапирование указанного клиентаДоступно множество команд.
Код: Выделить всё
asterisk# amadmin -h
Usage: amadmin <conf> <command> {<args>} [-o configoption]* ...
    Valid <command>s are:
        version                                 # Show version info.
        config                                  # Show configuration.
        force [<hostname> [<disks>]* ]+         # Force level 0 at next run.
        unforce [<hostname> [<disks>]* ]+       # Clear force command.
        force-bump [<hostname> [<disks>]* ]+    # Force bump at next run.
        force-no-bump [<hostname> [<disks>]* ]+ # Force no-bump at next run.
        unforce-bump [<hostname> [<disks>]* ]+  # Clear bump command.
        disklist [<hostname> [<disks>]* ]*      # Debug disklist entries.
        reuse <tapelabel> ...            # re-use this tape.
        no-reuse <tapelabel> ...         # never re-use this tape.
        find [<hostname> [<disks>]* ]*   # Show which tapes these dumps are on.
        delete [<hostname> [<disks>]* ]+ # Delete from database.
        info [<hostname> [<disks>]* ]*   # Show current info records.
        due [<hostname> [<disks>]* ]*    # Show due date.
        balance [-days <num>]            # Show nightly dump size balance.
        tape [-days <num>]               # Show which tape is due next.
        bumpsize                         # Show current bump thresholds.
        export [<hostname> [<disks>]* ]* # Export curinfo database to stdout.
        import                           # Import curinfo database from stdin.
asterisk#  