4,14 → 4,14 |
# http://www.opennet.ru/dev/fsbackup/ |
# Copyright (c) 2001-2002 by Maxim Chirkov. <mc@tyumen.ru> |
# |
# ëÌÀÞÉ: |
# -n - ÓÏÚÄÁÅÍ ÎÏ×ÙÊ ÁÒÈÉ× ÎÅÚÁ×ÉÓÉÍÏ ÏÔ ÓÏÓÔÏÑÎÉÑ ÈÜÛÁ. |
# -f - full_backup - ÐÏÌÎÙÊ ÂÜËÁÐ × ÁÒÈÉ×, ÂÅÚ ÈÜÛÁ. |
# -h - hash - ÔÏÌØËÏ ÇÅÎÅÒÁÃÉÑ ÈÜÛÁ, ÂÅÚ ÐÏÍÅÝÅÎÉÑ ÆÁÊÌÏ× × ÁÒÈÉ×. |
# -c - clean - ÏÞÉÓËÁ ÈÒÁÎÉÌÉÝÁ Ó ÉÎËÒÅÍÅÎÔÁÌØÎÙÍ ÂÜËÁÐÏÍ É ÓÏÚÄÁÎÉÅ ÎÏ×ÏÇÏ ÂÜËÁÐÁ. |
# Ключи: |
# -n - создаем новый архив независимо от состояния хэша. |
# -f - full_backup - полный бэкап в архив, без хэша. |
# -h - hash - только генерация хэша, без помещения файлов в архив. |
# -c - clean - очиска хранилища с инкрементальным бэкапом и создание нового бэкапа. |
|
############################################# |
use constant DB_DEF_CACHE_SIZE => 4096000; # òÁÚÍÅÒ ËÜÛÁ ÄÌÑ ÒÁÚÍÅÖÅÎÉÑ ÈÜÛÁ × ÐÁÍÑÔÉ |
use constant DB_DEF_CACHE_SIZE => 4096000; # Размер кэша для размежения хэша в памяти |
|
use POSIX; |
use File::Find; |
31,7 → 31,7 |
my $cfg_new_flag = 0; |
my $cfg_clean_flag = 0; |
my $config = 0; |
my $cur_backup_size = 1536; # òÁÚÍÅÒ ÂÌÏËÁ tar |
my $cur_backup_size = 1536; # Размер блока tar |
my $backup_file_base; |
my $prog_pgp_filter; |
my $prog_gzip_filter; |
51,16 → 51,16 |
my $db_hashinfo2; |
my $file; |
my @volume_position=(0); |
my @fs_path=(); # /dir[/file] - ÐÕÔØ Ë ÆÁÊÌÕ/ÄÉÒÅËÔÏÒÉÉ ÄÌÑ ÂÜËÁÐÁ. |
my @fs_notpath=(); # ! - ÏÔÒÉÃÁÎÉÅ ÐÕÔÉ, ÎÅ ÐÏÍÅÝÁÔØ × ÂÜËÁÐ. ÷ÓÅÇÄÁ ÄÏÌÖÅÎ ÂÙÔØ ÐÅÒ×ÙÍ ÓÉÍ×ÏÌÏÍ. |
my @fs_mask=(); # =~ - ÍÁÓËÁ ÄÌÑ ÆÁÊÌÁ ÉÌÉ ÄÉÒÅËÔÏÒÉÉ, Á ÎÅ ÁÂÓÏÌÀÔÎÙÊ ÐÕÔØ. ðÅÒ×ÙÊ ÉÌÉ ×ÔÏÒÏÊ ÓÉÍ×ÏÌ. |
my @fs_filemask=(); # f~ - ÍÁÓËÁ ÄÌÑ ÆÁÊÌÁ. ðÅÒ×ÙÊ ÉÌÉ ×ÔÏÒÏÊ ÓÉÍ×ÏÌ. |
my @fs_dirmask=(); # d~ - ÍÁÓËÁ ÄÌÑ ÄÉÒÅËÔÏÒÉÉ. ðÅÒ×ÙÊ ÉÌÉ ×ÔÏÒÏÊ ÓÉÍ×ÏÌ. |
my @fs_notmask=(); # =! - "îå" ÍÁÓËÁ ÄÌÑ ÆÁÊÌÁ ÉÌÉ ÄÉÒÅËÔÏÒÉÉ, Á ÎÅ ÁÂÓÏÌÀÔÎÙÊ ÐÕÔØ. ðÅÒ×ÙÊ ÉÌÉ ×ÔÏÒÏÊ ÓÉÍ×ÏÌ. |
my @fs_notfilemask=(); # f! - "îå" ÍÁÓËÁ ÄÌÑ ÆÁÊÌÁ. ðÅÒ×ÙÊ ÉÌÉ ×ÔÏÒÏÊ ÓÉÍ×ÏÌ. |
my @fs_notdirmask=(); # d! - "îå" ÍÁÓËÁ ÄÌÑ ÄÉÒÅËÔÏÒÉÉ. ðÅÒ×ÙÊ ÉÌÉ ×ÔÏÒÏÊ ÓÉÍ×ÏÌ. |
my @fs_path=(); # /dir[/file] - путь к файлу/директории для бэкапа. |
my @fs_notpath=(); # ! - отрицание пути, не помещать в бэкап. Всегда должен быть первым символом. |
my @fs_mask=(); # =~ - маска для файла или директории, а не абсолютный путь. Первый или второй символ. |
my @fs_filemask=(); # f~ - маска для файла. Первый или второй символ. |
my @fs_dirmask=(); # d~ - маска для директории. Первый или второй символ. |
my @fs_notmask=(); # =! - "НЕ" маска для файла или директории, а не абсолютный путь. Первый или второй символ. |
my @fs_notfilemask=(); # f! - "НЕ" маска для файла. Первый или второй символ. |
my @fs_notdirmask=(); # d! - "НЕ" маска для директории. Первый или второй символ. |
|
# ------------- ïÂÒÁÂÏÔËÁ ÐÁÒÁÍÅÔÒÏ× ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ |
# ------------- Обработка параметров командной строки |
|
if ($ARGV[0] eq "-n" || $ARGV[0] eq "-h" || $ARGV[0] eq "-f" || $ARGV[0] eq "-c"){ |
$cfg_new_flag=1; |
81,9 → 81,9 |
die "\$cfg_cache_dir ($cfg_cache_dir) not found. Set \$cfg_cache_dir varisble in fsbackup.pl\n"; |
} |
|
$cfg_time_limit *= 60 * 60 * 24; # äÎÉ × ÓÅËÕÎÄÙ. |
$cfg_size_limit *= 1024; # ëÉÌÏÂÁÊÔÙ × ÂÁÊÔÙ. |
$cfg_maximum_archive_size *= 1024; # ëÉÌÏÂÁÊÔÙ × ÂÁÊÔÙ. |
$cfg_time_limit *= 60 * 60 * 24; # Дни в секунды. |
$cfg_size_limit *= 1024; # Килобайты в байты. |
$cfg_maximum_archive_size *= 1024; # Килобайты в байты. |
|
if (-d $cfg_root_path){ |
chdir($cfg_root_path); |
104,7 → 104,7 |
$cfg_clean_flag=0; |
} |
|
#------------------- ðÒÏ×ÅÒÑÅÍ ÐÅÒÅÍÅÎÎÙÅ × ÆÁÊÌÅ ËÏÎÆÉÇÕÒÁÃÉÉ. |
#------------------- Проверяем переменные в файле конфигурации. |
if ($cfg_backup_name !~ /^[\w\d\_]+$/){ |
die "Found illegal characters in $cfg_backup_name ($cfg_backup_name)."; |
} |
170,11 → 170,11 |
mkdir("$cfg_cache_dir/$cfg_backup_name", 0700); |
} |
|
# ---------- áËÔÉ×ÉÒÕÅÍ FTP ÓÏÅÄÉÎÅÎÉÅ |
# ---------- Активируем FTP соединение |
|
ftp_connect(); |
|
#----------- ÷ÙÞÉÓÌÑÅÍ ÕÒÏ×ÅÎØ ÉÎËÒÅÍÅÎÔÁÌØÎÏÓÔÉ. |
#----------- Вычисляем уровень инкрементальности. |
if ($cfg_increment_level != 0 && $cfg_backup_style eq "backup"){ |
$cur_increment_level=0; |
|
211,10 → 211,10 |
print "Current increment number: $cur_increment_level\n" if ($cfg_verbose == &VERB_ALL); |
} |
################################################ |
#----------- óÞÉÔÙ×ÁÅÍ ÈÜÛ × ÐÁÍÑÔØ. |
#----------- Считываем хэш в память. |
|
if ( (-f "$cfg_cache_dir/$cfg_backup_name/.hash" || $cfg_type ne "local" ) && $cfg_new_flag == 0){ |
# óÞÉÔÙ×ÁÅÍ ÔÅËÕÝÉÊ ÈÅÛ × ÐÁÍÑÔØ. |
# Считываем текущий хеш в память. |
|
if ( $cfg_type eq "local"){ |
rename ("$cfg_cache_dir/$cfg_backup_name/.hash", "$cfg_cache_dir/$cfg_backup_name/.hash.last"); |
236,30 → 236,30 |
|
} |
|
# úÁËÒÙ×ÁÅÍ ftp ÓÏÅÄÉÎÅÎÉÅ. óÌÅÄÕÀÝÉÊ ÂÌÏË ÍÏÖÅÔ ×ÙÐÏÌÎÑÔØÓÑ ÇÏÒÁÚÄÏ ÄÏÌØÛÅ |
# ÞÅÍ ÔÁÊÍÁÕÔ ftp. |
# Закрываем ftp соединение. Следующий блок может выполняться гораздо дольше |
# чем таймаут ftp. |
if ( $cfg_type eq "remote_ftp"){ |
$ftp->quit; |
} |
#óÏÚÄÁÅÍ ÎÏ×ÙÊ ÈÅÛ. |
#Создаем новый хеш. |
unlink("$cfg_cache_dir/$cfg_backup_name/.hash"); |
$db_hashinfo2 = new DB_File::HASHINFO ; |
$db_hashinfo2->{'cachesize'} = 100000; |
$dbobj_new = tie(%active_hash_new, "DB_File", "$cfg_cache_dir/$cfg_backup_name/.hash", O_RDWR|O_CREAT, 0644, $db_hashinfo2) || print "Can't create or open DB File!\n"; |
|
# óÏÚÄÁÅÍ ÓÐÉÓÏË ÆÁÊÌÏ× ÄÌÑ ÐÏÍÅÝÅÎÉÑ × ÁÒÈÉ×. |
# Создаем список файлов для помещения в архив. |
open (LIST, ">$cfg_cache_dir/$cfg_backup_name/$cfg_backup_name.list")|| print "Can't create list file ($cfg_cache_dir/$cfg_backup_name/$cfg_backup_name.list).\n"; |
flock (LIST, 2); |
|
# óÐÉÓÏË Ó ÕËÁÚÁÎÉÅÍ ÒÁÚÍÅÒÏ× ÆÁÊÌÏ×. |
# Список с указанием размеров файлов. |
open (LIST_SIZE, ">$cfg_cache_dir/$cfg_backup_name/$cfg_backup_name.lsize")|| print "Can't create list file ($cfg_cache_dir/$cfg_backup_name/$cfg_backup_name.lsize).\n"; |
flock (LIST_SIZE, 2); |
|
# óÏÚÄÁÅÍ ÓÐÉÓÏË ÄÉÒÅËÔÏÒÉÊ × ÁÒÈÉ×Å. |
# Создаем список директорий в архиве. |
open (DIRS, ">$cfg_cache_dir/$cfg_backup_name/$cfg_backup_name.dir")|| print "Can't create list file ($cfg_cache_dir/$cfg_backup_name/$cfg_backup_name.dir).\n"; |
flock (DIRS, 2); |
|
# óÞÉÔÙ×ÁÅÍ ÓÐÉÓÏË ÐÏÄÌÅÖÁÝÉÈ ÂÜËÁÐÕ ÄÉÒÅËÔÏÒÉÊ × ÐÁÍÑÔØ. |
# Считываем список подлежащих бэкапу директорий в память. |
|
while(<DATA>){ |
chomp; |
301,13 → 301,13 |
} |
|
#-------------------------------------------------------------------- |
# ðÏÓÌÅÄÏ×ÁÔÅÌØÎÏ ÐÒÏÓÍÁÔÒÉÒÉ×ÁÅÍ ×ÅÓØ ÓÐÉÓÏË ÄÉÒÅËÔÏÒÉÊ ÏÔÍÅÞÅÎÎÙÈ ÄÌÑ ÂÜËÁÐÁ |
# Последовательно просматририваем весь список директорий отмеченных для бэкапа |
|
|
foreach $cur_pathitem (@fs_path){ |
print "Adding $cur_pathitem....\n" if ($cfg_verbose == &VERB_ALL); |
find (\&add_to_backup, $cur_pathitem); |
chdir($cfg_root_path); # ðÅÒÅÈÏÄÉÍ × ËÏÒÅÎØ, ÔÁË ËÁË find ÄÅÌÁÅÔ chdir. |
chdir($cfg_root_path); # Переходим в корень, так как find делает chdir. |
print "done\n" if ($cfg_verbose == &VERB_ALL); |
} |
close (LIST); |
314,7 → 314,7 |
close (LIST_SIZE); |
close (DIRS); |
#------------ |
# óÏÓÔÁ×ÌÑÅÍ ÓÐÉÓÏË ÕÄÁÌÅÎÎÙÈ ÆÁÊÌÏ×. |
# Составляем список удаленных файлов. |
|
open (DEL, ">$cfg_cache_dir/$cfg_backup_name/$cfg_backup_name.del")|| print "Can't create list file ($cfg_cache_dir/$cfg_backup_name/$cfg_backup_name.del).\n"; |
flock (DEL, 2); |
328,19 → 328,19 |
} |
close(DEL); |
|
# úÁÐÉÓÙ×ÁÅÍ ÈÜÛ ÎÁ ÄÉÓË. |
# Записываем хэш на диск. |
$dbobj_new->sync(); |
untie %active_hash_new; |
untie %active_hash_last; |
|
|
# áËÔÉ×ÉÒÕÅÍ FTP ÓÏÅÄÉÎÅÎÉÅ ×ÔÏÒÏÊ ÒÁÚ. |
# Активируем FTP соединение второй раз. |
ftp_connect(); |
|
#------------ |
# åÓÌÉ ÔÏÌØËÏ ÏÂÎÏ×ÌÑÅÍ ÈÜÛ, ÔÏ ÚÁÐÉÓÙ×ÁÅÍ ÅÇÏ É ×ÙÈÏÄÉÍ. |
# Если только обновляем хэш, то записываем его и выходим. |
|
if ($cfg_backup_style eq "hash"){ # ôÏÌØËÏ ÓÏÚÄÁÔØ ÈÜÛØ ÂÅÚ ÁÒÈÉ×ÉÒÏ×ÁÎÉÑ. |
if ($cfg_backup_style eq "hash"){ # Только создать хэшь без архивирования. |
|
if ( $cfg_type eq "local"){ |
system( "cp -f $cfg_cache_dir/$cfg_backup_name/.hash $cfg_local_path/.hash") == 0 || print "Local FS copy hash failed: $?"; |
354,7 → 354,7 |
} |
|
#------------ |
# áÒÈÉ×ÉÒÕÅÍ É ÐÅÒÅÄÁÅÍ × ÈÒÁÎÉÌÉÝÅ. |
# Архивируем и передаем в хранилище. |
|
if ($list_lines_cnt == 0 && $del_lines_cnt == 0){ |
print "WARNING: Nothing to backup.\n" if ($cfg_verbose >= &VERB_ALL); |
364,7 → 364,7 |
|
print "Storing local backup...\n" if ($cfg_verbose == &VERB_ALL); |
if ($cfg_backup_style eq "sync"){ |
if ($cfg_clean_flag == 1){ # õÄÁÌÉÔØ ÓÔÁÒÙÅ ËÏÐÉÉ |
if ($cfg_clean_flag == 1){ # Удалить старые копии |
print "WARNING: If you really shure to delete $cfg_local_path before sync operatioun uncomment line 'system( \"find \$cfg_local_path ! -path '\$cfg_local_path' -maxdepth 1 -exec \$prog_rm -rf \{\} \\;\");'" if ($cfg_verbose >= &VERB_ALL); |
# system( "find $cfg_local_path ! -path '$cfg_local_path' -maxdepth 1 -exec $prog_rm -rf \{\} \\;"); |
} |
375,7 → 375,7 |
system( "cp -f $cfg_cache_dir/$cfg_backup_name/.hash $cfg_local_path/$backup_file_base.hash") == 0 || print "Local FS copy failed: $?\n"; |
|
} else { |
if ($cfg_clean_flag == 1){ # õÄÁÌÉÔØ ÓÔÁÒÙÅ ËÏÐÉÉ |
if ($cfg_clean_flag == 1){ # Удалить старые копии |
if ($cfg_save_old_backup == 0){ |
system( "$prog_rm -f $cfg_local_path/*"); |
} else { |
392,7 → 392,7 |
system( "cp -f $cfg_cache_dir/$cfg_backup_name/$cfg_backup_name.dir $cfg_local_path/$backup_file_base.dir") == 0 || print "Local FS .dir copy failed: $?\n"; |
system( "cp -f $cfg_cache_dir/$cfg_backup_name/$cfg_backup_name.del $cfg_local_path/$backup_file_base.del") == 0 || print "Local FS .del copy failed: $?\n"; |
system( "cp -f $cfg_cache_dir/$cfg_backup_name/.hash $cfg_local_path/$backup_file_base.hash") == 0 || print "Local FS .hash copy failed: $?\n"; |
# ïÂÒÁÂÁÔÙ×ÁÅÍ ÒÁÚÂÉÅÎÉÅ ÎÁ ÔÏÍÁ |
# Обрабатываем разбиение на тома |
for ($arc_block_level=0; $arc_block_level <= $#volume_position; $arc_block_level++){ |
my $tmp_list_file = crate_tmp_list($arc_block_level, $volume_position[$arc_block_level], $volume_position[$arc_block_level+1], "$cfg_cache_dir/$cfg_backup_name/$cfg_backup_name.list"); |
system( "$prog_tar -c -f - -T $tmp_list_file $prog_gzip_filter $prog_pgp_filter > $cfg_local_path/$backup_file_base-$arc_block_level.tar${arc_ext}") == 0 || print "Local FS tar backup failed: $?\n"; |
402,7 → 402,7 |
} elsif ( $cfg_type eq "remote_ssh"){ |
print "Storing remote ssh backup...\n" if ($cfg_verbose == &VERB_ALL); |
if ($cfg_backup_style eq "sync"){ |
if ($cfg_clean_flag == 1){ # õÄÁÌÉÔØ ÓÔÁÒÙÅ ËÏÐÉÉ |
if ($cfg_clean_flag == 1){ # Удалить старые копии |
system( "$prog_ssh -l $cfg_remote_login $cfg_remote_host find $cfg_remote_path ! -path '$cfg_remote_path' -maxdepth 1 -exec rm -rf \{\} \\;"); |
} |
system( "cat $cfg_cache_dir/$cfg_backup_name/.hash | $prog_ssh -l $cfg_remote_login $cfg_remote_host 'cat - > $cfg_remote_path/.hash'") == 0 || print "SSH connection failed (store .hash): $?\n"; |
423,7 → 423,7 |
} |
close(DEL); |
} else { |
if ($cfg_clean_flag == 1){ # õÄÁÌÉÔØ ÓÔÁÒÙÅ ËÏÐÉÉ |
if ($cfg_clean_flag == 1){ # Удалить старые копии |
|
if ($cfg_save_old_backup == 0){ |
system( "$prog_ssh -l $cfg_remote_login $cfg_remote_host rm -f $cfg_remote_path/*"); |
440,7 → 440,7 |
system( "cat $cfg_cache_dir/$cfg_backup_name/$cfg_backup_name.del | $prog_ssh -l $cfg_remote_login $cfg_remote_host 'cat - > $cfg_remote_path/$backup_file_base.del'") == 0 || print "SSH connection failed (copy .del): $?\n"; |
system( "cat $cfg_cache_dir/$cfg_backup_name/.hash | $prog_ssh -l $cfg_remote_login $cfg_remote_host 'cat - > $cfg_remote_path/$backup_file_base.hash'") == 0 || print "SSH connection failed (copy .hash): $?\n"; |
system( "cat $cfg_cache_dir/$cfg_backup_name/.hash | $prog_ssh -l $cfg_remote_login $cfg_remote_host 'cat - > $cfg_remote_path/.hash'") == 0 || print "SSH connection failed (cache .hash): $?\n"; |
# ïÂÒÁÂÁÔÙ×ÁÅÍ ÒÁÚÂÉÅÎÉÅ ÎÁ ÔÏÍÁ |
# Обрабатываем разбиение на тома |
for ($arc_block_level=0; $arc_block_level <= $#volume_position; $arc_block_level++){ |
my $tmp_list_file = crate_tmp_list($arc_block_level, $volume_position[$arc_block_level], $volume_position[$arc_block_level+1], "$cfg_cache_dir/$cfg_backup_name/$cfg_backup_name.list"); |
system( "$prog_tar -c -f - -T $tmp_list_file $prog_gzip_filter $prog_pgp_filter| $prog_ssh -l $cfg_remote_login $cfg_remote_host 'cat - > $cfg_remote_path/$backup_file_base-$arc_block_level.tar${arc_ext}'") == 0 || print "SSH connection failed (tar): $?\n"; |
452,7 → 452,7 |
if ($cfg_backup_style eq "sync"){ |
print "WARNING: Backup style 'sync' only allowed for local and remote_ssh storage.\n" if ($cfg_verbose >= &VERB_ALL); |
} else { |
if ($cfg_clean_flag == 1){ # õÄÁÌÉÔØ ÓÔÁÒÙÅ ËÏÐÉÉ |
if ($cfg_clean_flag == 1){ # Удалить старые копии |
if ($cfg_save_old_backup == 0){ |
foreach $cur_dir ($ftp->ls()){ |
$ftp->delete($cur_dir); |
486,12 → 486,12 |
$ftp->put("$cfg_cache_dir/$cfg_backup_name/.hash", "$backup_file_base.hash")|| print "Can't PUT old .hash file to remote FTP server\n"; |
$ftp->delete(".hash"); |
$ftp->put("$cfg_cache_dir/$cfg_backup_name/.hash", ".hash")|| print "Can't PUT new .hash file to remote FTP server\n"; |
# ïÂÒÁÂÁÔÙ×ÁÅÍ ÒÁÚÂÉÅÎÉÅ ÎÁ ÔÏÍÁ |
# Обрабатываем разбиение на тома |
for ($arc_block_level=0; $arc_block_level <= $#volume_position; $arc_block_level++){ |
|
# # ðÒÏÂÌÅÍÁ ÂÙÌÁ × ÍÏÄÕÌÅ Net::FTP |
# # Проблема была в модуле Net::FTP |
# if ($arc_block_level > 0){ |
# # ðÅÒÅÏÔËÔÙ×ÁÅÍ ftp ÓÅÓÓÉÀ, ÄÌÑ ÏÂÈÏÄÁ ÐÒÏÂÌÅÍÙ '2Gb' |
# # Переотктываем ftp сессию, для обхода проблемы '2Gb' |
# $ftp->quit; |
# sleep(5); |
# ftp_connect(); |
529,7 → 529,7 |
my $file_fullpath_esc = $file_fullpath; |
$file_fullpath_esc =~ s/\'/\'\\\'\'/g; |
|
# óÏÚÄÁÅÍ ÓÐÉÓÏË ÄÉÒÅËÔÏÒÉÊ |
# Создаем список директорий |
if ((-d "$cfg_root_path/$file_fullpath") && (! -l "$cfg_root_path/$file_fullpath")){ |
if (check_path($file_dir, $file_name) == 1){ |
if ($cfg_backup_style ne "hash"){ |
560,7 → 560,7 |
return; |
} |
} |
# òÁÂÏÔÁÅÍ Ó ÆÁÊÌÁÍÉ |
# Работаем с файлами |
} elsif ((-f "$cfg_root_path/$file_fullpath") || (-l "$cfg_root_path/$file_fullpath")){ |
if (check_path($file_dir, $file_name) == 1){ |
($tmp, $tmp, $stat_mode, $tmp, $stat_uid, $stat_gid, $tmp, $stat_size, $tmp, $stat_mtime) = stat("$cfg_root_path/$file_fullpath"); |
589,7 → 589,7 |
} |
|
############################################### |
# ðÒÏ×ÅÒÑÅÍ ÉÚÍÅÎÉÌÓÑ ÌÉ ÆÁÊÌ ÉÌÉ ÎÅÔ, ÅÓÌÉ ÄÁ ÁÐÄÅÊÔÉÍ ÌÏÇ. |
# Проверяем изменился ли файл или нет, если да апдейтим лог. |
sub check_update{ |
my ($file, $checksum, $filesum, $stat_size) = @_; |
|
599,7 → 599,7 |
print LIST "$file\n"; |
print LIST_SIZE "$stat_size\t$file\n"; |
|
# ïÂÒÁÂÁÔÙ×ÁÅÍ ÓÌÕÞÁÊ ÒÁÚÂÉÅÎÉÑ ÇÉÇÁÎÓËÉÈ ÁÒÈÉ×Ï×. |
# Обрабатываем случай разбиения гиганских архивов. |
if (-l "/$file"){ |
$stat_size = 0; |
} |
623,8 → 623,8 |
} |
|
############################################### |
# 0 - ÎÅ ÄÏÂÁ×ÌÑÔØ ÆÁÊÌ |
# 1 - ÄÏÂÁ×ÔØ ÆÁÊÌ |
# 0 - не добавлять файл |
# 1 - добавть файл |
|
sub check_path { |
my ($dir_name, $file_name) = @_; |
679,7 → 679,7 |
return 1; |
} |
############################################### |
# õÓÔÁÎÁ×ÌÉ×ÁÅÍ ÓÏÅÄÉÎÅÎÉÅ Ó ÕÄÁÌÅÎÎÙÍ ÓÅÒ×ÅÒÏÍ ÐÏ FTP. |
# Устанавливаем соединение с удаленным сервером по FTP. |
|
sub ftp_connect{ |
if ( $cfg_type eq "remote_ftp"){ |
690,7 → 690,7 |
} |
} |
############################################### |
# óÏÄÁÎÉÅ ÓÐÉÓËÁ ÆÁÊÌÏ× ÄÌÑ ÐÏÍÅÝÅÎÉÑ × ÏÐÒÅÄÅÌÅÎÎÙÊ ÔÏÍ ÍÎÏÇÏÔÏÍÎÏÇÏ ÁÒÈÉ×Á. |
# Содание списка файлов для помещения в определенный том многотомного архива. |
|
sub crate_tmp_list{ |
my ($arc_block_level, $position1, $position2, $full_list_path) = @_; |