Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программное обеспечение Windows (http://forum.oszone.net/forumdisplay.php?f=7)
-   -   [решено] Как организовать архивацию данных? (http://forum.oszone.net/showthread.php?t=87246)

Bugs 19-07-2007 02:09 615613

Как организовать архивацию данных?
 
Необходимо организовать сложную систему архивации штатными или бесплатными средствами.

Что нужно:
Есть ряд ресурсов которые нужно архивировать ежедневно или по другому расписанию, желательно чтоб в архивах применялся инкрементальный метод копирования с заданой "глубиной" (количество дней хранения).

Как это реализовано сейчас
На каждый день недели есть командный файл который архивирует каждый ресурс в отдельный файл с использованием внешнего архиватора. В имени создаваемого файла указывается номер дня недели. В командном файле есть строка удаляющая все файлы предыдущей архивации.

[c]Минусы данного подхода[/c]
1) Очень сложно организовать систему инкрементального копирования, хотя уже хочется, т.к. данных большие объёмы(свыше 100Гб)
2) Нет возможности отказаться от привязки к 7 дневной структуре из-за ограничений планировщика Windows
3) Нет возможности организовать контроль выполнения задания по архивации
4) В случае применения инкрементального копирования, приходится всё восстанавливать ручками начиная с первого архива, т.е. нет GUI интерйейса :)

Раньше работал с Veritas NetBackUP, но ввиду перехода к чистому софту отказались от него.
Если будут предложения использовать ntbackup, сразу же попрошу приводить свои реально рабочие конфигурации, если можно с примерами скриптов.

amel27 20-07-2007 10:00 616207

Цитата:

Цитата Bugs
Минусы данного подхода

1. ничего сложного, главное чтобы архиватор понимал архивный атрибут (к примеру WinRAR)
2. планировщик может и ограничен, а скрипт нет
3. не совсем так, как минимум - переменная ERRORLEVEL плюс "If Exist"
4. можно тоже скриптом... от GUI NTBackup Имхо тоже мало толку.
Цитата:

Цитата Bugs
Если будут предложения использовать ntbackup, сразу же попрошу приводить свои реально рабочие конфигурации, если можно с примерами скриптов.

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

@echo off
SetLocal EnableDelayedExpansion
:: Параметры скрипта:
:: SOURCE - путь к сетевому ресурсу или имя BKS-файла
:: FULLDEPTH - глубина отката в полных архивах
:: INCRDEPTH - инкрементных архивов на один полный
SET SOURCE=\\SERVER\$DIR1
SET FULLDEPTH=5
SET INCRDEPTH=6

Call :CallEx GetState
Call :CallEx DelLogs
Call :CallEx StartCMD
If %ERRORLEVEL% EQU 0 (
Call :CallEx NewState
Call :CallEx SetState
Call :CallEx DelBkf)
Exit
:: Запуск процесса NTBackup
:StartCMD
Set $CMD=ntbackup backup %SOURCE% /f "%~dpn0.0.bkf" /l:f /m incremental /a
If %INCREMENT% EQU 0 Set $CMD=ntbackup backup %SOURCE% /f "%~dpn0.bkf" /l:f
Start /WAIT %$CMD%
If %ERRORLEVEL% NEQ 0 (
        Call :CallEx CopyLog
        Echo При выполнении резервного копирования возникли ошибки,
        Echo Смотрите журнал сообщений: "%~n0.log".
        Exit /B 1)
Call :CallEx CopyLog
If Exist %~n0.bkf (
        If Exist %~n0.0.bkf Call :CallEx ShiftBkf 0 1
        Ren %~n0.bkf %~n0.0.bkf
        If %ERRORLEVEL% NEQ 0 Exit /B 1
        If Exist %~n0.log Ren %~n0.log %~n0.0.log
        If %ERRORLEVEL% NEQ 0 Exit /B 2)
GoTo :EOF
:: Чистка старых логов
:DelLogs
Set $BakData=%APPDATA:~0,-17%\Local Settings\Application Data\Microsoft\Windows NT\NTbackup\Data
Del /Q /F "%$BakData%\backup*.log" >nul
If %ERRORLEVEL% NEQ 0 Exit /B 1
GoTo :EOF
:CopyLog
Set $BakData=%APPDATA:~0,-17%\Local Settings\Application Data\Microsoft\Windows NT\NTbackup\Data
If %INCREMENT% EQU 0 (
        Copy "%$BakData%\backup*.log" %~n0.log >nul
) Else (
        Copy /B %~n0.0.log+"%$BakData%\backup*.log" %~n0.0.log >nul
)
If %ERRORLEVEL% NEQ 0 Exit /B 1
GoTo :EOF
:: Расчет нового состояния
:NewState
Set /A INCREMENT=%INCREMENT%+1
If %INCREMENT% GTR %INCRDEPTH% Set INCREMENT=0
GoTo :EOF
:: Чтение параметров
:GetState
For /f "Delims=" %%i in (%~n0.ini) Do Set /A %%i+0
If "%INCREMENT%"=="" (
        Echo INCREMENT=0 >%~n0.ini
        For /f "Delims=" %%i in (%~n0.ini) Do Set /A %%i+0
        If Not "!INCREMENT!"=="0" (
                Set INCREMENT=0
                Exit /B 2
        )
)
GoTo :EOF
:: Сохранение параметров
:SetState
Set $bak=%INCREMENT%
Echo INCREMENT=%INCREMENT% >%~n0.ini
For /f "Delims=" %%i in (%~n0.ini) Do Set /A %%i+0
If Not "%INCREMENT%"=="%$bak%" Exit /B 1
GoTo :EOF
:: Переименование архивов
:ShiftBkf
If Exist %~n0.%2.bkf (
        Set /A $idx=%2+1
                Call :ShiftBkf %2 !$idx!
        If !ERRORLEVEL! NEQ 0 Exit /B 1 )
