'Create a clone from source volume.
InfiniBox does not yet support detached clone so use dd to copy data.
This could be a lengthy operation.
* map source volume
* create and map new volume
* copy data from source to new volume
* unmap both volumes'

@infinisdk_to_cinder_exceptions
def create_cloned_volume(self, volume, src_vref):

    self._asssert_volume_not_mapped(src_vref)
    infinidat_volume = self._create_volume(volume)
    try:
        src_ctx = self._device_connect_context(src_vref)
        dst_ctx = self._device_connect_context(volume)
        with src_ctx as src_dev:
            with dst_ctx as dst_dev:
                dd_block_size = self.configuration.volume_dd_blocksize
                vol_utils.copy_volume(src_dev['device']['path'], dst_dev['device']['path'], (src_vref.size * units.Ki), dd_block_size, sparse=True)
    except Exception:
        infinidat_volume.delete()
        raise
