--- a/SI/ptable.pm Tue Jan 19 14:49:43 2010 +0100
+++ b/SI/ptable.pm Tue Jan 19 23:45:54 2010 +0100
@@ -19,21 +19,23 @@
# LVs (used as disk itself) too)
foreach (glob("/sys/block/*")) {
my $name = basename($_);
- # verbose("device $name");
+ my $dev = "/dev/$name";
+
+ next if !-e "$_/device";
+ next if (grep { /ATTR{removable}/ } `udevadm info --attribute-walk --name $name`)[0] !~ /==.0./;
+ next if (stat $dev)[0] == (stat $0)[0];
- if (!-e "$_/device") {
- # verbose("skipping (non-dev)\n");
- next;
- }
- if ((grep { /ATTR{removable}/ } `udevadm info --attribute-walk --name $name`)[0] !~ /==.0./) {
- # verbose("skipping (removable)\n");
- next;
- }
+ # exclude the device (stick) we're part of - this HACK is
+ # only useful on KVM - the usb stick doesn't appear as a removeable
+ # device
+ next if (stat $0)[0] ~~ [map { (stat)[6] } map { "/dev/" . basename(dirname $_) } glob("$_/*/partition")];
+
+
verbose("\n");
- verbose("device $name\n");
+ verbose("device $dev\n");
- die "ERR: /dev/$name does not exist. (should not happen)"
- if !-e "/dev/$name";
+ die "ERR: $dev does not exist. (should not happen): $!"
+ if !-b $dev;
# now the physical disk -- let's ask for the partition table
@@ -47,8 +49,6 @@
pt => \@sfdisk
};
- push @{$devs->{known}}, "/dev/$name";
-
# and let's prepare the volume entries
foreach (@sfdisk) {
/^(\S+)\s*:.*Id=\s*([[:xdigit:]]+)/ or next;
@@ -56,7 +56,6 @@
origin => "ptable",
ptable_type => $2,
};
- push @{$devs->{known}}, $1;
}
}