Ren %~n0.%1.bkf %~n0.%2.bkf
If %ERRORLEVEL% NEQ 0 Exit /B 1
If Exist %~n0.%2.log Del %~n0.%2.log
If %ERRORLEVEL% NEQ 0 Exit /B 2
If Exist %~n0.%1.log Ren %~n0.%1.log %~n0.%2.log
If %ERRORLEVEL% NEQ 0 Exit /B 2
GoTo :EOF
:: Удаление старых архивов
:DelBkf
For /f "tokens=1,2 delims=." %%i in ('Dir /B %~n0.?.bkf^|FindStr /REC:"\.[0-9]\.bkf"') Do (
        If %%j GEQ %FULLDEPTH% (
                Del /F/Q %%i.%%j.log
                Del /F/Q %%i.%%j.bkf)
        If !ERRORLEVEL! NEQ 0 Exit /B 1)
GoTo :EOF
:: Вызов процедур с контролем ошибок
:CallEx
Call :%*
If %ERRORLEVEL% EQU 1 (
        Echo.
        Echo Модуль "%1" вызвал исключение, работа скрипта прервана!
        Exit )
If %ERRORLEVEL% EQU 2 Echo Модуль "%1" вызвал некритичную ошибку, работа скрипта продолжена.
GoTo :EOF


Bugs 21-07-2007 04:02 616672

amel27
Хороший скрипт!
А можно еще скрипт восстановления нужной информации из конкретного полного архива?
А почему именно такой шаг создания инкрементальных архивов и полных?
Если я правильно понял, то просто запуская скрипт 5 раз, я создам один полный архив и 4 инкрементальных? Если запущу скрит 6 раз, то появится второй полный архив?

amel27 21-07-2007 06:55 616686

Bugs
Цитата:

Цитата Bugs
А можно еще скрипт восстановления нужной информации из конкретного полного архива?

К сожалению, NTBackup не поддерживает восстановление из командной строки... зато у него куча других преимуществ, например очень детальный лог. Можно автоматизировать восстановление при использовании обычных архиваторов (типа WinRAR, хотя он вроде небесплатный).
Цитата:

Цитата Bugs
Если я правильно понял, то просто запуская скрипт 5 раз, я создам один полный архив и 4 инкрементальных? Если запущу скрит 6 раз, то появится второй полный архив?

Нет, на 1 полный будет 6 инкрементальных... причем количество хранимых полных архивов будет не больше 5 - старые будут автоматически удаляться... Все эти параметры можно настроить под себя.
Цитата:

Цитата Bugs
А почему именно такой шаг создания инкрементальных архивов и полных?

Скажем, в воскресенье - полный архив, а в остальные (6 дней) инкрементальные.

Bugs 21-07-2007 10:01 616724

amel27
Цитата:

К сожалению, NTBackup не поддерживает восстановление из командной строки... зато у него куча других преимуществ, например очень детальный лог. Можно автоматизировать восстановление при использовании обычных архиваторов (типа WinRAR, хотя он вроде небесплатный).
Т.е. восстановление будет происходить через GUI интерфейс?

Цитата:

Нет, на 1 полный будет 6 инкрементальных... причем количество хранимых полных архивов будет не больше 5 - старые будут автоматически удаляться... Все эти параметры можно настроить под себя.
Каждый полный это отдельный файл, да?
Я прошу прощения но сейчас есть под руками только КПК, на нём сложно проверить как работает этот скрипт, а решение очень понравилось!

amel27 21-07-2007 14:36 616801

Bugs
Цитата:

Цитата Bugs
Т.е. восстановление будет происходить через GUI интерфейс?

как заказывал ;)
Цитата:

Цитата Bugs
Каждый полный это отдельный файл, да?

да, в этот же файл добавляются все инкрементные (до следующего полного)

Bugs 23-07-2007 05:28 617291

amel27
А почему Вы не используете внешний архиватор для сжатия уже готовых полных архивов?
Т.е. архив в который уже не добавляются инкрементальные бэкапы.
Или у Вас совсем нет проблем с местом? :lol:

amel27 23-07-2007 12:17 617386

Bugs
использую NTFS-сжатие тома, сильно сжимать тоже чревато - можно не уложиться в отведенное время

Bugs 24-07-2007 04:10 617730

amel27
Хорошо, про NTFS сжатие я и не подумал :-)
Спасибо большое, за хорошую консультацию!


Время: 15:18.

Время: 15:18.
© OSzone.net 2001-