Система резервного копирования


Вначале был сервер... Никому не нужный. Intel P200Pro, RAID DAC960 45 Гб, ОЗУ 128 Мб. В него воткнули стриммер Seagate Scorpion 24. Вот что получилось.

Была поставла задача копировать файлы с серверов Netware. Проблема была в том, что надо было делать копии открытых DBF (FoxPro). После долгих мытарств и покупки какого-то "голдсупербекапа фо винды" NT был снесен. Кроме всего прочего из него так и не получилось автоматически регистрироваться в Netware. Была поставлена OS/2 (ACP1). К радости, драйвер для DAC960 входит в поставку. Для автоматической регистрации в Novell используется прога attach2.

Скрипт для запуска такой:

-- cut --
c:
cd \netware
attach2 server1 user rassword 
map root O:=server1\DATA:
attach2 server2 user rassword
map root F:=server2\DATA:
map del L:
-- cut --
В процессе работы были случаи отрубания дисков (Netware, к примеру, сдыхала, свитч) после востановления связи диски не подключались сами и потому этот командник был засунут в RSched (шедулер), который его выполняет при отсутсвии файлов vol$log.err на дисках O: и F:
Для копирования данных используется dsync (от Zuko) и два конфигурационных файла к нему. Запуск (тем же Rsched) днем
dsync.exe -v dsync_day.cfg
ночью
dsync.exe -v dsync_NIGHT.cfg
Копирование проводится два раза в сутки (в 0 часов и в 12 часов) в такую структуру каталогов:
\BACKUP
    \DAY            - 12 часов дня
        \SERVER1    - 1 сервер
        \SERVER2    - 2 сервер
    \NIGTH          - 0 часов
        \SERVER1    - 1 сервер
        \SERVER2    - 2 сервер
Естественно, копируется не все данные с дисков Netware, а только важные базы. Каталог BACKUP зашарен по сети и, так как данные там лежат ничем не упакованные, с сохранением структуры каталогов, их можно легко "восстановить" на сервер с любого компьютера в сети.

Потом потребовалось делать копии баз Oracle. Работает это так:

  1. Средствами Oracle с разных серверов(Windows NT) делаются архивные копии на диск сервера NT.
  2. Из оси подключаем диск NT
    при старте системы:
    --cut startlanserver.cmd --
    NET START SERVER
    @if errorlevel 2 C:\IBMLAN\NETPROG\lserr.exe
    logon user /p:password
    --cut--
    
    этот файл также запускается RSched при отсутствии диска N:
     -- cut att.cmd --
    net use n: \\nt\disk
    call c:\start\beep.cmd
    --cut--
    
    этот файл необязателен, пиликает просто :) взят из доки по REXX`у
    --- beep.cmd ---
    /* C scale */
    note.1 = 262    /* middle C */
    note.2 = 294    /*    D     */
    note.3 = 330    /*    E     */
    note.4 = 349    /*    F     */
    note.5 = 392    /*    G     */
    note.6 = 440    /*    A     */
    note.7 = 494    /*    B     */
    note.8 = 524    /*    C     */
    do i=1 to 8
      call beep note.i,250    /* hold each note for */
                              /* one-quarter second */
    end
    do i=1 to 8
      call beep note.i,250    /* hold each note for */
                              /* one-quarter second */
    end
    do i=1 to 8
      call beep note.i,250    /* hold each note for */
                              /* one-quarter second */
    end
    --- beep.cmd ---
    
  3. С помощью BackAgain/2000 копируем все базы Oracle на стриммер. BackAgain каждый раз перезаписывает ленту и после копирования ее "выкидывает". Копирование происходит ночью с понедельника по пятницу (в выходные некому ленту менять). Всего используется 5 лент, по одной на каждый день, таким образом есть пять копий баз данных. В рабочее время каждые полчаса RSched начинает запускать этот скрипт:
    -----
    /* Проверка готовности стриммера */
    call RxFuncAdd 'BaiiLoadFuncs', 'BAIIREXX', 'BaiiLoadFuncs'
    call BaiiLoadFuncs 
    ret = RxFuncAdd('BaiiCheckReady', 'BAIIREXX', 'BaiiCheckReady')
    ret = BaiiCheckReady('ScsiTape:0')
    say 'BaiiCheckReady result = ' ret
    IF ret  \= "READY" then do
    '@c:\netware\send.exe /P'
    '@c:\netware\send.exe "Замените ленту в стриммере" ADMIN /B'
    '@c:\netware\send.exe "Замените ленту в стриммере" SMENA /B'
    call RxFuncAdd 'RexxwebLoadFuncs', 'REXXWEB', 'RexxwebLoadFuncs'
    call RexxwebLoadFuncs
    server = 'ip адрес моего почтового сервера'
    sender = 'control@mydomain.ru'
    recipient = 'control@mydomain.ru'
    subject = 'Замените ленту'
    message = DATE() || " - " || TIME() || ' Замените ленту в стриммере !'
    rc = sendsmtp(server, sender, recipient, subject, 'message','','P')
    end
    ret = RxFuncDrop('BaiiCheckReady')
    exit
    -----
    
    E-mail, на который отправляется сообщения -- это алиас в почтовом сервере Weasel. Это сообщение получают 4 человека.

    Библиотеку RXWEB можно найти на hobbes. Функция BaiiCheckReady возвращает "NOT READY", если идет запись на ленту. Но у меня эти два процесса не пересекаются во времени. Если в рабочее время нет сообщений, посылаемых этим скриптом, то лента не выехала, что означает "копирование не выполнено". Это случалось пару раз из-за плохих лент.

Сервер работает почти год, большую часть времени он конечно не нагружен, но сбоев не было ни разу. А вот восстанавливать что-то приходится часто :(

Роман Попов


Интересные ссылки:
Комментариев к странице: 0 | Добавить комментарий
Домой | Проект ядро Core/2 | Проект OS/4 Download | Новости | Гостевая книга | Подробно обо всем | Нужные программы | Проекты | OS/2 FAQ | Всячина | За и Против | Металлолом | #OS2Russian | RDM/2 | Весёлые картинки | Наша галерея | Доска объявлений | Карта сайта | ПОИСК | ФОРУМ