A cloud storage gateway is used to migrate a volume from a source cloud storage provider to a target cloud storage provider. If necessary, the gateway reconfigures the size of a logical cache associated with local storage devices so that the entire volume can be stored locally. Flushing is disabled and all of the locally stored volume pages are marked as dirty. After compression and encryption policies associated with the source and target are verified to be compatible, flushing is enabled and metadata is updated.