--- 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, {