Модераторы: ZeeLax, powerfox
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ручная архивация в backuppc, Backuppc_zipCreate 
:(
    Опции темы
Stankevich
Дата 16.11.2010, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 17.6.2006

Репутация: нет
Всего: нет



Здравствуйте. 
Столкнулся со следующей проблемой.
2 раза в неделю делается ПОЛНЫЙ бекап.  Сделался и получил, например, номер 110 и 115
Если что-то на файловом сервере пропало,  штатное восстановление backuppc отрабатывает отлично.
Спустя некоторое время, на рейде заканчивается место, я переносил, например, каталог 110 в другое место и нормально.

Спустя некоторое время понадобилось восстановить бекап 110, точнее часть инфы в нём. Соответственно в броузере номер архива не отображался.
Я послез в закрома, переместил назад каталог 110 и...
Дело в том, что его с помощью скрипта нужно разархивировать.
Вот скрипт на всякий: 
Код

#!/usr/bin/perl
#============================================================= -*-perl-*-
#
# BackupPC_zipCreate: create a zip archive of an existing dump
# for restore on a client.
#
# DESCRIPTION
#  
#   Usage: BackupPC_zipCreate [options] files/directories...
#
#   Flags:
#     Required options:
#       -h host         host from which the zip archive is created
#       -n dumpNum      dump number from which the zip archive is created
#                       A negative number means relative to the end (eg -1
#                       means the most recent dump, -2 2nd most recent etc).
#       -s shareName    share name from which the zip archive is created
#
#     Other options:
#       -t              print summary totals
#       -r pathRemove   path prefix that will be replaced with pathAdd
#       -p pathAdd      new path prefix
#       -c level        compression level (default is 0, no compression)
#       -e charset      charset for encoding file names (default: cp1252)
#
#     The -h, -n and -s options specify which dump is used to generate
#     the zip archive.  The -r and -p options can be used to relocate
#     the paths in the zip archive so extracted files can be placed
#     in a location different from their original location.
#
# AUTHOR
#   Guillaume Filion <[email protected]>
#   Based on Backup_tarCreate by Craig Barratt <[email protected]>
#
# COPYRIGHT
#   Copyright (C) 2002-2007  Craig Barratt and Guillaume Filion
#
#   This program is free software; you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation; either version 2 of the License, or
#   (at your option) any later version.
#
#   This program is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#   GNU General Public License for more details.
#
#   You should have received a copy of the GNU General Public License
#   along with this program; if not, write to the Free Software
#   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
#========================================================================
#
# Version 3.1.0, released 25 Nov 2007.
#
# See http://backuppc.sourceforge.net.
#
#========================================================================

use strict;
no  utf8;
use lib "/usr/share/backuppc/lib";
use Archive::Zip qw(:ERROR_CODES);
use File::Path;
use Getopt::Std;
use Encode qw/from_to/;
use IO::Handle;
use BackupPC::Lib;
use BackupPC::Attrib qw(:all);
use BackupPC::FileZIO;
use BackupPC::Zip::FileMember;
use BackupPC::View;

die("BackupPC::Lib->new failed\n") if ( !(my $bpc = BackupPC::Lib->new) );
my $TopDir = $bpc->TopDir();
my $BinDir = $bpc->BinDir();
my %Conf   = $bpc->Conf();

my %opts;

if ( !getopts("te:h:n:p:r:s:c:", \%opts) || @ARGV < 1 ) {
    print STDERR <<EOF;
usage: $0 [options] files/directories...
  Required options:
     -h host         host from which the zip archive is created
     -n dumpNum      dump number from which the tar archive is created
                     A negative number means relative to the end (eg -1
                     means the most recent dump, -2 2nd most recent etc).
     -s shareName    share name from which the zip archive is created

  Other options:
     -t              print summary totals
     -r pathRemove   path prefix that will be replaced with pathAdd
     -p pathAdd      new path prefix
     -c level        compression level (default is 0, no compression)
     -e charset      charset for encoding file names (default: cp1252)
EOF
    exit(1);
}

if ( $opts{h} !~ /^([\w\.\s-]+)$/
        || $opts{h} =~ m{(^|/)\.\.(/|$)} ) {
    print(STDERR "$0: bad host name '$opts{h}'\n");
    exit(1);
}
my $Host = $opts{h};

if ( $opts{n} !~ /^(-?\d+)$/ ) {
    print(STDERR "$0: bad dump number '$opts{n}'\n");
    exit(1);
}
my $Num = $opts{n};

$opts{c} = 0 if ( $opts{c} eq "" );
if ( $opts{c} !~ /^(\d+)$/ ) {
    print(STDERR "$0: invalid compression level '$opts{c}'. 0=none, 9=max\n");
    exit(1);
}
my $compLevel = $opts{c};

my @Backups = $bpc->BackupInfoRead($Host);
my $FileCnt = 0;
my $ByteCnt = 0;
my $DirCnt = 0;
my $SpecialCnt = 0;
my $ErrorCnt = 0;

my $i;
$Num = $Backups[@Backups + $Num]{num} if ( -@Backups <= $Num && $Num < 0 );
for ( $i = 0 ; $i < @Backups ; $i++ ) {
    last if ( $Backups[$i]{num} == $Num );
}
if ( $i >= @Backups ) {
    print(STDERR "$0: bad backup number $Num for host $Host\n");
    exit(1);
}

my $Charset = "cp1252";
$Charset = $opts{e} if ( $opts{e} ne "" );

my $PathRemove = $1 if ( $opts{r} =~ /(.+)/ );
my $PathAdd    = $1 if ( $opts{p} =~ /(.+)/ );
if ( $opts{s} =~ m{(^|/)\.\.(/|$)} ) {
    print(STDERR "$0: bad share name '$opts{s}'\n");
    exit(1);
}
my $ShareName = $opts{s};

my $BufSize    = 1048576;     # 1MB or 2^20
my(%UidCache, %GidCache);
#my $fh = *STDOUT;
my $fh = new IO::Handle;      
$fh->fdopen(fileno(STDOUT),"w");
my $zipfh = Archive::Zip->new();

binmode(STDOUT);
foreach my $dir ( @ARGV ) {
    archiveWrite($zipfh, $dir);
}

sub archiveWrite
{
    my($zipfh, $dir, $zipPathOverride) = @_;

    my $view = BackupPC::View->new($bpc, $Host, \@Backups);

    if ( $dir =~ m{(^|/)\.\.(/|$)} || $dir !~ /^(.*)$/ ) {
        print(STDERR "$0: bad directory '$dir'\n");
    $ErrorCnt++;
        return;
    }
    $dir = "/" if ( $dir eq "." );
    $view->find($Num, $ShareName, $dir, 0, \&ZipWriteFile,
                $zipfh, $zipPathOverride);
}

# Create Zip file
print STDERR "Can't write Zip file\n"
     unless $zipfh->writeToFileHandle($fh, 0) == Archive::Zip::AZ_OK;

#
# print out totals if requested
#
if ( $opts{t} ) {
    print STDERR "Done: $FileCnt files, $ByteCnt bytes, $DirCnt dirs,",
         " $SpecialCnt specials ignored, $ErrorCnt errors\n";
}
exit(0);

###########################################################################
# Subroutines
###########################################################################

sub UidLookup
{
    my($uid) = @_;

    $UidCache{$uid} = (getpwuid($uid))[0] if ( !exists($UidCache{$uid}) );
    return $UidCache{$uid};
}

sub GidLookup
{
    my($gid) = @_;

    $GidCache{$gid} = (getgrgid($gid))[0] if ( !exists($GidCache{$gid}) );
    return $GidCache{$gid};
}

my $Attr;
my $AttrDir;

sub ZipWriteFile
{
    my($hdr, $zipfh, $zipPathOverride) = @_;

    my $tarPath = $hdr->{relPath};
    $tarPath = $zipPathOverride if ( defined($zipPathOverride) );

    if ( defined($PathRemove)
            && substr($tarPath, 0, length($PathRemove)) eq $PathRemove ) {
        substr($tarPath, 0, length($PathRemove)) = $PathAdd;
    }
    $tarPath = $1 if ( $tarPath =~ m{^\.?/+(.*)} );
    $tarPath =~ s{//+}{/}g;
    $hdr->{name} = $tarPath;
    return if ( $tarPath eq "." || $tarPath eq "./" || $tarPath eq "" );

    my $zipmember; # Container to hold the file/directory to zip.

    if ( $hdr->{type} == BPC_FTYPE_DIR ) {
        #
        # Directory: just write the header
        #
        $hdr->{name} .= "/" if ( $hdr->{name} !~ m{/$} );
        from_to($hdr->{name}, "utf8", $Charset) if ( $Charset ne "" );
        $zipmember = Archive::Zip::Member->newDirectoryNamed($hdr->{name});
    $DirCnt++;
    } elsif ( $hdr->{type} == BPC_FTYPE_FILE ) {
        #
        # Regular file: write the header and file
        #
        from_to($hdr->{name}, "utf8", $Charset) if ( $Charset ne "" );
        $zipmember = BackupPC::Zip::FileMember->newFromFileNamed(
                        $hdr->{fullPath},
                        $hdr->{name},
                        $hdr->{size},
                        $hdr->{compress}
                    );
    $FileCnt++;
    $ByteCnt += $hdr->{size};
    } elsif ( $hdr->{type} == BPC_FTYPE_HARDLINK ) {
        #
        # Hardlink file: not supported by Zip, so just make a copy
    # of the pointed-to file.
        #
    # Start by reading the contents of the link.
    #
        my $f = BackupPC::FileZIO->open($hdr->{fullPath}, 0, $hdr->{compress});
        if ( !defined($f) ) {
            print(STDERR "Unable to open file $hdr->{fullPath}\n");
            $ErrorCnt++;
        return;
        }
        my $data;
        while ( $f->read(\$data, $BufSize) > 0 ) {
            $hdr->{linkname} .= $data;
        }
    $f->close;
    #
    # Dump the original file.  Just call the top-level
    # routine, so that we save the hassle of dealing with
    # mangling, merging and attributes.
    #
    archiveWrite($zipfh, $hdr->{linkname}, $hdr->{name});
    } elsif ( $hdr->{type} == BPC_FTYPE_SYMLINK ) {
        #
        # Symlinks can't be Zipped. 8(
    # We could zip the pointed-to dir/file (just like hardlink), but we
    # have to avoid the infinite-loop case of a symlink pointed to a
    # directory above us.  Ignore for now.  Could be a comand-line
    # option later.
    #
    $SpecialCnt++;
    } elsif ( $hdr->{type} == BPC_FTYPE_CHARDEV
           || $hdr->{type} == BPC_FTYPE_BLOCKDEV
           || $hdr->{type} == BPC_FTYPE_FIFO ) {
        #
        # Special files can't be Zipped. 8(
    #
    $SpecialCnt++;
    } else {
        print(STDERR "Got unknown type $hdr->{type} for $hdr->{name}\n");
    $ErrorCnt++;
    }
    return if ( !$zipmember );
    
    #
    # Set the attributes and permissions.  The standard zip file
    # header cannot handle dates prior to 1/1/1980, or 315561600
    # unix seconds, so we round up the mtime.
    #
    my $mtime = $hdr->{mtime};
    $mtime = 315561600 if ( $mtime < 315561600 );
    $zipmember->setLastModFileDateTimeFromUnix($mtime);
    $zipmember->unixFileAttributes($hdr->{mode});
    # Zip files don't accept uid and gid, so we put them in the comment field.
    $zipmember->fileComment("uid=".$hdr->{uid}." gid=".$hdr->{gid})
        if ( $hdr->{uid} || $hdr->{gid} );
    
    # Specify the compression level for this member
    $zipmember->desiredCompressionLevel($compLevel) if ($compLevel =~ /[0-9]/);
    
    # Finally Zip the member
    $zipfh->addMember($zipmember);
}


Вот ман как нужно сделать - 
Код

 BackupPC_zipCreate creates a zip file for any files or directories in a particular backup. Merging of incrementals is done automatically, so you don't need to worry about whether certain files appear in the incremental or full backup.

    The usage is:

        BackupPC_zipCreate [options] files/directories...
        Required options:
           -h host         host from which the zip archive is created
           -n dumpNum      dump number from which the tar archive is created
                           A negative number means relative to the end (eg -1
                           means the most recent dump, -2 2nd most recent etc).
           -s shareName    share name from which the zip archive is created
      
        Other options:
           -t              print summary totals
           -r pathRemove   path prefix that will be replaced with pathAdd
           -p pathAdd      new path prefix
           -c level        compression level (default is 0, no compression)
           -e charset      charset for encoding file names (default: cp1252)

    The command-line files and directories are relative to the specified shareName. The zip file is written to stdout. The -h, -n and -s options specify which dump is used to generate the zip archive. The -r and -p options can be used to relocate the paths in the zip archive so extracted files can be placed in a location different from their original location.

Each of these programs reside in __INSTALLDIR__/bin.


Как делаю я:
Код

BackupPC_zipCreate -t -h backserver -n 110 -s /home/restore/ -r / -p home/restore/249/ . > /home/restore/249.tar

На это мне система отвечает: bad backup number 110 for host backserver.

Может кто-нибудь подсказать как правильно надо делать?
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Linux/UNIX: Oбщие вопросы"
nickless
Imple
pythonwin

В этом форуме предпочтительны вопросы на следующие темы:

  • Конкретные вопросы о конкретном ПО. В таких вопросах желательно привести точные данные о программе: версия программы, версия ОС, версия ядра, и проблему в форме: сделал Х, хотел получить Y, а получил Z.
  • Неконкретные вопросы о выборе ПО
  • Обзоры - как дополнение в ветку Обзоры


  • Вы должны соблюдать правила форума.
  • Помните: какой вопрос, такой и ответ. Прежде чем задать вопрос прочитайте вот эту статью на форуме CIT.
  • Оскорблять запрещается.
  • Религиозные войны в Религиозных войнах.
  • Общение "просто так" в Клубе юнуксоидов. В отличие от многих других разделов, здесь разрешается сдержанно оффтопить и юморить в тему.

За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу).


В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим.


Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программное обеспечение под *NIX системы | Следующая тема »


 




[ Время генерации скрипта: 0.0630 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.