сохранение и архивирование...
Д
Дядя_Алекс..
Судя по учестившимся вопросам которые задают мне лично и в этот форум, начинающие админы и пользователи выполняющие их функции наконец таки начали задумываться об сохранении информации. чтобы не писать кучу раз я попробую рассказать что я нарыл в свое время и как использую в своей работе. (и не
только.)
1 надо определиться какая информация нужна (винт, сервер и пр.)
2 посчитать приблизительный обьем будущего архива.
3 определиться с периодичностью архивации. чем чаще тем лучше, но резко возрастают обьемы.
4 определить какие старые архивы нужны. (т.е. нужна реальная копия "на вчера" или "а чтобы и за полгода назад восстановить" )
5 установить какую нить фичу, удовлетворяющим следующим требованиям:
5.1 "фича" должна архивировать что нам надо.
5.2 "фича" должна создавать уникальное имя самого архива
5.3 "фича" должна уметь снимать атрибут архивный (после архивации)
5.4 "фича" должна уметь распознавать наличие атрибута архивный (типо если его нет то не трогать)
5.5 было бы приятно, если у "фичи" была бы какая то хистори
5.6 "фича" имела бы возможность двух режимов 1- полный это когда архивирует все и второй измененный это когда архивируются только файлы , которые были изменены за какой то период.
6 ставим "фичу" на машину и настраиваем автозапуск (или ручной) так как нам надо.
7 архивация должна проходить так:
7.1 раз в неделю (пятница) архивируется все и снимаются атрибуты "архивный" со всех файлов.
7.2 в остальные дни недели архивируются только файлы имеющие атрибут "архивный"
7.3 раз в какой то промежуток все архивы сливаются на какой то внешний носитель (либо уничтожаются за ненадобностью).
в связи с тем что такая фигня мне была нужна давно, я написал прогу на паскале (и пульнул как курсовой )))) )
что она может.
1 берет внешний архиватор (проверял на arj и rar) генерит ему командную строку и запускает его с ней...
далее я напишу как есть сейчас (для rar)
в имени файла должна стоять дата ггггммдд**. ( ** - любые буквы напримет mat для материальной группы). считывается из системы в настроечном файле прописываем также всякие команды для самого архиватора.
вот строка которая подставляется архиватору
a -r -v620000 -ao -ac 20030520mat C:\1C_Bases\1C_Mat\1SBDB\*.*
расшифрую:
сжать
с поддиректориями
том не больше 600 мегов
снять атрибут "архивный" с файла
архивировать только файлы с атрибутом "архивный"
дата + имя архива
что и откуда брать (здесь все из католога...)
вот такое решение было. плохо конечно что на паскале , но на то время я и это ели ели написал.
если есть желание можно будет пообщаться.
icq 12065497
или az_av@mail.ru только в теме укажите что Е1
p.s. господа "правильные" программисты и супер админы. типо просьба не пинать. каждый что может то и делает. )))
1 надо определиться какая информация нужна (винт, сервер и пр.)
2 посчитать приблизительный обьем будущего архива.
3 определиться с периодичностью архивации. чем чаще тем лучше, но резко возрастают обьемы.
4 определить какие старые архивы нужны. (т.е. нужна реальная копия "на вчера" или "а чтобы и за полгода назад восстановить" )
5 установить какую нить фичу, удовлетворяющим следующим требованиям:
5.1 "фича" должна архивировать что нам надо.
5.2 "фича" должна создавать уникальное имя самого архива
5.3 "фича" должна уметь снимать атрибут архивный (после архивации)
5.4 "фича" должна уметь распознавать наличие атрибута архивный (типо если его нет то не трогать)
5.5 было бы приятно, если у "фичи" была бы какая то хистори
5.6 "фича" имела бы возможность двух режимов 1- полный это когда архивирует все и второй измененный это когда архивируются только файлы , которые были изменены за какой то период.
6 ставим "фичу" на машину и настраиваем автозапуск (или ручной) так как нам надо.
7 архивация должна проходить так:
7.1 раз в неделю (пятница) архивируется все и снимаются атрибуты "архивный" со всех файлов.
7.2 в остальные дни недели архивируются только файлы имеющие атрибут "архивный"
7.3 раз в какой то промежуток все архивы сливаются на какой то внешний носитель (либо уничтожаются за ненадобностью).
в связи с тем что такая фигня мне была нужна давно, я написал прогу на паскале (и пульнул как курсовой )))) )
что она может.
1 берет внешний архиватор (проверял на arj и rar) генерит ему командную строку и запускает его с ней...
далее я напишу как есть сейчас (для rar)
в имени файла должна стоять дата ггггммдд**. ( ** - любые буквы напримет mat для материальной группы). считывается из системы в настроечном файле прописываем также всякие команды для самого архиватора.
вот строка которая подставляется архиватору
a -r -v620000 -ao -ac 20030520mat C:\1C_Bases\1C_Mat\1SBDB\*.*
расшифрую:
сжать
с поддиректориями
том не больше 600 мегов
снять атрибут "архивный" с файла
архивировать только файлы с атрибутом "архивный"
дата + имя архива
что и откуда брать (здесь все из католога...)
вот такое решение было. плохо конечно что на паскале , но на то время я и это ели ели написал.
если есть желание можно будет пообщаться.
icq 12065497
или az_av@mail.ru только в теме укажите что Е1
p.s. господа "правильные" программисты и супер админы. типо просьба не пинать. каждый что может то и делает. )))
Д
Дядя_Алекс..
program arxiv_servers;
{ А....... Александр }
{ alex@............ru, az_av@mail.ru }
{$M $4000,0,0 }
{Загружаем переменные из из настроечного файла a_sys.ini}
uses Dos,Crt;
var
perem:text; {файл-переменная для загрузки переменных}
arxivat:string; {тип архиватора}
full:string; {переменная для архива полный}
obnov:string; {переменная для обновления}
nummax:integer; {переменная максимального количества архивов обновлений}
num:text; {файл-переменная для проверки типа архива полный/обновление}
numt:integer; {переменная текущего архива}
kommstr:string; {переменная для использования .... полный/обновление }
f_arhiv:text; {файл-переменная для загрузки списка архива }
s_arhiv:string; {переменная для загрузки списка архива }
kommstrend:string; {конечная переменная для формирования коммандной строки}
H,M,S,Y,Mo,D,Hund:word; {год, месяц, день}
T:DateTime; {дата}
f_history:text; {файл-переменная для записи истории }
s_history:string; {переменная для записи истории }
function LeadingZero(W:Word):string;
var
S:string;
begin
Str(W:0,S);
if Length(S)=1 then
S:='0'+S;
LeadingZero:=S;
end;
begin
{Блок "истории архива - начало"}
Assign (f_history, 'history.txt'); {прицепляем файл}
Append (f_history); {считываем файл}
Writeln (f_history, '================================================== ');
Writeln (f_history, 'Старт программы архивации... ');
close(f_history);
{Блок "истории архива - конец"}
{Блок №1 начало
В этом блоке мы считываем начальные параметры переменных
из настроечного файла a_sys.ini }
Assign (perem, 'a_sys.ini'); {прицепляем файл}
Reset (perem); {считываем файл}
Readln (perem, arxivat);
Readln (perem, full);
Readln (perem, obnov);
Readln (perem, nummax);
{Блок "истории архива - начало"}
Append (f_history); {считываем файл}
Writeln (f_history, 'Архиватор : ', arxivat);
{Writeln (f_history);}
Writeln (f_history, 'Макс. кол-во обновлений : ', nummax);
{Writeln (f_history);}
{Блок "истории архива - конец"}
{ситывание номера текущего архива}
Assign (num, 'narx.ini'); {прицепляем файл}
Reset (num); {считываем файл}
Readln (num, numt); {заносим значение текущего архива}
{Блок "истории архива - начало"}
Writeln (f_history, 'Номер текущего архива : ', numt);
{Writeln (f_history);}
{Блок "истории архива - конец"}
{проверяем номер архива на полный/неполный n = 1 или нет}
if numt=1
then
begin
{ Writeln ('N=', numt, 'считываем параметры для полного архива');}
kommstr:=full; {привязываем к файлу полного архива}
{Блок "истории архива - начало"}
Writeln (f_history, 'текущий архив : полный ');
{Writeln (f_history);}
{Блок "истории архива - конец"}
end
else
begin
{ Writeln ('N=', numt, 'считываем параметры для обновленного архива');}
kommstr:=obnov; {привязываем к файлу обновленного архива}
{Блок "истории архива - начало"}
Writeln (f_history, 'текущий архив : обновление ');
{Writeln (f_history);}
{Блок "истории архива - конец"}
end;
{проверяем номер архива на последний/не последний}
if numt=nummax
then
begin
{ Writeln ('N=', numt, 'это был последний архив');}
numt:=1;
{Блок "истории архива - начало"}
Writeln (f_history, 'это был последний архив. ');
{Writeln (f_history);}
{Блок "истории архива - конец"}
end
else
begin
{ Writeln ('N=', numt, 'добавляем к значению номера архива единицу');}
numt:=numt+1;
end;
close (num);
{Writeln ('N=', numt);}
Assign (num, 'narx.ini');
Rewrite (num);
Writeln (num, numt);
close (num);
{блок проверки текущей даты, время}
GetDate(Y,Mo,D,Hund);
GetTime(H,M,S,Hund);
{Блок "истории архива - начало"}
Writeln (f_history, 'Текущая дата : ',LeadingZero(Y),':',LeadingZero(Mo),':',LeadingZero(D));
Writeln (f_history, 'Текущее время : ',LeadingZero(H),':',LeadingZero(M),':',LeadingZero(S));
Writeln (f_history, 'Всего места на диске : ',DiskSize(0) div 1024, ' Кбайт');
Writeln (f_history, 'Свободного места на диске : ',DiskFree(0) div 1024, ' Кбайт');
{Writeln (f_history);}
{Блок "истории архива - конец"}
{блок запуска цикла архивации}
{пишем цикл.}
begin
Assign (f_arhiv, 'spis_arx.ini');
Reset (f_arhiv); {читаем 1 файл}
repeat
begin
Readln (f_arhiv, s_arhiv);
kommstrend:=kommstr+' '+LeadingZero(Y)+LeadingZero(Mo)+LeadingZero(D)+s_arhiv;
{Блок "истории архива - начало"}
Writeln (f_history, 'Коммандная строчка : ',arxivat, ' ', kommstrend);
{Блок "истории архива - конец"}
Exec(arxivat, kommstrend);
end;
until EOF (f_arhiv);
Writeln ('конец архива');
close (f_arhiv);
end;
Writeln (f_history, 'Конец программы.');
close(f_history);
end.
[Сообщение изменено пользователем 21.05.2003 11:37]
{ А....... Александр }
{ alex@............ru, az_av@mail.ru }
{$M $4000,0,0 }
{Загружаем переменные из из настроечного файла a_sys.ini}
uses Dos,Crt;
var
perem:text; {файл-переменная для загрузки переменных}
arxivat:string; {тип архиватора}
full:string; {переменная для архива полный}
obnov:string; {переменная для обновления}
nummax:integer; {переменная максимального количества архивов обновлений}
num:text; {файл-переменная для проверки типа архива полный/обновление}
numt:integer; {переменная текущего архива}
kommstr:string; {переменная для использования .... полный/обновление }
f_arhiv:text; {файл-переменная для загрузки списка архива }
s_arhiv:string; {переменная для загрузки списка архива }
kommstrend:string; {конечная переменная для формирования коммандной строки}
H,M,S,Y,Mo,D,Hund:word; {год, месяц, день}
T:DateTime; {дата}
f_history:text; {файл-переменная для записи истории }
s_history:string; {переменная для записи истории }
function LeadingZero(W:Word):string;
var
S:string;
begin
Str(W:0,S);
if Length(S)=1 then
S:='0'+S;
LeadingZero:=S;
end;
begin
{Блок "истории архива - начало"}
Assign (f_history, 'history.txt'); {прицепляем файл}
Append (f_history); {считываем файл}
Writeln (f_history, '================================================== ');
Writeln (f_history, 'Старт программы архивации... ');
close(f_history);
{Блок "истории архива - конец"}
{Блок №1 начало
В этом блоке мы считываем начальные параметры переменных
из настроечного файла a_sys.ini }
Assign (perem, 'a_sys.ini'); {прицепляем файл}
Reset (perem); {считываем файл}
Readln (perem, arxivat);
Readln (perem, full);
Readln (perem, obnov);
Readln (perem, nummax);
{Блок "истории архива - начало"}
Append (f_history); {считываем файл}
Writeln (f_history, 'Архиватор : ', arxivat);
{Writeln (f_history);}
Writeln (f_history, 'Макс. кол-во обновлений : ', nummax);
{Writeln (f_history);}
{Блок "истории архива - конец"}
{ситывание номера текущего архива}
Assign (num, 'narx.ini'); {прицепляем файл}
Reset (num); {считываем файл}
Readln (num, numt); {заносим значение текущего архива}
{Блок "истории архива - начало"}
Writeln (f_history, 'Номер текущего архива : ', numt);
{Writeln (f_history);}
{Блок "истории архива - конец"}
{проверяем номер архива на полный/неполный n = 1 или нет}
if numt=1
then
begin
{ Writeln ('N=', numt, 'считываем параметры для полного архива');}
kommstr:=full; {привязываем к файлу полного архива}
{Блок "истории архива - начало"}
Writeln (f_history, 'текущий архив : полный ');
{Writeln (f_history);}
{Блок "истории архива - конец"}
end
else
begin
{ Writeln ('N=', numt, 'считываем параметры для обновленного архива');}
kommstr:=obnov; {привязываем к файлу обновленного архива}
{Блок "истории архива - начало"}
Writeln (f_history, 'текущий архив : обновление ');
{Writeln (f_history);}
{Блок "истории архива - конец"}
end;
{проверяем номер архива на последний/не последний}
if numt=nummax
then
begin
{ Writeln ('N=', numt, 'это был последний архив');}
numt:=1;
{Блок "истории архива - начало"}
Writeln (f_history, 'это был последний архив. ');
{Writeln (f_history);}
{Блок "истории архива - конец"}
end
else
begin
{ Writeln ('N=', numt, 'добавляем к значению номера архива единицу');}
numt:=numt+1;
end;
close (num);
{Writeln ('N=', numt);}
Assign (num, 'narx.ini');
Rewrite (num);
Writeln (num, numt);
close (num);
{блок проверки текущей даты, время}
GetDate(Y,Mo,D,Hund);
GetTime(H,M,S,Hund);
{Блок "истории архива - начало"}
Writeln (f_history, 'Текущая дата : ',LeadingZero(Y),':',LeadingZero(Mo),':',LeadingZero(D));
Writeln (f_history, 'Текущее время : ',LeadingZero(H),':',LeadingZero(M),':',LeadingZero(S));
Writeln (f_history, 'Всего места на диске : ',DiskSize(0) div 1024, ' Кбайт');
Writeln (f_history, 'Свободного места на диске : ',DiskFree(0) div 1024, ' Кбайт');
{Writeln (f_history);}
{Блок "истории архива - конец"}
{блок запуска цикла архивации}
{пишем цикл.}
begin
Assign (f_arhiv, 'spis_arx.ini');
Reset (f_arhiv); {читаем 1 файл}
repeat
begin
Readln (f_arhiv, s_arhiv);
kommstrend:=kommstr+' '+LeadingZero(Y)+LeadingZero(Mo)+LeadingZero(D)+s_arhiv;
{Блок "истории архива - начало"}
Writeln (f_history, 'Коммандная строчка : ',arxivat, ' ', kommstrend);
{Блок "истории архива - конец"}
Exec(arxivat, kommstrend);
end;
until EOF (f_arhiv);
Writeln ('конец архива');
close (f_arhiv);
end;
Writeln (f_history, 'Конец программы.');
close(f_history);
end.
[Сообщение изменено пользователем 21.05.2003 11:37]
2 1
:-) :-) :-) :-) :-) :-) :-) :-) :-) :-)
ntbackupом уж тогда, и то прямей бы получилось
:-) :-) :-) :-) :-) :-) :-) :-) :-) :-)
ntbackupом уж тогда, и то прямей бы получилось
Д
Дядя_Алекс..
: 1 , так сиди и помалкивай , если и такое написать не смог )))))
: 2, да фиг его знает... писалось то не для виндов, все настраивалось под arj тачка 486, сеть 10 мб сервер новелл 3.12 операционка дос 5.*
а там ntbackup, небыло...
просто есть решение и работает кучу лет.
если есть время и нормальные ручки, можно переписать, а если нет то можно и так пользоваться...
результат один.. (почти)
: 2, да фиг его знает... писалось то не для виндов, все настраивалось под arj тачка 486, сеть 10 мб сервер новелл 3.12 операционка дос 5.*
а там ntbackup, небыло...
просто есть решение и работает кучу лет.
если есть время и нормальные ручки, можно переписать, а если нет то можно и так пользоваться...
результат один.. (почти)
прога есть хорошая BackUP32 - делает все!!! (ну почти все), но не может стартовать самостоятельно, нужно запускать (из командной строки или кнопкой старт)
А так почти все пункты перечисленные выше есть
А так почти все пункты перечисленные выше есть
На самом деле кто как может так и архивит у кого на сколько знаний хватает
Я выот к примеру не навижу программить и выше приведенный код я просто не смотрел :-)
Я выот к примеру не навижу программить и выше приведенный код я просто не смотрел :-)
Авторизуйтесь, чтобы принять участие в дискуссии.