Skip to content

migrate · b2 → dosya

Move a bucket off Backblaze B2 in four commands.

Two remotes, one copy, one check. rclone reads from B2 and writes to dosya.dev; nothing at the source is touched. When rclone check comes back clean, delete the bucket and stop the meter.

The run sheet

Fill in two names. Run it top to bottom.

Every line is safe to run twice. rclone skips whatever already matches, so a copy that stops can be started again with the same command. Nothing here deletes anything at B2.

b2 → dosya · my-bucket
01B2 remote
# an application key with read access to the bucket
$ rclone config create b2 b2 \
    account=YOUR_KEY_ID key=YOUR_APPLICATION_KEY
02dosya remote, native or the S3 gateway
# dosya is built into rclone: pick it in rclone config, or in one line
$ rclone config create dosya dosya \
    api_key=dos_YOUR_API_KEY workspace_id=ws_abc123

# no dosya in your provider list? the S3 gateway works on any rclone version
# S3 keys are separate from the API key: generate them in dashboard settings
$ rclone config create dosya s3 provider=Other \
    access_key_id=DOSYAXXXXXXXXXXXXXXXX secret_access_key=your_s3_secret_key \
    endpoint=https://api.dosya.dev/s3 region=us-east-1 force_path_style=true
# native paths are dosya:<folder>
# gateway paths put the workspace first: dosya:ws_abc123/<folder>
03dry run, nothing moves yet
$ rclone copy b2:my-bucket dosya:my-bucket --dry-run
04copy, then prove it with a hash check
$ rclone copy b2:my-bucket dosya:my-bucket \
    --transfers 8 --checkers 16 --fast-list --progress

# prove it landed: size and hash compared on both sides
$ rclone check b2:my-bucket dosya:my-bucket
Read the guide Using rclone with S3-compatible storage rclone turns any S3-compatible bucket into something you can sync, mount or script against. Here is a working config and the flags that actually matter. 5 min read.

Before you press enter

Two things about each end.

Read once, then run. Everything here shows up in the log if you skip it, so nothing is lost, only time.

At B2

  • Scope the key to one bucket. Application keys can be limited to a single bucket and to read-only. Make one for the copy and delete it after.
  • Old versions stay behind. rclone reads the current version of each file. Hidden and previous versions are not copied, which is usually what you want.

At dosya.dev

  • Empty files are refused. A 0-byte object is skipped with a warning and rclone check lists it, so you know which ones.
  • Filenames stop at 255 characters. A longer key fails and shows up in the log; rename it at the source and run the copy again.
  • Upload slots are per key. The Free plan allows 2 transfers in flight per API key, paid plans more. Above the cap rclone waits for a slot rather than failing, retrying every 5 seconds for up to 10 minutes.

Where B2 is the better fit

If you serve terabytes to a CDN, B2's free egress to its CDN partners and its storage pricing are hard to beat, and dosya.dev is not an origin for a video pipeline. Keep B2 as the archive tier and move the files people actually open.

Read the guide Egress fees: the cloud storage cost nobody quotes Storage is priced per gigabyte stored. The bill that surprises people is per gigabyte read. Here is how egress works and why it punishes success. 5 min read.

Questions

Before you run it, answered.

Is anything deleted at B2?
No. rclone copy only ever writes to dosya.dev; it never removes or changes anything at the source. Delete the bucket yourself once rclone check comes back clean.
Do I need a paid dosya.dev plan to migrate?
No. The free plan has 5 GB and every protocol, rclone included. Copy one folder, run the check, and pick a plan when you know the size of what landed.
Will folder structure and modification times survive?
Yes. rclone copies paths as they are and dosya.dev keeps the original modification time on upload, so a later rclone sync sees the files as unchanged.
What if the copy stops halfway?
Run the same command again. rclone compares size and modification time, skips whatever already matches, and finishes the rest. rclone check at the end proves nothing was missed.

Copy one folder first.

5 GB free and every protocol on it. Run the sheet against one folder, read the check, then move the rest.