# HG changeset patch # User Heiko Schlittermann # Date 1260835271 -3600 # Node ID d67df540f68cd44258cc1caa3e5e379f3096fcf4 # Parent ab747c27a38b47abadc982a8aa8d805749df537d improved LVM detection diff -r ab747c27a38b -r d67df540f68c 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*(?\S+?):/) { + ($lvm->{path} = $+{path}) =~ s/^\/dev\///; } push @dev, {