X-Git-Url: https://oss.titaniummirror.com/gitweb?a=blobdiff_plain;f=BackupPC_ovz;h=38e888ac0016e6e96afbde72c0bc3ffa9e6562a8;hb=HEAD;hp=014e0827edcb36da2d48df2b8b16f11d4a399c19;hpb=bf4484397a4859f7a246c675aa857441a6598e3c;p=ovzbpc.git diff --git a/BackupPC_ovz b/BackupPC_ovz index 014e082..38e888a 100755 --- a/BackupPC_ovz +++ b/BackupPC_ovz @@ -24,10 +24,13 @@ my $snapsize = '25g'; my $hnlistFile = "/etc/backuppc/".basename($0).".hnlist"; my $velistFile = $ENV{HOME}."/log/".basename($0).".velist"; -# Uncomment one of the following +# Write to the debug file only if it is already present +my $dbgfn = "/tmp/BackupPC_ovz.debug"; my $dbgf; -open $dbgf, ">>/tmp/BackupPC_ovz.debug" || die "Cannot open debug file"; -#open $dbgf, ">>/dev/null" || die "Cannot open debug file"; +if ( ! -f $dbgfn) { + $dbgfn = "/dev/null"; +} +open $dbgf, ">>$dbgfn" || die "Cannot open debug file $dbgfn"; sub mydie($) { @@ -85,6 +88,8 @@ sub refreshConfig() # Write the VEs on all HNs to a config file on the BackupPC server for # later use. my @HNS = (); + + print $dbgf ": refreshConfig\n"; open my $cfg, "<$hnlistFile" || mydie "Cannot read $hnlistFile"; while (<$cfg>) { chomp; @@ -270,6 +275,7 @@ sub printVeEntry($) sub delSnapshot($) { my ($ve) = @_; + print $dbgf ": delSnapshot\n"; mydie "No VE record for delSnapshot" if (!defined($ve)); #print "delSnapshot: doing nothing for now\n"; @@ -279,12 +285,19 @@ sub delSnapshot($) my $dir = $ve->{'snaproot'}; if (defined($dir) && -d $dir) { #cmdSystemOrEval("rm -rf $dir/etc/vzdump"); + print $dbgf ": delSnapshot snapshot mounted at $dir\n"; cmdSystemOrEval("umount $dir"); cmdSystemOrEval("rmdir $dir"); } my $dev = $ve->{'snapdev'}; - cmdSystemOrEval("lvremove -f $dev >/dev/null 2>&1") if (-b $dev); + #cmdSystemOrEval("lvremove -f $dev >/dev/null 2>&1") if (-b $dev); + if (-b $dev) { + print $dbgf ": removing LV $dev\n"; + system("lvremove -f $dev >>$dbgfn 2>&1") + } else { + print $dbgf ": lvremove: $dev is not block special\n"; + } } sub getDevice($) @@ -416,25 +429,31 @@ sub restoreConfigs($) sub checkRunningClient() { + print $dbgf ": checkRunningClient, vzsnap=$vzsnap\n"; mydie "A backup or restore operation are already in progress" if (Proc::PID::File->running({ dir => '/tmp', verify => 1 })); # Clean up any prior backup's mount point and snapshot, if it exists. # Note that the snapshot is small, so we don't really want it lying around! + # There are cases where the snapshot will not show as a snapshot, and in + # these cases the LV will not be removed by this function. my $vg = undef; open my $fh, "lvscan|" || mydie "Unable to exec lvscan"; while (my $line = <$fh>) { + #print $dbgf ": checkRunningClient lvscan line=$line\n"; if ($line =~ m|^\s+ACTIVE\s+Snapshot\s+\'/dev/([^/]+)/$vzsnap\'\s|) { $vg = $1; + #print $dbgf ": checkRunningClient vg=$vg\n"; } } close($fh); if (defined($vg)) { my $dev = "/dev/mapper/$vg-$vzsnap"; - #print "Found vzsnap lv $dev\n"; + print $dbgf ": found vzsnap lv $dev\n"; cmdSystemOrEval("umount /$vzsnap"); cmdSystemOrEval("rmdir /$vzsnap") if (-d "/$vzsnap"); - cmdSystemOrEval("lvremove -f $dev >/dev/null 2>&1") if (-b $dev); + #cmdSystemOrEval("lvremove -f $dev >/dev/null 2>&1") if (-b $dev); + system("lvremove -f $dev >>$dbgfn 2>&1") if (-b $dev); } } @@ -448,6 +467,7 @@ sub runPing() my $host = shift(@ARGV); my $cmd = join(' ', @ARGV); + print $dbgf ": runPing host=$host, cmd=$cmd\n"; # Find $host in the list of VEs loadVeList(); my $hostname = gethostbyaddr(gethostbyname($host), AF_INET); @@ -467,6 +487,7 @@ sub runClient($) { my ($restore) = @_; + print $dbgf ": runClient restore=$restore\n"; checkRunningClient(); my $veid = shift(@ARGV); @@ -502,6 +523,8 @@ sub runClient($) # Remove snapshot, we're done delSnapshot($ve); + print $dbgf ": runClient complete\n"; + # Pass the return code back #exit $ret; FIXME: currently, cmdSystemOrEval doesn't return a retcode. exit 0; @@ -519,8 +542,9 @@ sub runClient($) sub runServer($) { my ($restore) = @_; - my $host = shift(@ARGV); + + print $dbgf ": runServer restore=$restore, host=$host\n"; mydie "Hostname argument required" if (!defined($host)); mydie "No command to execute after hostname" if ($#ARGV < 0);