'Copy the contents of a lun to a new lun (i.e., full clone).
:param src_vol:  cinder volume to clone
:param dest_vol:  cinder volume to be created'

def _create_lun_from_lun(self, src_vol, dest_vol):

    size_mb = (dest_vol['size'] * units.Ki)
    src_vol_mb = (src_vol['size'] * units.Ki)
    result = None
    spec_dict = {}
    LOG.debug('Copying    lun    %(src_vol_id)s    onto    lun    %(dest_vol_id)s.', {'src_vol_id': src_vol['id'], 'dest_vol_id': dest_vol['id']})
    try:
        source_lun_info = self.vmem_mg.lun.get_lun_info(src_vol['id'])
        self._validate_lun_type_for_copy(source_lun_info['subType'])
        self._ensure_snapshot_resource_area(src_vol['id'])
        spec_dict = self._process_extra_specs(dest_vol)
        selected_pool = self._get_storage_pool(dest_vol, size_mb, spec_dict['pool_type'], None)
        result = self.vmem_mg.lun.copy_lun_to_new_lun(source=src_vol['id'], destination=dest_vol['id'], storage_pool_id=selected_pool['storage_pool_id'])
        if (not result['success']):
            self._check_error_code(result)
    except Exception:
        LOG.exception('Create    new    lun    from    lun    for    source    %(src)s    =>    destination    %(dest)s    failed!', {'src': src_vol['id'], 'dest': dest_vol['id']})
        raise
    self._wait_for_lun_or_snap_copy(src_vol['id'], dest_obj_id=result['object_id'])
    if (size_mb > src_vol_mb):
        dest_vol_size = dest_vol['size']
        dest_vol['size'] = src_vol['size']
        self._extend_lun(dest_vol, dest_vol_size)
        dest_vol['size'] = dest_vol_size
