improved LVM detection
authorHeiko Schlittermann <hs@schlittermann.de>
Tue, 15 Dec 2009 01:01:11 +0100
changeset 14 d67df540f68c
parent 9 ab747c27a38b
child 17 ac4cd89927d3
improved LVM detection
ftbackup
--- a/ftbackup	Wed Oct 28 23:00:02 2009 +0100
+++ b/ftbackup	Tue Dec 15 01:01:11 2009 +0100
@@ -134,8 +134,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;
 
@@ -200,6 +204,7 @@
 	my ($dev, $mp, $fstype, $options, $dump, $check)
 	    = split;
 	next if not $dump;
+	next if /^\s*#/;
 
 	# $dev does not have to contain the real device
 	my $rdev = $dev;
@@ -210,12 +215,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, {