+ return error, blacklisted, removable, is_cdrom, partitions, medium_found
+
+ def enumerateBlockDevices(self):
+ print "enumerating block devices..."
+ for blockdev in listdir("/sys/block"):
+ error, blacklisted, removable, is_cdrom, partitions, medium_found = self.getBlockDevInfo(blockdev)
+ print "found block device '%s':" % blockdev,
+ if error:
+ print "error querying properties"
+ elif blacklisted:
+ print "blacklisted"
+ elif not medium_found:
+ print "no medium"
+ else:
+ print "ok, removable=%s, cdrom=%s, partitions=%s, device=%s" % (removable, is_cdrom, partitions, blockdev)
+
+ self.addHotplugPartition(blockdev)
+ for part in partitions:
+ self.addHotplugPartition(part)
+
+ def getAutofsMountpoint(self, device):
+ return "/autofs/%s/" % (device)
+
+ def addHotplugPartition(self, device, physdev = None):
+ if not physdev:
+ dev, part = self.splitDeviceName(device)
+ physdev = dev
+ try:
+ import os
+ physdev = os.readlink("/sys/block/" + dev + "/device")[6:]
+ except IOError:
+ print "couldn't determine blockdev physdev for device", dev
+
+ # device is the device name, without /dev
+ # physdev is the physical device path, which we (might) use to determine the userfriendly name
+ description = self.getUserfriendlyDeviceName(device, physdev)
+
+ p = Partition(mountpoint = self.getAutofsMountpoint(device), description = description, force_mounted = True, device = device)
+ self.partitions.append(p)
+ self.on_partition_list_change("add", p)
+
+ # see if this is a harddrive
+ l = len(device)
+ if l and device[l-1] not in string.digits:
+ error, blacklisted, removable, is_cdrom, partitions, medium_found = self.getBlockDevInfo(device)
+ if not blacklisted and not removable and not is_cdrom and medium_found:
+ self.hdd.append(Harddisk(device))
+ self.hdd.sort()
+ SystemInfo["Harddisk"] = len(self.hdd) > 0
+
+ def removeHotplugPartition(self, device):
+ mountpoint = self.getAutofsMountpoint(device)
+ for x in self.partitions[:]:
+ if x.mountpoint == mountpoint:
+ self.partitions.remove(x)
+ self.on_partition_list_change("remove", x)
+ l = len(device)
+ if l and device[l-1] not in string.digits:
+ idx = 0
+ for hdd in self.hdd:
+ if hdd.device == device:
+ del self.hdd[idx]
+ break
+ SystemInfo["Harddisk"] = len(self.hdd) > 0
+
+ def HDDCount(self):
+ return len(self.hdd)