---
name: cloud-object-storage-cos-region-copy
title: Moving data between buckets
description: Move data between IBM Cloud&reg; Object Storage buckets in the same or different regions by using rclone to sync objects with parallel multipart uploads.
last-updated: 2026-11-03
---

> ## Documentation Index
> The table of contents for this documentation set is at https://cloud.ibm.com/docs/cloud-object-storage?format=markdown
> The index for all IBM Cloud docs is at: https://cloud.ibm.com/docs/llms.txt
> Use these files to discover more information as needed.

# Moving data between buckets
{: #region-copy}

Move data between IBM Cloud&reg; Object Storage buckets in the same or different regions by using rclone to sync objects with parallel multipart uploads.
{: shortdesc}

At some point, it becomes necessary to move or back up your data to a different IBM Cloud&reg; Object Storage region. One approach to moving or replicating data across object storage regions is to use a 'sync' or 'clone' tool, such as [the open-source `rclone` command-line utility](https://rclone.org/docs/){: external}. This utility syncs a file tree between two locations, including cloud object storage. When `rclone` writes data to Object Storage, it uses the COS/S3 API to segment large objects and uploads the parts in parallel according to sizes and thresholds set as configuration parameters.

This guide provides instructions for copying data from one IBM Cloud Object Storage bucket to another Object Storage bucket within the same region or to a second Object Storage bucket in a different Object Storage region. These steps need to be repeated for all the data that you want to copy from each bucket. After the data is migrated you can verify the integrity of the transfer by using `rclone check`, which produces a list of any objects that don't match either file size or checksum. Additionally, you can keep buckets in sync by regularly running `rclone sync` from your available sources to your chosen destinations.

## Create a destination IBM Cloud Object Storage bucket
{: #region-copy-setup-destination}

You have the option of using your existing instance of IBM Cloud Object Storage or creating a new instance. If you want to reuse your existing instance, skip to step #2.

1. Create an instance of IBM Cloud Object Storage from the [catalog](https://cloud.ibm.com/objectstorage/create).
1. Create any buckets that you need to store your transferred data. Read through the [getting started guide](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-getting-started-cloud-object-storage&format=markdown) to familiarize yourself with key concepts such as [endpoints](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-endpoints&format=markdown) and [storage classes](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-classes&format=markdown).
 1. **The `rclone` utility does not copy any bucket configurations or object metadata**.  Therefore, if you are using any of the Object Storage features such as expiration, archive, key protect, and so on. be sure to configure them appropriately before migrating your data. To view which features are supported at your Object Storage destination, please refer to the [feature matrix](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-service-availability&format=markdown).

Feature configuration and access policies documentation can be viewed at the IBM Cloud portal pages listed below:

* [IBM Cloud Identity and Access Management - IAM](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-iam&format=markdown)
* [Activity Tracking Events](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-at&format=markdown)
* [Metrics Monitoring](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-mm-cos-integration&format=markdown)
* [Object Expiry](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-expiry&format=markdown)
* [Cloud Object Storage Firewall](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-setting-a-firewall&format=markdown)
* [Content Delivery Network - CDN](https://cloud.ibm.com/docs/cis?topic=cis-resolve-override-cos&format=markdown)
* [Archive](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-archive&format=markdown)
* [Key Protect](https://cloud.ibm.com/docs/key-protect?topic=key-protect-integrate-cos&format=markdown)

## Set up a compute resource to run the migration tool
{: #region-copy-compute}

1. Choose a Linux&trade;/macOS&trade;/BSD&trade; machine or an IBM Cloud Infrastructure Bare Metal or Virtual Server with the best proximity to your data. Selecting a data center in the same region as the destination bucket is generally the best choice (for example, if moving data from `mel01` to `au-syd`, use a VM or Bare Metal in `au-syd`). The recommended Server configuration is: 32 GB RAM, 2-4 core processor, and private network speed of 1000 Mbps.
1. If you are running the migration on an IBM Cloud Infrastructure Bare Metal or Virtual Server use the **private** Object Storage endpoints to avoid network egress charges.
1. Otherwise, use the **public** or **direct** Object Storage endpoints.
1. Install `rclone` from [either a package manager or a pre-compiled binary](https://rclone.org/install/){: external}.

```sh
curl https://rclone.org/install.sh | sudo bash
```
{: pre}

## Configure `rclone` for Object Storage source data
{: #region-copy-config-cos}

Create 'profiles' for your source and destination of the migration in `rclone`.

### If needed, obtain Object Storage credentials
{: #region-copy-config-cos-credential}

1. Select your Object Storage instance in the IBM Cloud console.
1. Click **Service Credentials** in the navigation pane.
1. Click **New credential** to generate credential information.
1. Select **Advanced** options.
1. Turn HMAC credentials to **On**.
1. Click **Add**.
1. View the credential that you created, and copy the JSON contents.

### Get Object Storage endpoint
{: #region-copy-config-cos-endpoint}

1. Click **Buckets** in the navigation pane.
1. Click the migration destination bucket.
1. Click **Configuration** in the navigation pane.
1. Scroll down to the **Endpoints** section and choose the endpoint based on where you are running the migration tool.
1. Create the Object Storage destination by copying the following and pasting into `rclone.conf`.

```sh
[COS_SOURCE]
type = s3
provider = IBMCOS
env_auth = false
access_key_id =
secret_access_key =
endpoint =
```
{: codeblock}

Use `[COS_DESTINATION]` as the name of the profile you need to create to configure the destination. Repeat the steps above,

Using your credentials and desired endpoint, complete the following fields:

```sh
access_key_id = <access_key_id>
secret_access_key = <secret_access_key>
endpoint = <bucket endpoint>
```
{: codeblock}

## Configure `rclone` for Object Storage destination data
{: #region-copy-config-cos-destination}

Repeat the previous steps for the destination buckets.

## Verify that the source and destination are properly configured
{: #region-copy-verify}

* List the buckets associated with the source to verify `rclone` is properly configured.

```sh
rclone lsd COS_SOURCE:
```
{: pre}

* List the buckets associated with the destination to verify `rclone` is properly configured.

```sh
rclone lsd COS_DESTINATION:
```
{: pre}

If you are using the same Object Storage instance for the source and destination, the bucket listings match.
{: note}

## Run `rclone`
{: #region-copy-run}

1. Test your configuration with a dry run (where no data is copied) of `rclone` to test the copy of the objects in your source bucket (for example, `source-test`) to target bucket (for example, `destination-test`), where `source-test` and `destination-test` are the respective source and destination bucket names.

```sh
   rclone --dry-run copy COS_SOURCE:source-test COS_DESTINATION:destination-test
```

   {: pre}

1. Check that the files you want to migrate appear in the command output. If everything looks good, remove the `--dry-run` flag and, optionally add `-v` and/or `-P` flag to copy the data and track progress. Using the optional `--checksum` flag avoids updating any files that have the same MD5 hash and object size in both locations.

```sh
   rclone -v -P copy --checksum COS_SOURCE:source-test COS_DESTINATION:destination-test
```

   {: pre}

Try to max out the CPU, memory, and network on the machine running `rclone` to get the fastest transfer time.

There are other parameters to consider when tuning `rclone`. Different combinations of these values impact CPU, memory, and transfer times for the objects in your bucket.

| Flag | Type | Description |
| --- | --- | --- |
| `--checkers` | `int` | Number of checkers to run in parallel (default 8). This is the number of checksums compare threads running. We recommend increasing this to 64 or more. |
| `--transfers` | `int` | This is the number of objects to transfer in parallel (default 4). We recommend increasing this to 64 or 128 or higher when transferring many small files. |
| `--multi-thread-streams` | `int` | Download large files (> 250M) in multiple parts in parallel. This improves the download time of large files (default 4). |
| `--s3-upload-concurrency` | `int` | The number of parts of large files (> 200M) to upload in parallel. This improves the upload time of large files (default 4). |
{: caption="`rclone` options" caption-side="top"}

Migrating data using `rclone copy` only copies but does not delete the source data.
{: tip}

The copy process should be repeated for all other source buckets that require migration/copy/backup.