# HG changeset patch # User Heiko Schlittermann # Date 1260835953 -3600 # Node ID ac4cd89927d30e2c0f050b925d9f10f18d30b2ec # Parent 2b2d175c2403cf067ac01256dbcc55117bc89d36# Parent d67df540f68cd44258cc1caa3e5e379f3096fcf4 [merged] diff -r 2b2d175c2403 -r ac4cd89927d3 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*(?\S+?):/) { + ($lvm->{path} = $+{path}) =~ s/^\/dev\///; } push @dev, {