SI/ptable.pm
changeset 16 fd87c1e3b451
parent 15 4e3753b998a9
child 17 d4942418a9ea
--- 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;
 	    }
     }