'Creates a logical volume on the object\'s VG.
:param name: Name to use when creating Logical Volume
:param size_str: Size to use when creating Logical Volume
:param lv_type: Type of Volume (default or thin)
:param mirror_count: Use LVM mirroring with specified count'

def create_volume(self, name, size_str, lv_type='default', mirror_count=0):

    if (lv_type == 'thin'):
        pool_path = ('%s/%s' % (self.vg_name, self.vg_thin_pool))
        cmd = (LVM.LVM_CMD_PREFIX + ['lvcreate', '-T', '-V', size_str, '-n', name, pool_path])
    else:
        cmd = (LVM.LVM_CMD_PREFIX + ['lvcreate', '-n', name, self.vg_name, '-L', size_str])
    if (mirror_count > 0):
        cmd.extend(['-m', mirror_count, '--nosync', '--mirrorlog', 'mirrored'])
        terras = (int(size_str[:(-1)]) / 1024.0)
        if (terras >= 1.5):
            rsize = int((2 ** math.ceil((math.log(terras) / math.log(2)))))
            cmd.extend(['-R', str(rsize)])
    try:
        self._execute(root_helper=self._root_helper, run_as_root=True, *cmd)
    except putils.ProcessExecutionError as err:
        LOG.exception('Error    creating    Volume')
        LOG.error('Cmd                    :%s', err.cmd)
        LOG.error('StdOut        :%s', err.stdout)
        LOG.error('StdErr        :%s', err.stderr)
        LOG.error('Current    state:    %s', self.get_all_volume_groups(self._root_helper))
        raise
