diff -r 4e3753b998a9 -r fd87c1e3b451 SI/ptable.pm --- 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; } }