[merged] deb-0.3
authorHeiko Schlittermann <hs@schlittermann.de>
Tue, 15 Dec 2009 01:12:33 +0100
changeset 17 ac4cd89927d3
parent 16 2b2d175c2403 (current diff)
parent 14 d67df540f68c (diff)
child 18 3fbf367303a7
[merged]
ftbackup
--- a/ftbackup	Tue Dec 15 01:10:57 2009 +0100
+++ b/ftbackup	Tue Dec 15 01:12:33 2009 +0100
@@ -139,8 +139,12 @@
 
 	    (my $device) = (grep /lv name/i, `lvdisplay $snap`)[0] =~ /(\S+)\s*$/;
 
-	    system($_ = "fsck -f @{[$opt_verbose ? '-C0' : '']} -y $device");
-	    warn "fsck on $device (using: $_) failed\n" if $?;
+	    for (my $retries = 3; $retries; $retries--) {
+		system($_ = "fsck -f @{[$opt_verbose ? '-C0' : '']} -y $device");
+		last if not $?;
+		warn "fsck on $device (using: $_) failed\n";
+		warn "retrying\n" if $retries > 1;
+	    }
 
 	    ($dev->{dump}) = $device;
 
@@ -216,12 +220,12 @@
 	}
 	$rdev = readlink $rdev while -l $rdev;
 
+	my ($major, $minor) = ((stat _)[6] >> 8, (stat _)[6] & 0xff);
+
 	# if it's LVM we gather more information (to support snapshots)
-	# FIXME: could have used `lvdisplay -c'
 	my $lvm;
-	if ((stat $rdev)[6] >> 8 == $dev_mapper) {
-	    @{$lvm}{qw/vg lv/} = map { s/--/-/g; $_ } basename($rdev) =~ /(.+[^-])-([^-].+)/;
-	    $lvm->{path} = "$lvm->{vg}/$lvm->{lv}";
+	if ($_ = (grep { /:$major:$minor\s*$/ } `lvdisplay -c`)[0] and /\s*(?<path>\S+?):/) {
+	    ($lvm->{path} = $+{path}) =~ s/^\/dev\///;
 	}
 
 	push @dev, {