Exemple #1
0
 def sub_devs(self):
     pseudofs = [
       'lofs',
       'none',
       'proc',
       'sysfs',
     ]
     if self.fs_type in pseudofs + Env.fs_net:
         return set()
     if self.fs_type == "zfs":
         from utilities.subsystems.zfs import zpool_devs
         return set(zpool_devs(self.device.split("/")[0], self.svc.node))
     for res in self.svc.get_resources():
         if hasattr(res, "is_child_dev") and res.is_child_dev(self.device):
             # don't account fs device if the parent resource is driven by the service
             return set()
     return set([self.device])
Exemple #2
0
    def sub_devs(self):
        if self.fs_type == "btrfs":
            from utilities.subsystems.btrfs import btrfs_devs
            return set(btrfs_devs(self.mount_point))
        if self.fs_type == "zfs":
            return set(zpool_devs(self.device.split("/")[0], self.svc.node))

        dev = self.realdev()
        if dev is None or dev.startswith("LABEL=") or dev.startswith("UUID="):
            # realdev() may fail to resolve UUID and LABEL if the hosting dev
            # is not visible
            return set()

        if dev.startswith("/dev/rbd") or dev.startswith("/dev/loop"):
            return set([dev])

        if self.dm_major is None:
            return set([dev])

        try:
            statinfo = os.stat(dev)
        except:
            self.log.error("can not stat %s", dev)
            raise ex.Error

        if not self.is_devmap(statinfo):
            return set([dev])

        if utilities.devices.linux.lv_exists(self, dev):
            # If the fs is built on a lv of a private vg, its
            # disks will be given by the vg resource.
            # if the fs is built on a lv of a shared vg, we
            # don't want to account its disks : don't reserve
            # them, don't account their size multiple times.
            return set()

        devname = 'dm-' + str(os.minor(statinfo.st_rdev))
        syspath = '/sys/block/' + devname + '/slaves'
        devs = utilities.devices.linux.get_blockdev_sd_slaves(syspath)
        return devs
Exemple #3
0
 def sub_devs(self):
     resources = [res for res in self.svc.get_resources("disk.zpool") \
                  if res.name == self.pool]
     if resources:
         return resources[0].sub_devs()
     return set(zpool_devs(self.pool, self.svc.node))
Exemple #4
0
 def _sub_devs(self):
     """
     Search zpool vdevs from the output of "zpool status poolname" if
     imported.
     """
     return set(zpool_devs(self.name, self.svc.node))